<?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>140442</bug_id>
          
          <creation_ts>2015-01-14 08:11:45 -0800</creation_ts>
          <short_desc>Rename Font to FontCascade</short_desc>
          <delta_ts>2015-01-15 12:44:34 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>135290</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1061178</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-14 08:11:45 -0800</bug_when>
    <thetext>We can then rename SimpleFontData to Font. This will match better the usual definition of &quot;font&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061181</commentid>
    <comment_count>1</comment_count>
      <attachid>244604</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-14 08:15:44 -0800</bug_when>
    <thetext>Created attachment 244604
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061182</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 08:17:37 -0800</bug_when>
    <thetext>Attachment 244604 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCascade.h:272:  The parameter name &quot;c&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/FontCascade.cpp:737:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/FontCascade.cpp:738:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/FontCascade.cpp:817:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/FontCascade.cpp:943:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 139 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061187</commentid>
    <comment_count>3</comment_count>
      <attachid>244604</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-14 08:55:51 -0800</bug_when>
    <thetext>Comment on attachment 244604
patch

Need to update CMakeList.txt.

Also, I agree with the style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061357</commentid>
    <comment_count>4</comment_count>
      <attachid>244653</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-14 15:37:10 -0800</bug_when>
    <thetext>Created attachment 244653
for bots 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061361</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-01-14 15:42:27 -0800</bug_when>
    <thetext>Oh my lord</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061365</commentid>
    <comment_count>6</comment_count>
      <attachid>244655</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-14 15:46:04 -0800</bug_when>
    <thetext>Created attachment 244655
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061516</commentid>
    <comment_count>7</comment_count>
      <attachid>244684</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 02:21:05 -0800</bug_when>
    <thetext>Created attachment 244684
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061519</commentid>
    <comment_count>8</comment_count>
      <attachid>244685</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 02:53:15 -0800</bug_when>
    <thetext>Created attachment 244685
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061525</commentid>
    <comment_count>9</comment_count>
      <attachid>244686</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 03:31:23 -0800</bug_when>
    <thetext>Created attachment 244686
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061526</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-15 03:43:55 -0800</bug_when>
    <thetext>Attachment 244686 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/UniscribeController.h:30:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 1 in 149 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061527</commentid>
    <comment_count>11</comment_count>
      <attachid>244687</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 04:03:01 -0800</bug_when>
    <thetext>Created attachment 244687
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061529</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-15 04:05:44 -0800</bug_when>
    <thetext>Attachment 244687 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/UniscribeController.h:30:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 1 in 151 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061533</commentid>
    <comment_count>13</comment_count>
      <attachid>244688</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 05:39:57 -0800</bug_when>
    <thetext>Created attachment 244688
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061534</commentid>
    <comment_count>14</comment_count>
      <attachid>244689</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 05:50:02 -0800</bug_when>
    <thetext>Created attachment 244689
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061535</commentid>
    <comment_count>15</comment_count>
      <attachid>244690</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 06:03:11 -0800</bug_when>
    <thetext>Created attachment 244690
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061538</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 06:21:43 -0800</bug_when>
    <thetext>https://trac.webkit.org/r178510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061557</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-01-15 09:19:40 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; https://trac.webkit.org/r178510

It broke the Apple Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061600</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 11:44:36 -0800</bug_when>
    <thetext>https://trac.webkit.org/r178520 should help some</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061608</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-15 12:44:34 -0800</bug_when>
    <thetext>Windows build if fixed after:

http://trac.webkit.org/changeset/178521
http://trac.webkit.org/changeset/178523
http://trac.webkit.org/changeset/178525</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244604</attachid>
            <date>2015-01-14 08:15:44 -0800</date>
            <delta_ts>2015-01-14 15:37:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>font-rename.patch</filename>
            <type>text/plain</type>
            <size>392616</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgY2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRj
aCBiZXR0ZXIgdGhlIHVzdWFsIGRlZmluaXRpb24gb2YgImZvbnQiLgorCiAyMDE1LTAxLTE0ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OKHIxNzgzNjcpOiBbR1N0cmVhbWVyXSBTZXZlcmFsIG1lZGlhIHRlc3RzIHRpbWUgb3V0
IGFmdGVyIHIxNzgzNjcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNzg0MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTM2
LDYgKzEzNiwxMyBAQCBfX1pON1dlYkNvcmUxMUNhY2hlZEltYWdlMTZpbWFnZUZvclJlbmRlCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTBjaG9vc2VGaWxlRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMTFGaWxlQ2hvb3NlcjExY2hvb3NlRmlsZXNFUktOM1dURjZWZWN0b3JJTlMxXzZT
dHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlMTFGaWxlQ2hv
b3NlckQxRXYKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxMXNldENvZGVQYXRoRU5TMF84Q29k
ZVBhdGhFCitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMThzaG91bGRVc2VTbW9vdGhpbmdFdgor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTIxc2V0U2hvdWxkVXNlU21vb3RoaW5nRWIKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGUyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKK19f
Wk43V2ViQ29yZTExRm9udENhc2NhZGVDMUVSS05TXzE2Rm9udFBsYXRmb3JtRGF0YUViTlNfMTdG
b250U21vb3RoaW5nTW9kZUUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGVDMUV2CitfX1pON1dl
YkNvcmUxMUZvbnRDYXNjYWRlYVNFUktTMF8KIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxMWxv
YWRBcmNoaXZlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzdBcmNoaXZlRUVFCiBfX1pON1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTFzaG91bGRDbG9zZUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTF1
cmxTZWxlY3RlZEVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFTlM0XzEwUGFzc1JlZlB0cklOU181
RXZlbnRFRUVOU18xMUxvY2tIaXN0b3J5RU5TXzE5TG9ja0JhY2tGb3J3YXJkTGlzdEVOU18xOFNo
b3VsZFNlbmRSZWZlcnJlckUKQEAgLTY1NSw5ICs2NjIsOSBAQCBfX1pON1dlYkNvcmUxNVNRTGl0
ZVN0YXRlbWVudEMxRVJOU18xNFNRCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudEQxRXYK
IF9fWk43V2ViQ29yZTE1U2Nyb2xsQWxpZ25tZW50MTdhbGlnbkNlbnRlckFsd2F5c0UKIF9fWk43
V2ViQ29yZTE1U2Nyb2xsQWxpZ25tZW50MTlhbGlnblRvRWRnZUlmTmVlZGVkRQotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxM3JpZ2h0VHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNf
NEZvbnRFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJp
bmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5T
MF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEUKLV9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNh
dG9yNXdpZHRoRVJLTjNXVEY2U3RyaW5nRVJLTlNfNEZvbnRFTlMwXzI0RW5hYmxlUm91bmRpbmdI
YWNrc09yTm90RQorX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxM3JpZ2h0VHJ1bmNhdGVF
UktOM1dURjZTdHJpbmdFZlJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hh
Y2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVF
UktOM1dURjZTdHJpbmdFZlJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hh
Y2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3aWR0aEVSS04zV1RGNlN0
cmluZ0VSS05TXzExRm9udENhc2NhZGVFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQog
X19aTjdXZWJDb3JlMTVVc2VySW5wdXRCcmlkZ2UxMWxvYWRSZXF1ZXN0RVJLTlNfMTZGcmFtZUxv
YWRSZXF1ZXN0RU5TXzExSW5wdXRTb3VyY2VFCiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRn
ZTExcmVsb2FkRnJhbWVFUE5TXzVGcmFtZUViTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29y
ZTE1VXNlcklucHV0QnJpZGdlMTJ0cnlDbG9zZVBhZ2VFTlNfMTFJbnB1dFNvdXJjZUUKQEAgLTEx
MjYsMTMgKzExMzMsNiBAQCBfX1pON1dlYkNvcmU0MGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lRm9y
CiBfX1pON1dlYkNvcmU0MHJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9WaWV3cG9ydFNpemVF
Uk5TXzE4Vmlld3BvcnRBdHRyaWJ1dGVzRU5TXzdJbnRTaXplRWYKIF9fWk43V2ViQ29yZTQyVVJM
QnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50RVA1TlNVUkwxOENGVVJMQ29t
cG9uZW50VHlwZQogX19aTjdXZWJDb3JlNDdhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRh
Y2htZW50Q2hhcmFjdGVyc0VQMThOU0F0dHJpYnV0ZWRTdHJpbmcKLV9fWk43V2ViQ29yZTRGb250
MTFzZXRDb2RlUGF0aEVOUzBfOENvZGVQYXRoRQotX19aTjdXZWJDb3JlNEZvbnQxOHNob3VsZFVz
ZVNtb290aGluZ0V2Ci1fX1pON1dlYkNvcmU0Rm9udDIxc2V0U2hvdWxkVXNlU21vb3RoaW5nRWIK
LV9fWk43V2ViQ29yZTRGb250MjlzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlc0VqCi1fX1pO
N1dlYkNvcmU0Rm9udEMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18xN0ZvbnRTbW9vdGhp
bmdNb2RlRQotX19aTjdXZWJDb3JlNEZvbnRDMUV2Ci1fX1pON1dlYkNvcmU0Rm9udGFTRVJLUzBf
CiBfX1pON1dlYkNvcmU0SWNvbjE4Y3JlYXRlSWNvbkZvckZpbGVzRVJLTjNXVEY2VmVjdG9ySU5T
MV82U3RyaW5nRUxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTRJY29u
RDFFdgogX19aTjdXZWJDb3JlNE5vZGUxMHJlbmRlclJlY3RFUGIKQEAgLTE2MTcsNiArMTYxNyw5
IEBAIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXMzZW5kRWpSaQogX19aTks3V2ViQ29yZTEwVGlt
ZVJhbmdlczRjb3B5RXYKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM1c3RhcnRFalJpCiBfX1pO
SzdXZWJDb3JlMTBUaW1lUmFuZ2VzNmxlbmd0aEV2CitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2Fk
ZTV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0
YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92
ZXJmbG93RQorX19aTks3V2ViQ29yZTExRm9udENhc2NhZGU4ZHJhd1RleHRFUE5TXzE1R3JhcGhp
Y3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWlOUzBfMjRDdXN0b21G
b250Tm90UmVhZHlBY3Rpb25FCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZWVxRVJLUzBfCiBf
X1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjEwaXNDb21wbGV0ZUV2CiBfX1pOSzdXZWJDb3JlMTFG
cmFtZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk5L
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRmcmFtZUhhc0xvYWRlZEV2CkBAIC0xNjU2LDcgKzE2NTks
NiBAQCBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXllcjI0bmVlZHNDb21wb3NpCiBfX1pOSzdXZWJD
b3JlMTFSZW5kZXJTdHlsZTExZm9udE1ldHJpY3NFdgogX19aTks3V2ViQ29yZTExUmVuZGVyU3R5
bGUxNWZvbnREZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTIxdmlzaXRl
ZERlcGVuZGVudENvbG9yRWkKLV9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlNGZvbnRFdgogX19a
Tks3V2ViQ29yZTEyUmVuZGVySW5saW5lMTZsaW5lc0JvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNv
cmUxMlJlbmRlck9iamVjdDE0ZW5jbG9zaW5nTGF5ZXJFdgogX19aTks3V2ViQ29yZTEyUmVuZGVy
T2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktOU18xMEZsb2F0UG9pbnRFagpAQCAtMTk0NCw5ICsx
OTQ2LDYgQEAgX19aTks3V2ViQ29yZTNVUkw0dXNlckV2CiBfX1pOSzdXZWJDb3JlM1VSTDVxdWVy
eUV2CiBfX1pOSzdXZWJDb3JlM1VSTDhwcm90b2NvbEV2CiBfX1pOSzdXZWJDb3JlM1VSTGN2UDVO
U1VSTEV2Ci1fX1pOSzdXZWJDb3JlNEZvbnQ1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFz
aFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRy
YWl0c0lTOF9FRUVFUE5TXzEzR2x5cGhPdmVyZmxvd0UKLV9fWk5LN1dlYkNvcmU0Rm9udDhkcmF3
VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2lu
dEVpaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKLV9fWk5LN1dlYkNvcmU0Rm9udGVx
RVJLUzBfCiBfX1pOSzdXZWJDb3JlNE5vZGUxMHNoYWRvd0hvc3RFdgogX19aTks3V2ViQ29yZTRO
b2RlMTF0ZXh0Q29udGVudEViCiBfX1pOSzdXZWJDb3JlNE5vZGUxM293bmVyRG9jdW1lbnRFdgpA
QCAtMjY1NiwxMSArMjY1NSw2IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjNzZXRJ
c0FjY2UKIF9fWk43V2ViQ29yZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBf
X1pON1dlYkNvcmUxNUxlZ2FjeVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19a
TjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdP
bGRQcm9wZXJ0aWVzRVJLUzBfCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRy
dW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3RFUmZiZgotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJL
TjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVS
ZmJmCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNX
VEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJm
YgotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJL
TjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVS
ZmJmCiBfX1pON1dlYkNvcmUxNWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9u
RQogX19aTjdXZWJDb3JlMTVzdGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29y
ZTE1c3RhcnRPZkRvY3VtZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3MDAsOCArNDcwMCw4IEBACiAJCUIyQzNEQTQ5MEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMTkwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
MUEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovOyB9OwogCQlCMkMzREE0QjBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMUIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJl
YW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlC
MkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dC5jcHAgKi87IH07Ci0JCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MDBEMDA2Q0Q2
MDBFRjZGMjYgLyogRm9udC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUIyQzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE0RjBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwICovOyB9OworCQlCMkMzREE2MTBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTYyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5jcHAgKi87IH07CiAJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYg
LyogU2ltcGxlRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCAqLzsgfTsKQEAgLTEyMDczLDggKzEyMDczLDggQEAKIAkJQjJDM0RBMTkwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkMzREExQTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0U3RyZWFtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2Fk
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTUwMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FzY2FkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Rm9udENhc2NhZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTEwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9udENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0MDUsNiArMjA0MDUsOCBAQAogCQkJCUIyNzUz
NTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1Mzgx
NDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCiAJCQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8q
IENvbG9yU3BhY2UuaCAqLywKKwkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENh
c2NhZGUuY3BwICovLAorCQkJCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZS5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0
ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERh
c2hBcnJheS5oICovLApAQCAtMjA0MzAsOCArMjA0MzIsNiBAQAogCQkJCUIyNzUzNTNFMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovLAogCQkJCUIyNzUzNTNGMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFNpemUuaCAqLywKIAkJCQk1OENEMzVDQTE4RUI0QzM5MDBCOUYzQUMgLyog
RmxvYXRTaXplSGFzaC5oICovLAotCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
LmNwcCAqLywKLQkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAogCQkJ
CUJDQjkyRDRFMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLywKIAkJCQlCMkMz
REE1MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCAqLywKIAkJCQlCMkMzREE1MjBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggKi8sCkBAIC0yNDI5OSw3ICsyNDI5OSw3IEBA
CiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDIzNTE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNF
dmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FzY2FkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOTJENEYxMjkzNTUwQjAwQzgzODdGIC8q
IEZvbnRCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjMwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBRkZDN0UwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4
MDAsNyArMjc4MDAsNyBAQAogCQkJCUQ3MkY2RDc5MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93VGhy
ZWFkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk5M0JFNTBCMkYyQjFDMDA1
MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlEMjM2
MTRFQUJEMjYwMDkwRDc1RSAvKiBGb2N1c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIy
QzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIy
QzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTM3MjdERkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCMkFGRkM3QzBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKICNp
bXBvcnQgIkNocm9tZS5oIgogI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCi0jaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQg
IkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKQEAgLTE3NTgsNyArMTc1
OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFz
aWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOworICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgaW50IGRlY29yID0gc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKICAgICBpZiAo
KGRlY29yICYgKFRleHREZWNvcmF0aW9uVW5kZXJsaW5lIHwgVGV4dERlY29yYXRpb25MaW5lVGhy
b3VnaCkpICE9IDApIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDYsNyArNDYsNyBAQAogI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJDb2xv
ck1hYy5oIgogI2ltcG9ydCAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW1wb3J0
ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW1wb3J0
ICJFZGl0b3IuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAj
aW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIK
ICNpbXBvcnQgIkhUTUxBbmNob3JFbGVtZW50LmgiCkBAIC04NDgsNyArODQ4LDcgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250
IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3Np
YmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5n
ZXROU0ZvbnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3Ry
aW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAgIAogICAgIC8vIHNl
dCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcs
IE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Ioc3R5
bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwgcmFuZ2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBACiAjaW1wb3J0ICJET01Qcml2YXRlLmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVy
bmFsLmgiCiAjaW1wb3J0ICJEcmFnSW1hZ2UuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiSFRNTEVsZW1lbnQu
aCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKE5TRm9udCAq
KV9mb250CiAgICAgYXV0byByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXIt
PnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVy
biByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5T
Rm9udCgpOwogfQogI2Vsc2UKIC0gKENURm9udFJlZilfZm9udApAQCAtNjc3LDcgKzY3Nyw3IEBA
IC0gKENURm9udFJlZilfZm9udAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNl
bGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5n
ZXRDVEZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQkocmV2
aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4
dGVuc2lvbnMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbXBvcnQgIkRP
TU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9ydCAi
RmxvYXRQb2ludC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
ICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJIVE1MQXJlYUVsZW1lbnQuaCIK
ICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCkBAIC03MSw3ICs3MSw3IEBACiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogdXNpbmcgV2ViQ29yZTo6RmxvYXRQb2ludDsKLXVzaW5nIFdlYkNvcmU6
OkZvbnQ7Cit1c2luZyBXZWJDb3JlOjpGb250Q2FzY2FkZTsKIHVzaW5nIFdlYkNvcmU6OkhUTUxB
cmVhRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ7CiB1c2luZyBXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwNCw4ICsxNTA0LDggQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBsZW1lbnRl
ZFByb3BlcnR5SUQoQwogc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5
bGUtPmZvbnQoKS5mYW1pbHlDb3VudCgpOyArK2kpCi0gICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5k
KHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250KCkuZmFtaWx5QXQoaSkpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsgKytp
KQorICAgICAgICBsaXN0LmdldCgpLmFwcGVuZCh2YWx1ZUZvckZhbWlseShzdHlsZS0+Zm9udENh
c2NhZGUoKS5mYW1pbHlBdChpKSkpOwogICAgIHJldHVybiBsaXN0OwogfQogCkBAIC0yNTQ1LDcg
KzI1NDUsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjCiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6CiAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndvcmRCcmVhaygpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUtPmZvbnQoKS53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Zm9udENhc2NhZGUo
KS53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
b3JkV3JhcDoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+b3ZlcmZsb3dXcmFwKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUJyZWFrOgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJDb3VudGVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUkdCQ29sb3IuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRm9udExvYWRlci5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9Gb250TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1
ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKQEAgLTUzLDcgKzUzLDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWY8TG9hZEZvbnRDYWxsYmFjaz4obmV3IExvYWRG
b250Q2FsbGJhY2sobnVtTG9hZGluZywgZm9udExvYWRlciwgbG9hZENhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TG9hZEZvbnRDYWxsYmFj
az4gY3JlYXRlRnJvbVBhcmFtcyhjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbXMsIEZvbnRMb2FkZXIm
IGZvbnRMb2FkZXIsIGNvbnN0IEZvbnQmIGZvbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9h
ZEZvbnRDYWxsYmFjaz4gY3JlYXRlRnJvbVBhcmFtcyhjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbXMs
IEZvbnRMb2FkZXImIGZvbnRMb2FkZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIHsK
ICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gb25zdWNjZXNzOwogICAgICAgICBSZWZQdHI8
Vm9pZENhbGxiYWNrPiBvbmVycm9yOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgRm9udExvYWRl
cjo6bG9hZEZvbnQoY29uc3QgRGljdGlvbmEKICAgICBTdHJpbmcgZm9udFN0cmluZzsKICAgICBp
ZiAoIXBhcmFtcy5nZXQoImZvbnQiLCBmb250U3RyaW5nKSkKICAgICAgICAgcmV0dXJuOwotICAg
IEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZvbnRT
dHlsZShmb250U3RyaW5nLCBmb250KSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxMb2Fk
Rm9udENhbGxiYWNrPiBjYWxsYmFjayA9IExvYWRGb250Q2FsbGJhY2s6OmNyZWF0ZUZyb21QYXJh
bXMocGFyYW1zLCAqdGhpcywgZm9udCk7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBGb250TG9h
ZGVyOjpsb2FkRm9udChjb25zdCBEaWN0aW9uYQogYm9vbCBGb250TG9hZGVyOjpjaGVja0ZvbnQo
Y29uc3QgU3RyaW5nJiBmb250U3RyaW5nLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1F
OiBUaGUgc2Vjb25kIHBhcmFtZXRlciAodGV4dCkgaXMgaWdub3JlZC4KLSAgICBGb250IGZvbnQ7
CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBpZiAoIXJlc29sdmVGb250U3R5bGUoZm9udFN0
cmluZywgZm9udCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9udC5mYW1pbHlDb3VudCgpOyBpKyspIHsKQEAgLTI4MSw3ICsyODEsNyBAQCBz
dGF0aWMgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoCiAgICAgc3R5bGVSZXNvbHZl
ci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKGlkKS5nZXQoKSk7CiB9CiAKLWJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZvbnRT
dHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnQmIGZvbnQpCitib29sIEZvbnRMb2Fk
ZXI6OnJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiBmb250U3RyaW5nLCBGb250Q2FzY2Fk
ZSYgZm9udCkKIHsKICAgICAvLyBJbnRlcnByZXQgZm9udFN0cmluZyBpbiB0aGUgc2FtZSB3YXkg
YXMgdGhlICdmb250JyBhdHRyaWJ1dGUgb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELgogICAg
IFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZWRTdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwpAQCAtMzAyLDcgKzMwMiw3IEBAIGJvb2wgRm9udExvYWRl
cjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKIAogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oZGVmYXVsdEZvbnREZXNjcmlwdGlvbik7CiAKLSAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShz
dHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51
cGRhdGUoc3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgLy8gTm93
IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKTsKQEAgLTMxOSw3ICszMTksNyBAQCBib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250U3R5
bGUoY29uc3QgCiAgICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKHN0eWxlUmVzb2x2ZXIsIENTU1Byb3BlcnR5TGluZUhlaWdodCwg
cGFyc2VkU3R5bGUpOwogCi0gICAgZm9udCA9IHN0eWxlLT5mb250KCk7CisgICAgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpOwogICAgIGZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9udFNl
bGVjdG9yKCkpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRl
ci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIENTU0ZvbnRGYWNlU291cmNl
OwogY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFz
cyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBMb2FkRm9udENhbGxiYWNrOwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIApAQCAtMTAwLDcgKzEwMCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwZW5kaW5nRXZlbnRzVGltZXJGaXJlZCgpIHsgZmlyZVBlbmRpbmdFdmVudHMo
KTsgfQogICAgIHZvaWQgc2NoZWR1bGVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9p
ZCBmaXJlUGVuZGluZ0V2ZW50cygpOwotICAgIGJvb2wgcmVzb2x2ZUZvbnRTdHlsZShjb25zdCBT
dHJpbmcmLCBGb250Jik7CisgICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYs
IEZvbnRDYXNjYWRlJik7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBFdmVudFRh
cmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlCiB7CiAgICAgbV9ydWxlU2V0cy5hcHBlbmRB
dXRob3JTdHlsZVNoZWV0cyhmaXJzdE5ldywgc3R5bGVTaGVldHMsIG1fbWVkaXVtLmdldCgpLCBt
X2luc3BlY3RvckNTU09NV3JhcHBlcnMsIHRoaXMpOwogICAgIGlmIChhdXRvIHJlbmRlclZpZXcg
PSBkb2N1bWVudCgpLnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldy0+c3R5bGUoKS5m
b250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgcmVuZGVyVmlldy0+c3R5bGUo
KS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiAKICNpZiBFTkFCTEUoQ1NT
X0RFVklDRV9BREFQVEFUSU9OKQogICAgIHZpZXdwb3J0U3R5bGVSZXNvbHZlcigpLT5yZXNvbHZl
KCk7CkBAIC03NDgsNyArNzQ4LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvcgogICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKICAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSAmUmVuZGVyU3R5bGU6OmNyZWF0ZSgpLmxlYWtS
ZWYoKTsKICAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPnNldERpc3BsYXkoTk9O
RSk7Ci0gICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250KCkudXBkYXRlKG1f
Zm9udFNlbGVjdG9yKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnRD
YXNjYWRlKCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKICAgICAgICAgfQogICAgICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKICAgICAg
ICAgcmV0dXJuICpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtMTAzMSw5ICsxMDMxLDkgQEAg
UmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpkZWZhdWx0UwogICAgIC8vIE1ha2Ugc3Vy
ZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9t
IG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAg
ICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAg
ICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3Io
KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgw
KTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShudWxscHRy
KTsKIAogICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOwogfQpAQCAtMTQ4NCw3ICsxNDg0
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKICAgICBjaGVja0ZvckdlbmVy
aWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tG
b3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9y
T3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKG1fZm9u
dFNlbGVjdG9yKTsKKyAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobV9mb250U2VsZWN0
b3IpOwogICAgIGlmIChtX3N0YXRlLmZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpKQogICAgICAg
ICBzdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cyh0cnVlKTsKICAgICBtX3N0YXRlLnNldEZvbnRE
aXJ0eShmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMjE3OSw3
ICsyMTc5LDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc1dvcmRTdGFydE1hdAogCiAg
ICAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UgbGFjayB3b3JkIGJvdW5kYXJ5IG1hcmtzLCBhbmQg
dGhlcmUgaXMgbm8gY2xlYXIgYWdyZWVtZW50IG9uIHdoYXQgY29uc3RpdHV0ZXMKICAgICAvLyBh
IHdvcmQsIHNvIHRyZWF0IHRoZSBwb3NpdGlvbiBiZWZvcmUgYW55IENKSyBjaGFyYWN0ZXIgYXMg
YSB3b3JkIHN0YXJ0LgotICAgIGlmIChGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGZpcnN0
Q2hhcmFjdGVyKSkKKyAgICBpZiAoRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
Zmlyc3RDaGFyYWN0ZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHNpemVfdCB3b3Jk
QnJlYWtTZWFyY2hTdGFydCA9IHN0YXJ0ICsgbGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9y
dCAiRWxlbWVudC5oIgogI2ltcG9ydCAiRWxlbWVudFRyYXZlcnNhbC5oIgotI2ltcG9ydCAiRm9u
dC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0
ICJGcmFtZUxvYWRlci5oIgogI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKQEAgLTExMTQsNyArMTEx
NCw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRv
IHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKIH0KICNlbHNlCiBz
dGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtZW50KQpAQCAtMTEyMiw3ICsx
MTIyLDcgQEAgc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1
dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5z
dHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICByZXR1cm4g
KFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0Q1RGb250KCk7CiB9CiAjZW5kaWYKIApAQCAtMjU5NCwxMCArMjU5NCwxMCBA
QCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyCiAgICAgICAgICAgICBb
YXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVy
bGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBpZiAoc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNvcmF0
aW9uTGluZVRocm91Z2gpCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNT
dHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKE5TRm9udCAqZm9u
dCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkKKyAgICAgICAg
aWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
Z2V0TlNGb250KCkpCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OmZvbnQgZm9y
S2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBbYXR0
cnMuZ2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0Rm9u
dCgpIHRvU2l6ZTpzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCku
c2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICBbYXR0cnMu
Z2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0Rm9udCgp
IHRvU2l6ZTpzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0
YSgpLnNpemUoKV0gZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoc3R5
bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCiAgICAg
ICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRWRpdG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAj
aW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgogI2luY2x1ZGUgIkhUTUxDb252ZXJ0ZXIuaCIKQEAgLTIxMyw3ICsyMTMsNyBAQCBj
b25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAKICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAg
ICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
OwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6
Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMg
dGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0
eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKICAgICAgICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgICAg
ICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJp
bWFyeUZvbnQpIHsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9u
dEF0dHJpYnV0ZXNGb3JTCiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNN
dXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKICAgICAKLSAgICBDVEZvbnRSZWYgZm9udCA9
IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgQ1RGb250
UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZv
bnQoKTsKICAgICBpZiAoZm9udCkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KGlkKWZvbnQg
Zm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAK
ICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFZGl0b3IuaCIKICNpbXBvcnQg
IkVkaXRvckNsaWVudC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lt
cG9ydCAiRnJhbWVWaWV3LmgiCkBAIC0xMTUsNyArMTE1LDcgQEAgY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbAogCiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBy
ZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQg
PSAmc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKIAogICAgICAgICBpZiAo
bm9kZVRvUmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoQVNTRVJUX05P
X0VYQ0VQVElPTik7CkBAIC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVk
aXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUg
dHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5n
PwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICAgICAgICAgIGlmICghZm9udCkKICAgICAgICAg
ICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAh
PSAmcHJpbWFyeUZvbnQpIHsKQEAgLTE2MCw4ICsxNjAsOCBAQCBOU0RpY3Rpb25hcnkqIEVkaXRv
cjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9IDAp
CiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnRE
YXRhKCkuZ2V0TlNGb250KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOworICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRO
U0ZvbnQoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OwogCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
cikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcikgIT0gQ29sb3I6OmJsYWNrKQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9y
KHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpO
U0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA1LDcgKzIxMDUsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgICAgIG5ld1N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oZGVmYXVsdEZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAg
bmV3U3R5bGUtPmZvbnQoKS51cGRhdGUobmV3U3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7
CisgICAgbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKG5ld1N0eWxlLT5mb250Q2FzY2Fk
ZSgpLmZvbnRTZWxlY3RvcigpKTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkg
bG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CkBAIC0yMTIy
LDcgKzIxMjIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAg
ICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIAotICAg
IG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7CisgICAgbW9kaWZp
YWJsZVN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCk7CiAgICAgbW9kaWZp
YWJsZVN0YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLmZvbnRTZWxlY3RvcigpKTsK
ICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3JlYWxpemVkRm9udCA9IHRydWU7CiAgICAgc3R5bGVS
ZXNvbHZlci5mb250U2VsZWN0b3IoKS0+cmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3Mo
Jm1vZGlmaWFibGVTdGF0ZSgpKTsKQEAgLTIyODcsNyArMjI4Nyw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICBpZiAoZmlsbCAmJiBncmFkaWVudCAmJiBn
cmFkaWVudC0+aXNaZXJvU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250
JiBmb250ID0gYWNjZXNzRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gYWNj
ZXNzRm9udCgpOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9u
dE1ldHJpY3MoKTsKIAogICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IHRleHQ7CkBAIC0yMzcy
LDEwICsyMzcyLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkK
ICAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZShsb2NhdGlvbi54KCkgLSBt
YXNrUmVjdC54KCksIGxvY2F0aW9uLnkoKSAtIG1hc2tSZWN0LnkoKSk7CiAgICAgICAgICAgICAv
LyBXZSBkcmF3IHdoZW4gZm9udFdpZHRoIGlzIDAgc28gY29tcG9zaXRpbmcgb3BlcmF0aW9ucyAo
ZWcsIGEgImNvcHkiIG9wKSBzdGlsbCB3b3JrLgogICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKChmb250V2lkdGggPiAwID8gKHdpZHRoIC8gZm9udFdpZHRoKSA6
IDApLCAxKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQoZm9u
dCwgdGV4dFJ1biwgRmxvYXRQb2ludCgwLCAwKSwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RS
ZWFkeSk7CisgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwg
dGV4dFJ1biwgRmxvYXRQb2ludCgwLCAwKSwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250
Tm90UmVhZHkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4
dC0+dHJhbnNsYXRlKC1tYXNrUmVjdC54KCksIC1tYXNrUmVjdC55KCkpOwotICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBG
b250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgICAgIG1hc2tJbWFnZUNv
bnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6
OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICB9CiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjKTsKQEAgLTIzOTgsMTUgKzIzOTgsMTUg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogCiAgICAgaWYgKGlz
RnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSkpIHsKICAg
ICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwotICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9u
dCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwor
ICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNj
YWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAgICAgZW5kQ29tcG9zaXRlTGF5
ZXIoKTsKICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogICAgIH0gZWxzZSBpZiAoc3Rh
dGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVDb3B5KSB7CiAgICAgICAgIGNsZWFy
Q2FudmFzKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlv
biwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRyYXdCaWRp
VGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZG
b250Tm90UmVhZHkpOwogICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250
OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZv
bnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RS
ZWFkeSk7CiAgICAgICAgIGRpZERyYXcodGV4dFJlY3QpOwogICAgIH0KIH0KQEAgLTI0MjYsNyAr
MjQyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppbmZsYXRlU3QKICAgICBy
ZWN0LmluZmxhdGUoZGVsdGEpOwogfQogCi1jb25zdCBGb250JiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmFjY2Vzc0ZvbnQoKQorY29uc3QgRm9udENhc2NhZGUmIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6YWNjZXNzRm9udCgpCiB7CiAgICAgY2FudmFzKCktPmRvY3VtZW50KCkudXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0yNzAsNyAr
MjcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogCiAgICAg
ICAgIFN0cmluZyBtX3VucGFyc2VkRm9udDsKLSAgICAgICAgRm9udCBtX2ZvbnQ7CisgICAgICAg
IEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICAgICAgYm9vbCBtX3JlYWxpemVkRm9udDsKICAgICB9
OwogCkBAIC0zMDgsNyArMzA4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1RleHRJbnRl
cm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgZmxv
YXQgbWF4V2lkdGggPSAwLCBib29sIHVzZU1heFdpZHRoID0gZmFsc2UpOwogCi0gICAgY29uc3Qg
Rm9udCYgYWNjZXNzRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBhY2Nlc3NGb250KCk7
CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgdm9pZCBjbGVhclBhdGhGb3JE
YXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTc4NDE4
KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBTdHJpbmcgTWF0aE1MTWVuY2xvc2VFbGVt
ZW50Ojpsb25nRGl2TGVmCiAgICAgVGV4dFJ1biBydW4oY2xvc2luZ0JyYWNlLmltcGwoKSwgY2xv
c2luZ0JyYWNlLmxlbmd0aCgpKTsKICAgICBOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOwogICAg
IGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuZm9udCgpOworICAgICAgICBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCA9IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuZm9udENhc2NhZGUoKTsK
ICAgICAgICAgcGFkZGluZy5hcHBlbmROdW1iZXIoZm9udC53aWR0aChydW4pKTsKICAgICAgICAg
cGFkZGluZy5hcHBlbmRMaXRlcmFsKCJweCIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkRPTVRp
bWVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZvbnRH
ZW5lcmljRmFtaWxpZXMuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJl
c3N1cmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsOCBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKICNkZWZpbmUgUG9wdXBNZW51U3R5bGVfaAogCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJM
ZW5ndGguaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAKQEAgLTQzLDcgKzQzLDcgQEAg
cHVibGljOgogICAgICAgICBQb3B1cE1lbnVTaXplTWluaQogICAgIH07CiAKLSAgICBQb3B1cE1l
bnVTdHlsZShjb25zdCBDb2xvciYgZm9yZWdyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmQs
IGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgdmlzaWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29s
IGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5ndGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENv
bG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9w
dXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXpl
ID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKKyAgICBQb3B1cE1lbnVTdHlsZShjb25zdCBDb2xvciYg
Zm9yZWdyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBib29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBw
ZWFyYW5jZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwg
Ym9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRDb2xvclR5cGUgYmFja2dy
b3VuZENvbG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5cGUgbWVu
dVR5cGUgPSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVwTWVudVNp
emVOb3JtYWwpCiAgICAgICAgIDogbV9mb3JlZ3JvdW5kQ29sb3IoZm9yZWdyb3VuZCkKICAgICAg
ICAgLCBtX2JhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kKQogICAgICAgICAsIG1fZm9udChmb250
KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDb2xvciYgZm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb3JlZ3JvdW5kQ29sb3I7IH0KICAgICBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7
IH0KLSAgICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CisgICAg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIGJvb2wgaXNE
aXNwbGF5Tm9uZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEaXNwbGF5Tm9uZTsgfQogICAgIGJvb2wg
aGFzRGVmYXVsdEFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlZmF1bHRBcHBlYXJh
bmNlOyB9CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ29sb3IgbV9m
b3JlZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgRm9udCBt
X2ZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9mb250OwogICAgIGJvb2wgbV92aXNpYmxlOwogICAg
IGJvb2wgbV9pc0Rpc3BsYXlOb25lOwogICAgIGJvb2wgbV9oYXNEZWZhdWx0QXBwZWFyYW5jZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJv
bEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENv
bnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29t
ZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNl
IFB1c2hCdXR0b25QYXJ0OgpAQCAtNDIsNyArNDIsNyBAQCBMZW5ndGhCb3ggVGhlbWU6OmNvbnRy
b2xCb3JkZXIoQ29udHJvbFBhCiAgICAgfQogfQogCi1MZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xQ
YWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpv
b21lZEJveCwgZmxvYXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xQYWRkaW5nKENv
bnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29t
ZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNl
IE1lbnVsaXN0UGFydDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24gMTc4
NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb250cm9s
U3RhdGVzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgogI2luY2x1ZGUgIkxl
bmd0aFNpemUuaCIKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIENTUyBz
eXN0ZW0gY29sb3JzIGFuZCBmb250cwogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoVGhl
bWVDb2xvcikgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQotICAgIHZpcnR1YWwgRm9udCBzeXN0
ZW1Gb250KFRoZW1lRm9udCwgRm9udERlc2NyaXB0aW9uJikgY29uc3QgeyByZXR1cm4gRm9udCgp
OyB9CisgICAgdmlydHVhbCBGb250Q2FzY2FkZSBzeXN0ZW1Gb250KFRoZW1lRm9udCwgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgeyByZXR1cm4gRm9udENhc2NhZGUoKTsgfQogICAgIAogICAgIC8v
IEhvdyBmYXN0IHRoZSBjYXJldCBibGlua3MgaW4gdGV4dCBmaWVsZHMuCiAgICAgdmlydHVhbCBk
b3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QgeyByZXR1cm4gMC41OyB9CkBAIC04Miwx
NyArODIsMTcgQEAgcHVibGljOgogICAgIC8vIE1ldGhvZHMgdXNlZCB0byBhZGp1c3QgdGhlIFJl
bmRlclN0eWxlcyBvZiBjb250cm9scy4KICAgICAKICAgICAvLyBUaGUgZm9udCBkZXNjcmlwdGlv
biByZXN1bHQgc2hvdWxkIGhhdmUgYSB6b29tZWQgZm9udCBzaXplLgotICAgIHZpcnR1YWwgRm9u
dERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiBmb250LCBm
bG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5mb250RGVzY3JpcHRpb24o
KTsgfQorICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsg
cmV0dXJuIGZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KICAgICAKICAgICAvLyBUaGUgc2l6ZSBo
ZXJlIGlzIGluIHpvb21lZCBjb29yZGluYXRlcyBhbHJlYWR5LiAgSWYgYSBuZXcgc2l6ZSBpcyBy
ZXR1cm5lZCwgaXQgYWxzbyBuZWVkcyB0byBiZSBpbiB6b29tZWQgY29vcmRpbmF0ZXMuCi0gICAg
dmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Jiwg
Y29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0
IHsgcmV0dXJuIHpvb21lZFNpemU7IH0KKyAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNp
emUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9v
bWVkU2l6ZSwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIHpvb21lZFNpemU7
IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgY29udHJvbCBp
biB6b29tZWQgY29vcmRpbmF0ZXMuICAKLSAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNv
bnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgLyp6b29tRmFjdG9yKi8p
IGNvbnN0IHsgcmV0dXJuIExlbmd0aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSk7IH0KKyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7
IHJldHVybiBMZW5ndGhTaXplKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCkpOyB9
CiAgICAgCiAgICAgLy8gQWxsb3dzIHRoZSB0aGVtZSB0byBtb2RpZnkgdGhlIGV4aXN0aW5nIHBh
ZGRpbmcvYm9yZGVyLgotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQg
em9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmco
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRC
b3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRy
b2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogICAgIAogICAgIC8vIFdoZXRo
ZXIgb3Igbm90IHdoaXRlc3BhY2U6IHByZSBzaG91bGQgYmUgZm9yY2VkIG9uIGFsd2F5cy4KICAg
ICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFydCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dp
ZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEN1cnNvcjsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwog
Y2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1N
b3VzZUV2ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNDIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVk
ZSAiV2lkdGhJdGVyYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNo
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0v
LyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExheW91dD4gaW4gc291cmNlIGZpbGVz
IHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRMYXlvdXQgY2xhc3MgZGVmaW5pdGlv
bgotdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihX
ZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCi17Ci0gICAgV2ViQ29yZTo6Rm9udDo6ZGVsZXRlTGF5
b3V0KHB0cik7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUmVmPEZv
bnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7Ci0KLWNvbnN0IHVpbnQ4X3QgRm9udDo6
c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewotICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAxIC8qc3BhY2UqLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKj8qLywKLSAgICAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07Ci0KLXN0YXRp
YyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4pCi17Ci0gICAgcmV0
dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Ci19Ci0KLXN0YXRpYyBib29sIHVzZUJhY2tzbGFz
aEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBp
ZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0YXRpYyBI
YXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKLSAgICBpZiAoIXNldCkgewotICAgICAgICBzZXQg
PSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OwotICAgICAgICBzZXQtPmFkZCgiTVMgUEdvdGhp
YyIpOwotICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdvdGhpY1tdID0gezB4RkYyRCwgMHhG
RjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcsIDB4MzBDMywgMHgzMEFGfTsKLSAg
ICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNQR290aGljLCBXVEZfQVJS
QVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJN
UyBQTWluY2hvIik7Ci0gICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNQTWluY2hvW10gPSB7MHhG
RjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUsIDB4NjcxRH07Ci0gICAgICAgIHNl
dC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1pbmNobywgV1RGX0FSUkFZX0xFTkdU
SCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgR290aGlj
Iik7Ci0gICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3RoaWNbXSA9IHsweEZGMkQsIDB4RkYz
MywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBzZXQt
PmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhpYywgV1RGX0FSUkFZX0xFTkdUSCh1
bmljb2RlTmFtZU1TR290aGljKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBNaW5jaG8iKTsK
LSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1tdID0gezB4RkYyRCwgMHhGRjMzLCAw
eDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVu
aWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU01pbmNobykp
KTsKLQotICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Ci0gICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBFQSwgMHgzMEFBfTsKLSAgICAgICAg
c2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVpcnlvLCBXVEZfQVJSQVlfTEVOR1RI
KHVuaWNvZGVOYW1lTWVpcnlvKSkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0LT5jb250YWlucyhm
YW1pbHkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpzX2NvZGVQYXRoID0gQXV0bzsKLQot
VHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0g
MDsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZvbnQgSW1w
bGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24pCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi1Gb250OjpGb250KCkKLSAgICA6IG1fbGV0dGVyU3BhY2lu
ZygwKQotICAgICwgbV93b3JkU3BhY2luZygwKQotICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5
bWJvbChmYWxzZSkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcygwKQotewotfQotCi1Gb250
OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZs
b2F0IHdvcmRTcGFjaW5nKQotICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCi0gICAgLCBtX2xl
dHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKLSAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNp
bmcpCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKHVzZUJhY2tzbGFzaEFzWWVuU2ln
bkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJl
cyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQotewotfQotCi0vLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZv
bnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCi0gICAgOiBtX2dseXBocyhGb250
R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQotICAgICwgbV9sZXR0ZXJT
cGFjaW5nKDApCi0gICAgLCBtX3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFz
WWVuU3ltYm9sKGZhbHNlKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRl
ckZvbnQoaXNQcmludGVyRm9udCk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Rm9udFNtb290
aGluZyhmb250U21vb3RoaW5nTW9kZSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIG1fZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkp
KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShm
b250RGF0YS5mb250KCkpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6
IEZvbnRXZWlnaHROb3JtYWwpOwotI2VuZGlmCi19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFr
ZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotI2lmIFBMQVRGT1JNKElP
UykKLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQ
dHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhz
OjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQotICAgICwgbV9sZXR0ZXJTcGFjaW5n
KDApCi0gICAgLCBtX3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMo
Y29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSkKLXsKLSAgICBDVEZvbnRSZWYgcHJpbWFyeUZv
bnQgPSBmb250RGF0YS5mb250KCk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKLSAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQp
ID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRVc2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50ZXJGb250KCkpOwotICAgIG1f
Z2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24s
IGZvbnRTZWxlY3Rvci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotRm9udDo6Rm9udChjb25zdCBGb250
JiBvdGhlcikKLSAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9u
KQotICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCi0gICAgLCBtX2xldHRlclNwYWNpbmco
b3RoZXIubV9sZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRT
cGFjaW5nKQotICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tz
bGFzaEFzWWVuU3ltYm9sKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci19Ci0KLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBG
b250JiBvdGhlcikKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2Ny
aXB0aW9uOwotICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7Ci0gICAgbV9sZXR0ZXJTcGFj
aW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOwotICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5t
X3dvcmRTcGFjaW5nOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVy
Lm1fdHlwZXNldHRpbmdGZWF0dXJlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgRm9u
dDo6b3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9m
b250RGVzY3JpcHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2lu
ZyB8fCBtX3dvcmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVyLm1fZ2x5cGhzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhl
ci5tX2dseXBocy0+Zm9udFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAv
LyBDYW4gdGhlc2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3Vs
ZCBnZXQgd2lwZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmIChtX2dseXBocy0+
Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJz
aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRp
b24oKSAhPSBvdGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewot
ICAgIC8vIFRoaXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZl
bCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCi0gICAgRm9udERlc2NyaXB0
aW9uRm9udERhdGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsKLSAgICBWZWN0b3I8
QXRvbWljU3RyaW5nLCAzPiBmYW1pbGllczsKLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsK
LSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIGZvbnRTZWxl
Y3RvckZsYWdzOwotfTsKLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShG
b250R2x5cGhzQ2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQotICAgICAgICA6IGtl
eShXVEY6Om1vdmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShnKSkKLSAgICB7IH0K
LSAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7
Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5
cGhzQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHNDYWNoZTsKLQotc3RhdGlj
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRH
bHlwaHNDYWNoZUtleSYgYikKLXsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAh
PSBiLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGEuZm9udFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3Rv
clZlcnNpb24gIT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3Mg
IT0gYi5mb250U2VsZWN0b3JGbGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChh
LmZhbWlsaWVzLnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCks
IGIuZmFtaWxpZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlw
aHNDYWNoZSgpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlw
aHNDYWNoZSwgY2FjaGUsICgpKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgaW52YWxp
ZGF0ZUZvbnRHbHlwaHNDYWNoZSgpCi17Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsK
LX0KLQotdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250
R2x5cGhzQ2FjaGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hl
KCkuY2xlYXIoKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtl
Rm9udEdseXBoc0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAg
ICBrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNh
Y2hlS2V5KGRlc2NyaXB0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKTsgKytpKQotICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRl
c2NyaXB0aW9uLmZhbWlseUF0KGkpKTsKLSAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2Vs
ZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwotICAgIGtleS5mb250U2VsZWN0
b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwot
ICAgIGtleS5mb250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3It
PnJlc29sdmVzRmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhk
ZXNjcmlwdGlvbikgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHND
YWNoZUhhc2goY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPHVu
c2lnbmVkLCA3PiBoYXNoQ29kZXM7Ci0gICAgaGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoNCArIGtleS5mYW1pbGllcy5zaXplKCkpOwotCi0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFw
cGVuZChrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgaGFz
aENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9ySWQpOwotICAgIGhhc2hDb2Rl
cy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGhhc2hDb2Rl
cy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdzKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytpKQotICAgICAgICBoYXNoQ29k
ZXMudW5jaGVja2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hh
c2g6Omhhc2goa2V5LmZhbWlsaWVzW2ldKSA6IDApOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9m
KHVuc2lnbmVkKSk7Ci19Ci0KLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRH
bHlwaHNDYWNoZSgpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7Ci0gICAg
Rm9udEdseXBoc0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsK
LSAgICBmb3IgKEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUo
KS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5
cGhzLmdldCgpLmhhc09uZVJlZigpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5r
ZXkpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci19
Ci0KLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNl
bGVjdG9yPiBmb250U2VsZWN0b3IpCi17Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAg
ICBtYWtlRm9udEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0
b3IuZ2V0KCkpOwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVI
YXNoKGtleSk7Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9u
dEdseXBoc0NhY2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVF
bnRyeT4oKSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlw
aHNDYWNoZUVudHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAg
IG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjpt
b3ZlKGtleSksIEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBSZWY8Rm9u
dEdseXBocz4gZ2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKLQotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1
bmVDb3VudGVyOwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3
YXkgc28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVu
ZUNvdW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJl
ZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotICAgIC8vIFByZXZlbnQgcGF0
aG9sb2dpY2FsIGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4
aW11bUVudHJpZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhz
Q2FjaGUoKS5iZWdpbigpKTsKLSAgICByZXR1cm4gZ2x5cGhzOwotfQotCi12b2lkIEZvbnQ6OnVw
ZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAotewotICAg
IG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRp
b24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Ci0gICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9
IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKLSAgICBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi1m
bG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Ci17Ci0g
ICAgLy8gRG9uJ3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRz
IHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCi0gICAgLy8gZXhjZXB0IGlmIHRo
ZSAnZm9yY2UnIGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwg
dXNlIGEgZmFsbGJhY2sKLSAgICAvLyBmb250KS4KLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9u
dHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJl
YWR5KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0
aCgpIDogdG8pOwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7
Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBh
cnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBy
dW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBh
dGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQot
ICAgICAgICByZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwg
dG8pOwotCi0gICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBm
cm9tLCB0byk7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICh0byA8IDApCi0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgQ29kZVBhdGggY29k
ZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBj
b2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxp
Z2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRo
VG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNW
R0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAo
Y29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNp
bXBsZVRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIGVsc2UK
LSAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1h
cmssIHBvaW50LCBmcm9tLCB0byk7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBs
ZXgpIHsKLSAgICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFi
b3V0IHJldHVybmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2Ug
bmVlZCBhbiBleHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgotICAg
ICAgICBpZiAoIWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQotICAgICAg
ICAgICAgZmFsbGJhY2tGb250cyA9IDA7Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4g
b3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUu
Ci0gICAgICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYm
IChnbHlwaE92ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKLSAgICAg
ICAgICAgIGdseXBoT3ZlcmZsb3cgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzS2VybmluZ09y
TGlnYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMp
OwotICAgIGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygp
IHx8IGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53
aWR0aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05h
TigpLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5n
LCBnbHlwaE92ZXJmbG93KTsKLSAgICBpZiAoY2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2Fj
aGVFbnRyeSkpCi0gICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKLQotICAgIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Ci0gICAgaWYgKCFmYWxsYmFj
a0ZvbnRzKQotICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKLQot
ICAgIGZsb2F0IHJlc3VsdDsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQotICAg
ICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRz
LCBnbHlwaE92ZXJmbG93KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhG
b3JTaW1wbGVUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBp
ZiAoY2FjaGVFbnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICpjYWNo
ZUVudHJ5ID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IEZvbnQ6Ondp
ZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBo
TmFtZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc0RyYXduV2l0
aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZs
b2F0V2lkdGhVc2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1l
KTsKLSNlbmRpZgotCi0gICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5sZW5ndGgoKTsKLSAgICBnbHlw
aE5hbWUgPSAiIjsKLSAgICByZXR1cm4gd2lkdGgocnVuKTsKLX0KLQotR2x5cGhEYXRhIEZvbnQ6
OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZh
cmlhbnQgdmFyaWFudCkgY29uc3QKLXsKLSAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkg
ewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlG
b250RGF0YSgpLmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVf
dG91cHBlcihjKTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAg
ICAgIGMgPSB1cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1Zhcmlh
bnQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFs
VmFyaWFudDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFy
aWFudDsKLSAgICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gdV9jaGFyTWlycm9y
KGMpOwotCi0gICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9m
b250RGVzY3JpcHRpb24sIHZhcmlhbnQpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotUGFz
c093blB0cjxUZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0
LCBib29sKSBjb25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEZvbnQ6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3V0KikKLXsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExh
eW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRp
ZgotCi0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldp
ZHRoW10gPSB7Ci0gICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAotICAgICJBcmlhbCBIZWJyZXci
LAotICAgICJDaGFsa2JvYXJkIiwKLSAgICAiQ29jaGluIiwKLSAgICAiQ29yc2l2YSBIZWJyZXci
LAotICAgICJDb3VyaWVyIiwKLSAgICAiRXVwaGVtaWEgVUNBUyIsCi0gICAgIkdlbmV2YSIsCi0g
ICAgIkdpbGwgU2FucyIsCi0gICAgIkhlaSIsCi0gICAgIkhlbHZldGljYSIsCi0gICAgIkhvZWZs
ZXIgVGV4dCIsCi0gICAgIkluYWlNYXRoaSIsCi0gICAgIkthaSIsCi0gICAgIkx1Y2lkYSBHcmFu
ZGUiLAotICAgICJNYXJrZXIgRmVsdCIsCi0gICAgIk1vbmFjbyIsCi0gICAgIk1zaHRha2FuIiwK
LSAgICAiTmV3IFBlbmluaW0gTVQiLAotICAgICJPc2FrYSIsCi0gICAgIlJhYW5hbmEiLAotICAg
ICJTVEhlaXRpIiwKLSAgICAiU3ltYm9sIiwKLSAgICAiVGltZXMiLAotICAgICJBcHBsZSBCcmFp
bGxlIiwKLSAgICAiQXBwbGUgTGlHb3RoaWMiLAotICAgICJBcHBsZSBMaVN1bmciLAotICAgICJB
cHBsZSBTeW1ib2xzIiwKLSAgICAiQXBwbGVHb3RoaWMiLAotICAgICJBcHBsZU15dW5nam8iLAot
ICAgICIjR3VuZ1NlbyIsCi0gICAgIiNIZWFkTGluZUEiLAotICAgICIjUENNeXVuZ2pvIiwKLSAg
ICAiI1BpbEdpIiwKLX07Ci0KLS8vIEZvciBmb250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUg
Zm9udHMgZG9uJ3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBPUy8yIHRhYmxlCi0vLyBmb3Ig
YXZnQ2hhcldpZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBn
ZXR0aW5nIHRoZSBhdmdDaGFyV2lkdGgKLS8vIGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlz
IG9ubHkgc2VlbXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAotLy8g
YnV0LCBpbiBvcmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywg
d2UgZG8gdGhpcyBjaGVjayBmb3IKLS8vIGFsbCBwbGF0Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1Zh
bGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9
IGZpcnN0RmFtaWx5KCk7Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotICAgIC8vIElu
dGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBp
biB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNT
eXN0ZW1Gb250KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgc3RhdGlj
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhN
YXAgPSAwOwotCi0gICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkg
ewotICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNo
U2V0PEF0b21pY1N0cmluZz47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZf
QVJSQVlfTEVOR1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQotICAg
ICAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNT
dHJpbmcoZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbaV0pKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhm
YW1pbHkpOwotfQotCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUo
ZmxvYXQmIHdpZHRoKSBjb25zdAotewotICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihw
cmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERh
dGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKLXsKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKLQot
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1F
OiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0
aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAot
ICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygp
ICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAm
JiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21w
bGV4OwotCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgcmV0dXJu
IGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJv
bSwgdG8pOwotCi0gICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChy
dW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNl
IGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUg
aHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21w
bGV4ICYmICghdHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4p
KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgs
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLQotICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6
ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7Ci0gICAgbm9ybWFsaXpl
ZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKLQotICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5n
KCk7Ci19Ci0KLVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50
ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1z
dGF0aWMgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKLQotdm9pZCBGb250Ojpz
ZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxk
VXNlU21vb3RoaW5nOwotfQotCi1ib29sIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCi17Ci0g
ICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci19Ci0KLXZvaWQgRm9udDo6c2V0Q29k
ZVBhdGgoQ29kZVBhdGggcCkKLXsKLSAgICBzX2NvZGVQYXRoID0gcDsKLX0KLQotRm9udDo6Q29k
ZVBhdGggRm9udDo6Y29kZVBhdGgoKQotewotICAgIHJldHVybiBzX2NvZGVQYXRoOwotfQotCi12
b2lkIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVy
ZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKLXsKLSAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKLX0KLQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250
OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCi17Ci0gICAgcmV0dXJuIHNfZGVmYXVsdFR5
cGVzZXR0aW5nRmVhdHVyZXM7Ci19Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNv
bnN0IFRleHRSdW4mIHJ1bikgY29uc3QKLXsKLSAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQot
ICAgICAgICByZXR1cm4gc19jb2RlUGF0aDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAg
aWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICByZXR1cm4gU2ltcGxlOwotI2Vu
ZGlmCi0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9m
b250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDApCi0gICAgICAgIHJl
dHVybiBDb21wbGV4OwotICAgIAotICAgIGlmIChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0
ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMpKQotICAgICAgICByZXR1
cm4gQ29tcGxleDsKLQotICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQot
ICAgICAgICByZXR1cm4gU2ltcGxlOwotCi0gICAgaWYgKHJ1bi5pczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIFNpbXBsZTsKLQotICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBo
aWdobGlnaHRpbmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20u
Ci0gICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBy
dW4ubGVuZ3RoKCkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNv
ZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgLy8g
RklYTUU6IFNob3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2Vk
LiBOb3RlIHRoYXQgd2UgCi0gICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVy
IFByb3BlcnR5L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIG5vdCAn
Y29tYmluaW5nJywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KLSAg
ICAvLyBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNo
IG92ZXIgYSBzb3J0ZWQKLSAgICAvLyBsaXN0IG9mIHJhbmdlcy4KLSAgICBDb2RlUGF0aCByZXN1
bHQgPSBTaW1wbGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0g
ICAgICAgIGNvbnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4
MkU1KSAvLyBVKzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxl
dHRlcnMpICAKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDJFOSkg
Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MzAwKSAv
LyBVKzAzMDAgdGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzNkYpCi0gICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkg
Ly8gVSswNTkxIHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmlu
ZyBtYXJrcywgSGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1
a2hhCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQotICAg
ICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsx
MDlGIEFyYWJpYywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAotICAg
ICAgICAvLyBEZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBU
YW1pbCwgVGVsdWd1LCBLYW5uYWRhLCAKLSAgICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBU
aGFpLCBMYW8sIFRpYmV0YW4sIE15YW5tYXIKLSAgICAgICAgaWYgKGMgPCAweDA2MDApIAotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTA5RikKLSAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5n
dWwgSmFtbyAob25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBw
cmVjb21wb3NlOwotICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQg
YXMgYSByZXN1bHQgb2Ygc3RlcCBBKQotICAgICAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDExRkYpCi0gICAgICAgICAgICByZXR1
cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2gg
VSsxMzVGIEV0aGlvcGljIGNvbWJpbmluZyBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChjIDw9IDB4MTM1RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0g
ICAgICAgIGlmIChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywg
SGFudW5vbywgQnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xpYW4KLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDE4QUYpCi0gICAgICAgICAgICByZXR1cm4gQ29t
cGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRG
IExpbWJ1IChVbmljb2RlIDQuMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
YyA8PSAweDE5NEYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAo
YyA8IDB4MTk4MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5ldyBUYWkgTHVlCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOURGKQotICAgICAgICAgICAgcmV0
dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdo
IFUrMUNGRiBCdWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRp
YwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MUNGRikKLSAgICAg
ICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFE
QzAgdGhyb3VnaCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxREZGKQotICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNo
YXJhY3RlcnMgd2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKLSAgICAgICAg
aWYgKGMgPD0gMHgyMDAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhP
dmVyZmxvdzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGMgPCAweDIwRDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9y
IHN5bWJvbHMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDIwRkYp
Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MkNFRikg
Ly8gVSsyQ0VGIHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgyQ0YxKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJv
dWdoIFUrMzAyRiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUgbWFya3MKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDMwMkYpCi0gICAgICAgICAgICByZXR1cm4g
Q29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStB
NjdEIENvbWJpbmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBNjdEKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
Ci0KLSAgICAgICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21i
aW5pbmcgbWFyayBmb3IgQmFtdW0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
YyA8PSAweEE2RjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgIC8vIFUr
QTgwMCB0aHJvdWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdh
cmkgRXh0ZW5kZWQsCi0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlh
bm1hciBFeHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAotICAgICAgICBpZiAoYyA8
IDB4QTgwMCkgCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBQkZG
KQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEQ3QjAp
IC8vIFUrRDdCMCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBFeHQuIEIKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCi0gICAgICAgICAgICByZXR1cm4g
Q29tcGxleDsKLQotICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIEhp
Z2ggc3Vycm9nYXRlCi0KLSAgICAgICAgICAgIGlmIChpID09IGxlbiAtIDEpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysr
aV07Ci0gICAgICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0KSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgVUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVy
ID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOwotCi0gICAgICAgICAgICBpZiAoc3Vw
cGxlbWVudGFyeUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZG
IFJlZ2lvbmFsIEluZGljYXRvciBTeW1ib2xzCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweDFGMUZGKQotICAgICAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUg
dmFyaWF0aW9uIHNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAxRUYpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJh
aG1pIChVKzExMDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29t
cGxleCBzY3JpcHRzCi0gICAgICAgICAgICAvLyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KLQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4RkUwMCkg
Ly8gVStGRTAwIHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4RkUwRikKLSAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhy
b3VnaCBVK0ZFMkYgQ29tYmluaW5nIGhhbGYgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweEZFMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChV
Q2hhcjMyIGMpCi17Ci0gICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxv
Y2suCi0gICAgaWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgot
ICAgIGlmIChjID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCi0gICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgy
RTgwICYmIGMgPD0gMHgyRUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBL
YW5neGkgUmFkaWNhbHMuCi0gICAgaWYgKGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgU3Ryb2tlcy4KLSAgICBpZiAoYyA+
PSAweDMxQzAgJiYgYyA8PSAweDMxRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCi0gICAgaWYgKGMgPj0gMHhGOTAwICYm
IGMgPD0gMHhGQUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5p
ZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCLgotICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8
PSAweDJBNkRGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgLy8gQ0pLIFVu
aWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQy4KLSAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMg
PD0gMHgyQjczRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZp
ZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRC4KLSAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0g
MHgyQjgxRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGli
aWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50LgotICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8
PSAweDJGQTFGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKLXsKLSAgICAv
LyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQotICAgIC8vIDB4MkNBIE1v
ZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKLSAg
ICAvLyAweDJDQiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNl
IDR0aCBUb25lIAotICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGgg
VG9uZSAKLSAgICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJD
QikgfHwgKGMgPT0gMHgyRDkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9
PSAweDIwMjApIHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIw
M0IpIHx8IChjID09IDB4MjAzQykKLSAgICAgICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAw
eDIwNDcpIHx8IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEp
Ci0gICAgICAgIHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIx
MDApIHx8IChjID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQotICAgICAgICB8fCAoYyA9PSAw
eDIxMDkpIHx8IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYp
IHx8IChjID09IDB4MjEyMSkKLSAgICAgICAgfHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIx
M0IpIHx8IChjID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1
QSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAw
eDIxNkIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTcwICYmIGMg
PD0gMHgyMTdCKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIxN0Yp
IHx8IChjID09IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChj
ID09IDB4MjNCRSkgfHwgKGMgPT0gMHgyM0JGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgaWYgKChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIzKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAweDI0OTIpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNDlDICYmIGMgPD0gMHgyNEZGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkg
fHwgKGMgPT0gMHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChjID09IDB4MjVBQikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIy
KSB8fCAoYyA9PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAo
YyA9PSAweDI1QkMpIHx8IChjID09IDB4MjVCRCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIGlmICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2
KSB8fCAoYyA9PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAo
YyA9PSAweDI1Q0MpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVD
RSAmJiBjIDw9IDB4MjVEMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAw
eDI1RTIgJiYgYyA8PSAweDI1RTYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMg
PT0gMHgyNUVGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjYwMCAm
JiBjIDw9IDB4MjYwMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgy
NjA1KSB8fCAoYyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8
fCAoYyA9PSAweDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdE
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09
IDB4MjZCRCkgfHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4Mjcx
QSkgfHwgKGMgPT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID09IDB4MkIxQSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJz
LgotICAgIGlmIChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCi0gICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcg
MHgzMDMwLgotICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgzMDMwKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0gMHgzMDNGKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhpcmFnYW5hCi0gICAgaWYgKGMgPj0gMHgzMDQwICYmIGMg
PD0gMHgzMDlGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEthdGFrYW5hIAotICAg
IGlmIChjID49IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBCb3BvbW9mbwotICAgIGlmIChjID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKLSAgICBp
ZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotIAot
ICAgIC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCi0gICAgaWYgKGMgPj0gMHgz
MjAwICYmIGMgPD0gMHgzMkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBD
SksgQ29tcGF0aWJpbGl0eS4KLSAgICBpZiAoYyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYy
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1z
LgotICAgIGlmIChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4
RkUxMikgfHwgKGMgPT0gMHhGRTE5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
KGMgPT0gMHhGRjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0g
MHhGRjFFKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFsZndpZHRoIGFuZCBG
dWxsd2lkdGggRm9ybXMKLSAgICAvLyBVc3VhbGx5IG9ubHkgdXNlZCBpbiBDSksKLSAgICBpZiAo
YyA+PSAweEZGMDAgJiYgYyA8PSAweEZGRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gRW1vamkuCi0gICAgaWYgKGMgPT0gMHgxRjEwMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoYyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgxRjE0OSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgx
RjZDNSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgo
Yyk7Ci19Ci0KLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5h
bChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgdW5zaWduZWQgY291bnQg
PSAwOwotICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hh
cmFjdGVyc1tpXSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAg
ICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKLSAgICAgICAgICAgICAg
ICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9u
dDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRl
ckV4cGFuc2lvbikKLXsKLSAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0g
Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICB1bnNpZ25lZCBj
b3VudCA9IDA7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0
ZXIgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0
ZXIpKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVy
RXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVu
Z3RoICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAg
ICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJz
W2kgKyAxXSk7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChj
aGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAg
ICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVu
Z3RoOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJh
Y3RlcnNbaSAtIDFdOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7
Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5z
aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNf
TEVBRChjaGFyYWN0ZXJzW2kgLSAyXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBV
MTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFy
b3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAg
ICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIGlmIChzdHJpbmdW
aWV3LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGly
ZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsKLSAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVu
Z3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci19Ci0KLWJvb2wgRm9udDo6Y2Fu
UmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0so
YykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NG
X01BU0spKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHdvcmQt
c2VwYXJhdG9yIGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3Mg
RHJhZnQgMyBOb3ZlbWJlciAyMDEwLgotICAgIGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8
IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9y
RG90Ci0gICAgICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5N
YXJrSW50ZXJzeWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0Jz
dGFyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGb250Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5
cGhzICYmIG1fZ2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwotfQotICAgIAotR2x5cGhU
b1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUo
Y29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgaW5kZXgpCi17Ci0gICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRl
cnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMg
dG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywKLSAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhy
b3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4K
LSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7Ci0KLSAgICBpZiAob2Zmc2V0SW5T
dHJpbmcgPT0gR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgbm8g
aWRlYSB3aGljaCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgotICAgICAgICBy
ZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVy
R2x5cGg7Ci0gICAgfQotICAgIAotICAgIGlmICh0ZXh0UnVuLmlzOEJpdCgpKQotICAgICAgICBi
YXNlQ2hhcmFjdGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKLSAg
ICBlbHNlCi0gICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldElu
U3RyaW5nLCB0ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAKLSAgICAvLyB1
X2dldEludFByb3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVy
biB0cnVlIGZvciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4KLSAgICAvLyBJbnN0ZWFk
LCB3ZSBjYW4gdXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJh
Y3Rlci4KLSAgICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFy
YWN0ZXIpOwotICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1JB
RElDQUxTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNU
VUFUSU9OOgotICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6
Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5J
RklFRF9JREVPR1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9H
UkFQSFM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQjoKLSAgICBjYXNlIFVC
TE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBV
QkxPQ0tfQ0pLX1NUUk9LRVM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBI
U19FWFRFTlNJT05fQzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VY
VEVOU0lPTl9EOgotICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJB
Q1RFUlM6Ci0gICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TOgotICAgIGNhc2UgVUJM
T0NLX0VOQ0xPU0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfSElS
QUdBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01P
Rk86Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6Ci0gICAgY2FzZSBVQkxPQ0tf
SEFOR1VMX0pBTU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoK
LSAgICBjYXNlIFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgotICAgIGNhc2UgVUJMT0NLX0hBTkdV
TF9KQU1PX0VYVEVOREVEX0E6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURf
QjoKLSAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlOjpEcmF3T3ZlckdseXBoOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7Ci0gICAg
fQotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwNywgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYg
Rm9udF9oCi0jZGVmaW5lIEZvbnRfaAotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUg
IlBhdGguaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHREaXJl
Y3Rpb24uaCIKLSNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0KLS8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8g
MCBhbmQgY29uZmxpY3RzCi0vLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4K
LSNpZmRlZiBDb21wbGV4Ci0jdW5kZWYgQ29tcGxleAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnRE
YXRhOwotY2xhc3MgRm9udE1ldHJpY3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3Mg
Rm9udFNlbGVjdG9yOwotY2xhc3MgR2x5cGhCdWZmZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7
Ci1jbGFzcyBMYXlvdXRSZWN0OwotY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFRleHRMYXlvdXQ7
Ci1jbGFzcyBUZXh0UnVuOwotCi1zdHJ1Y3QgR2x5cGhEYXRhOwotCi1zdHJ1Y3QgR2x5cGhPdmVy
ZmxvdyB7Ci0gICAgR2x5cGhPdmVyZmxvdygpCi0gICAgICAgIDogbGVmdCgwKQotICAgICAgICAs
IHJpZ2h0KDApCi0gICAgICAgICwgdG9wKDApCi0gICAgICAgICwgYm90dG9tKDApCi0gICAgICAg
ICwgY29tcHV0ZUJvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
aXNFbXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3Ag
JiYgIWJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlw
aE92ZXJmbG93JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBv
dGhlci5sZWZ0KTsKLSAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQp
OwotICAgICAgICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7Ci0gICAgICAgIGJvdHRv
bSA9IHN0ZDo6bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1
cm4gbGVmdCAhPSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBv
dGhlci50b3AgfHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbnQgbGVm
dDsKLSAgICBpbnQgcmlnaHQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgYm90dG9tOwotICAgIGJv
b2wgY29tcHV0ZUJvdW5kczsKLX07Ci0KLWNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJz
LCBTa2lwR2x5cGgsIERyYXdPdmVyR2x5cGh9OwotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01v
cmVQYXRocygpID0gMDsKLSAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKLSAgICB2aXJ0dWFs
IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Ci0gICAgdmlydHVhbCBHbHlw
aFVuZGVybGluZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2
YW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KLX07
Ci1HbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJs
aW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwot
Ci1jbGFzcyBGb250IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJT
cGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBv
bmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9u
dC4KLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29s
IGlzUHJpbnRpbmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7Ci0KLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVu
ZGVudC4KLSNpZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKLSNlbmRpZgotICAgIH5Gb250KCk7Ci0KLSAg
ICBGb250KGNvbnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0o
Y29uc3QgRm9udCYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnQmIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uOyB9Ci0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2Ny
aXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsgfQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7
IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotCi0gICAgdm9pZCB1
cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKLQotICAgIGVudW0gQ3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFj
a0lmRm9udE5vdFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJv
bSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50
SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9
IC0xKSBjb25zdDsKLQotICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJl
Y3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZs
b2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQg
d2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUp
IGNvbnN0OwotCi0gICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVy
VGV4dCosIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKLSAgICBz
dGF0aWMgdm9pZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRpYyBmbG9hdCB3
aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIGludCBvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRl
eHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpIGNvbnN0OwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9Ci0KLSAgICBmbG9hdCB3b3Jk
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KLSAgICBmbG9hdCBsZXR0
ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgdm9pZCBz
ZXRXb3JkU3BhY2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9Ci0gICAgdm9pZCBz
ZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQotICAgIGJv
b2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQotICAgIAotICAg
IEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCk7IH0KLQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMg
dHlwZXNldHRpbmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0
aW5nRmVhdHVyZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KLQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5m
aXJzdEZhbWlseSgpOyB9Ci0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi5mYW1pbHlBdChpKTsgfQotCi0gICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lk
dGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9u
LndpZHRoVmFyaWFudCgpOyB9Ci0KLSAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KLQotICAgIGNvbnN0IEZvbnRN
ZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZv
bnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJp
bWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxv
YXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9h
dCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgp
LCB0YWJTaXplLCBwb3NpdGlvbik7IH0KLSAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpIGNvbnN0OwotICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9h
dCAmd2lkdGgpIGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwotCi0gICAgaW50IGVt
cGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1w
aGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRS
YW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50KSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOwotICAgIHN0
YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7Ci0KLSAgICAvLyBCRVdB
UkU6IElmIGlzQWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGws
IHRoZW4gdGhlIHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkK
LSAgICAvLyB3aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJC
bG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29t
cGVuc2F0ZXMKLSAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZh
bHVlIGlmIGlzQWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KLSAg
ICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdW
aWV3JiwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7Ci0KLSAgICBl
bnVtIENvZGVQYXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVy
ZmxvdyB9OwotICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAg
ICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVu
c2lnbmVkKSB7IHJldHVybiBTaW1wbGU7IH0KLSAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVy
UmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7Ci0KLSAgICBib29sIHBy
aW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0g
Rm9yVGV4dEVtcGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNp
cyB9OwotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAg
ICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYs
IGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBO
b3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQg
ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBmbG9h
dCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBj
b25zdDsKLSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRS
dW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0g
ICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwg
TGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAg
ICBib29sIGdldEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlw
aERhdGEmKSBjb25zdDsKLQotICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNG
b3JDb21wbGV4VGV4dCgpOwotICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFw
aHNJbkNvbXBsZXhUZXh0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVh
bSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVt
cGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7Ci0gICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlw
aE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24s
IGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0
RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIGZyaWVuZCBzdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ7Ci0KLXB1YmxpYzoKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29s
IGVxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhv
dGhlci5tX2ZvbnREZXNjcmlwdGlvbikKLSAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9
PSBvdGhlci5tX2xldHRlclNwYWNpbmcKLSAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0g
b3RoZXIubV93b3JkU3BhY2luZzsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFVzZWZ1bCBmb3Ig
ZGVidWdnaW5nIHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7Ci0gICAgc3Rh
dGljIENvZGVQYXRoIGNvZGVQYXRoKCk7Ci0gICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzKTsKLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0
dXJlcyBkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IHVp
bnQ4X3Qgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwotICAgIHN0YXRpYyBib29s
IGlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIHJldHVy
biAhKGMgJiB+MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKLSAgICB9
Ci0KLSAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcg
fHwgYyA9PSAnXG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJl
YXRBc1plcm9XaWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFj
ZUluQ29tcGxleFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQotICAg
IHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBj
KSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNv
ZnRIeXBoZW4gfHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAw
eDIwMGYpIHx8IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhO
b0JyZWFrU3BhY2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQotICAgIHN0
YXRpYyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKLQotICAgIHN0YXRp
YyBpbmxpbmUgVUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
cGFjZTsKLQotICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgcmV0dXJuIGNoYXJh
Y3RlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBM
Q2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFj
ZXMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgYm9vbCB1c2VCYWNrc2xh
c2hBc1llblN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7
IH0KLSAgICBGb250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQo
KTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsK
LQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUg
PSBtX2ZvbnREZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBUeXBlc2V0
dGluZ0ZlYXR1cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQot
ICAgICAgICBzd2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXV0b1Rl
eHRSZW5kZXJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcHRpbWl6ZVNw
ZWVkOgotICAgICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKLSAgICAg
ICAgY2FzZSBPcHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJu
aW5nIHwgTGlnYXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewotICAgICAgICBjYXNlIEZv
bnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2Vy
bmluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
Tm9ybWFsS2VybmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fZm9udERl
c2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250RGVz
Y3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyAm
PSB+TGlnYXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBM
aWdhdHVyZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGVzZXR0
aW5nRmVhdHVyZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgIEZvbnREZXNj
cmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhz
PiBtX2dseXBoczsKLSAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Ci0gICAgZmxvYXQgbV93b3Jk
U3BhY2luZzsKLSAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0
dGluZ0ZlYXR1cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRp
b24uCi19OwotCi12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgcHJ1bmVV
bnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBjbGVhcldpZHRo
Q2FjaGVzKCk7Ci0KLWlubGluZSBGb250Ojp+Rm9udCgpCi17Ci19Ci0KLWlubGluZSBjb25zdCBT
aW1wbGVGb250RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9nbHlwaHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRh
KG1fZm9udERlc2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6
OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
Z2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1f
Zm9udERlc2NyaXB0aW9uLCBpbmRleCk7Ci19Ci0KLWlubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQ
aXRjaCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlw
aHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBGb250U2Vs
ZWN0b3IqIEZvbnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhz
ID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKLX0KLQotaW5saW5lIGZsb2F0IEZvbnQ6
OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6
ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCF0YWJTaXplKQotICAgICAgICBy
ZXR1cm4gbGV0dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZv
bnREYXRhLnNwYWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJEZWx0
YVdpZHRoID0gdGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOwotICAgIHJldHVy
biAodGFiRGVsdGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGgg
OiB0YWJEZWx0YVdpZHRoOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRM
YXlvdXQqKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRl
ICJGb250U2VsZWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2Fk
ZTsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBP
cGVuVHlwZVZlcnRpY2FsRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE3ODQxOCkJKGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6MTc4NDE4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGb250LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIK
KyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVu
aWNvZGU7CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25Q
dHI8VGV4dExheW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8g
dGhlIFRleHRMYXlvdXQgY2xhc3MgZGVmaW5pdGlvbgordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVP
d25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCit7
CisgICAgV2ViQ29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7Cit9CisKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNo
ZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVj
dG9yPik7CisKK2NvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJs
ZVsyNTZdID0geworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8q
XG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwKKyAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMSAvKj8qLywKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAxIC8qbm8tYnJlYWsg
c3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChj
b25zdCBUZXh0UnVuJiBydW4pCit7CisgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7
Cit9CisKK3N0YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsK
KyAgICBpZiAoIXNldCkgeworICAgICAgICBzZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+
OworICAgICAgICBzZXQtPmFkZCgiTVMgUEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmljb2Rl
TmFtZU1TUEdvdGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0
LCAweDMwQjcsIDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5n
KHVuaWNvZGVOYW1lTVNQR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290
aGljKSkpOworCisgICAgICAgIHNldC0+YWRkKCJNUyBQTWluY2hvIik7CisgICAgICAgIFVDaGFy
IHVuaWNvZGVOYW1lTVNQTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMw
LCAweDY2MEUsIDB4NjcxRH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2Rl
TmFtZU1TUE1pbmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsK
KworICAgICAgICBzZXQtPmFkZCgiTVMgR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNHb3RoaWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywg
MHgzMEMzLCAweDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5h
bWVNU0dvdGhpYywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TR290aGljKSkpOworCisg
ICAgICAgIHNldC0+YWRkKCJNUyBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVN
U01pbmNob1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKKyAg
ICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJB
WV9MRU5HVEgodW5pY29kZU5hbWVNU01pbmNobykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTWVp
cnlvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMw
QTQsIDB4MzBFQSwgMHgzMEFBfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNv
ZGVOYW1lTWVpcnlvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOworICAg
IH0KKyAgICByZXR1cm4gc2V0LT5jb250YWlucyhmYW1pbHkpOworfQorCitGb250OjpDb2RlUGF0
aCBGb250OjpzX2NvZGVQYXRoID0gQXV0bzsKKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250Ojpz
X2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKy8vIEZvbnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3Jt
IFBvcnRpb24pCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb250
OjpGb250KCkKKyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygw
KQorICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAsIG1fdHlwZXNl
dHRpbmdGZWF0dXJlcygwKQoreworfQorCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorICAgIDogbV9m
b250RGVzY3JpcHRpb24oZmQpCisgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykK
KyAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcpCisgICAgLCBtX3VzZUJhY2tzbGFzaEFz
WWVuU3ltYm9sKHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgp
KSkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQoreworfQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udERhdGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFj
aW5nKDApCisgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90
eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAg
bV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisgICAg
bV9mb250RGVzY3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
Q1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0
V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9u
dFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworI2VuZGlm
Cit9CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0
b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9u
dERhdGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDAp
CisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMo
KSkKK3sKKyAgICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250RGF0YS5mb250KCk7CisgICAg
bV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlG
b250KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNp
emUocHJpbWFyeUZvbnQpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAg
ICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKHBy
aW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2Vp
Z2h0Tm9ybWFsKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
RGF0YS5pc1ByaW50ZXJGb250KCkpOworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hl
ZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Cit9Cisj
ZW5kaWYKKworRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikKKyAgICA6IG1fZm9udERlc2Ny
aXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICwgbV9nbHlwaHMob3RoZXIubV9n
bHlwaHMpCisgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQorICAg
ICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQorICAgICwgbV91c2VCYWNrc2xh
c2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKQorICAgICwgbV90
eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7Cit9CisK
K0ZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK3sKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOworICAgIG1fZ2x5cGhzID0gb3Ro
ZXIubV9nbHlwaHM7CisgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5n
OworICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIG1fdXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOworICAg
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNldHRpbmdGZWF0dXJlczsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgRm9udDo6b3BlcmF0b3I9PShjb25zdCBGb250JiBv
dGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSB8fCBvdGhlci5p
c0xvYWRpbmdDdXN0b21Gb250cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
bV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3JpcHRpb24gfHwgbV9sZXR0ZXJT
cGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dvcmRTcGFjaW5nICE9IG90aGVy
Lm1fd29yZFNwYWNpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9nbHlwaHMg
PT0gb3RoZXIubV9nbHlwaHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9nbHlw
aHMgfHwgIW90aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
Z2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVjdG9yKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBDYW4gdGhlc2UgY2FzZXMgYWN0dWFsbHkg
c29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lwZWQgb3V0IGJ5IGZ1bGwgc3R5
bGUgcmVjYWxjLgorICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IG90
aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBvdGhlci5tX2dseXBocy0+Z2Vu
ZXJhdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgeworICAgIC8vIFRoaXMgcGFydCBvZiB0aGUga2V5
IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udERh
dGEgb2JqZWN0cykuCisgICAgRm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleSBmb250RGVz
Y3JpcHRpb25DYWNoZUtleTsKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAzPiBmYW1pbGllczsK
KyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JW
ZXJzaW9uOworICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdzOworfTsKKworc3RydWN0IEZv
bnRHbHlwaHNDYWNoZUVudHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhzQ2FjaGVLZXkmJiBrLCBSZWY8
Rm9udEdseXBocz4mJiBnKQorICAgICAgICA6IGtleShXVEY6Om1vdmUoaykpCisgICAgICAgICwg
Z2x5cGhzKFdURjo6bW92ZShnKSkKKyAgICB7IH0KKyAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5
OworICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8dW5z
aWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNo
ZWQ+IEZvbnRHbHlwaHNDYWNoZTsKKworc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250
R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYikKK3sKKyAgICBp
ZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuZm9udFNlbGVjdG9ySWQgIT0gYi5m
b250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24gIT0gYi5mb250U2VsZWN0b3JW
ZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250U2VsZWN0b3JGbGFncykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZhbWlsaWVzLnNpemUoKSAhPSBiLmZhbWls
aWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghZXF1YWxJZ25v
cmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxpZXNbaV0uaW1wbCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwgY2FjaGUsICgpKTsKKyAgICBy
ZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpCit7Cisg
ICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsKK30KKwordm9pZCBjbGVhcldpZHRoQ2FjaGVz
KCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpLCBlbmQg
PSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+
dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKK30KKworc3RhdGljIHVu
c2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24u
c2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc21hbGxD
YXBzKCkpOworfQorCitzdGF0aWMgdm9pZCBtYWtlRm9udEdseXBoc0NhY2hlS2V5KEZvbnRHbHlw
aHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKK3sKKyAgICBrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVL
ZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRlc2NyaXB0aW9uKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKQor
ICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpKTsKKyAg
ICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1
ZUlkKCkgOiAwOworICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8g
Zm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOworICAgIGtleS5mb250U2VsZWN0b3JGbGFncyA9
IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVzRmFtaWx5Rm9yKGRlc2NyaXB0
aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlvbikgOiAwOworfQorCitzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goY29uc3QgRm9udEdseXBoc0Nh
Y2hlS2V5JiBrZXkpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkLCA3PiBoYXNoQ29kZXM7CisgICAg
aGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtleS5mYW1pbGllcy5zaXplKCkp
OworCisgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZm9udERlc2NyaXB0aW9uQ2Fj
aGVLZXkuY29tcHV0ZUhhc2goKSk7CisgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
Zm9udFNlbGVjdG9ySWQpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvclZlcnNpb24pOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvckZsYWdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5LmZhbWlsaWVz
LnNpemUoKTsgKytpKQorICAgICAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mYW1p
bGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2goa2V5LmZhbWlsaWVzW2ldKSA6
IDApOworCisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoQ29kZXMuZGF0
YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7Cit9CisKK3ZvaWQgcHJ1
bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgVmVjdG9y
PHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7CisgICAgRm9udEdseXBoc0NhY2hlOjppdGVyYXRvciBl
bmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsKKyAgICBmb3IgKEZvbnRHbHlwaHNDYWNoZTo6
aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgpLmhhc09uZVJlZigpKQorICAg
ICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOworICAgIH0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvbnRHbHlwaHND
YWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Cit9CisKK3N0YXRpYyBSZWY8Rm9udEdseXBocz4g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCit7Cisg
ICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKKyAgICBtYWtlRm9udEdseXBoc0NhY2hlS2V5KGtl
eSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworCisgICAgdW5zaWduZWQg
aGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7CisgICAgRm9udEdseXBoc0Nh
Y2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0NhY2hlKCkuYWRkKGhhc2gsIHN0
ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7CisgICAgaWYgKCFhZGRSZXN1
bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0ga2V5KQor
ICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Z2x5cGhzLmdldCgpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PiYgbmV3RW50cnkgPSBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1
ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSksIEZvbnRHbHlwaHM6OmNyZWF0
ZShmb250U2VsZWN0b3IpKTsKKyAgICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzID0gbmV3RW50cnkt
PmdseXBocy5nZXQoKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQ
cnVuZUludGVydmFsID0gNTA7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9
IDQwMDsKKyAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVyOworICAgIC8vIFJlZmVyZW5j
ZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1bmluZyB0aGVtIHNhdmVzIGxp
dHRsZSBtZW1vcnkuCisgICAgaWYgKCEoKytwcnVuZUNvdW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVu
ZUludGVydmFsKSkKKyAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlw
aHNDYWNoZSgpOworICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2FsIGdyb3d0aC4KKyAgICBpZiAo
Zm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJpZXMpCisgICAgICAgIGZvbnRH
bHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpKTsKKyAgICByZXR1
cm4gZ2x5cGhzOworfQorCit2b2lkIEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4gZm9udFNlbGVjdG9yKSBjb25zdAoreworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENh
Y2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZh
bWlseShmaXJzdEZhbWlseSgpKTsKKyAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpOworfQorCitmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21G
b250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Cit7CisgICAgLy8gRG9uJ3QgZHJhdyBhbnl0aGluZyB3
aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9m
IGxvYWRpbmcsCisgICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3VtZW50IGlzIHNldCB0
byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sKKyAgICAvLyBmb250
KS4KKyAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOworCisgICAgQ29kZVBhdGgg
Y29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFz
dCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5k
IGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAgaWYgKGNvZGVQ
YXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0
aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CisKKyAgICBp
ZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQorICAgICAgICByZXR1cm4gZHJhd1NpbXBsZVRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworCisgICAgcmV0dXJuIGRyYXdDb21w
bGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0byA8IDApCisgICAgICAgIHRvID0gcnVu
Lmxlbmd0aCgpOworCisgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7
CisgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBh
cnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTAwMDUwCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBy
dW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgY29kZVBh
dGhUb1VzZSA9IENvbXBsZXg7CisKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQor
ICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoY29udGV4dCwgcnVuLCBtYXJr
LCBwb2ludCwgZnJvbSwgdG8pOworICAgIGVsc2UKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Cit9CisK
K2Zsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
KSBjb25zdAoreworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwor
ICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKKyAgICAgICAgLy8gVGhlIGNvbXBs
ZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVybmluZyBmYWxsYmFjayBmb250
cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBleHBsaWNpdCB0ZXN0IHRvIG1h
a2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgorICAgICAgICBpZiAoIWNhblJldHVybkZhbGxiYWNr
Rm9udHNGb3JDb21wbGV4VGV4dCgpKQorICAgICAgICAgICAgZmFsbGJhY2tGb250cyA9IDA7Cisg
ICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgZ2x5
cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCisgICAgICAgIGlmIChjb2RlUGF0aFRvVXNl
ICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92ZXJmbG93ICYmICFnbHlwaE92
ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKKyAgICAgICAgICAgIGdseXBoT3ZlcmZsb3cgPSAwOwor
ICAgIH0KKworICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0
dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOworICAgIGJvb2wgaGFzV29yZFNwYWNpbmdP
ckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRlclNwYWNpbmcoKTsKKyAgICBm
bG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMs
IGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92ZXJmbG93KTsKKyAgICBpZiAo
Y2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkpCisgICAgICAgIHJldHVybiAq
Y2FjaGVFbnRyeTsKKworICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBsb2NhbEZh
bGxiYWNrRm9udHM7CisgICAgaWYgKCFmYWxsYmFja0ZvbnRzKQorICAgICAgICBmYWxsYmFja0Zv
bnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKKworICAgIGZsb2F0IHJlc3VsdDsKKyAgICBpZiAo
Y29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQorICAgICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9y
Q29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICBlbHNl
CisgICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CisKKyAgICBpZiAoY2FjaGVFbnRyeSAmJiBmYWxsYmFja0Zv
bnRzLT5pc0VtcHR5KCkpCisgICAgICAgICpjYWNoZUVudHJ5ID0gcmVzdWx0OworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Zsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50
JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgcmV0
dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoKnRoaXMs
IHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKKyNlbmRpZgorCisgICAgY2hhcnNDb25z
dW1lZCA9IHJ1bi5sZW5ndGgoKTsKKyAgICBnbHlwaE5hbWUgPSAiIjsKKyAgICByZXR1cm4gd2lk
dGgocnVuKTsKK30KKworR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK3sKKyAg
ICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgeworICAgICAgICBpZiAobV9mb250RGVzY3Jp
cHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7Cisg
ICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihjKTsKKyAgICAgICAgICAgIGlm
ICh1cHBlckMgIT0gYykgeworICAgICAgICAgICAgICAgIGMgPSB1cHBlckM7CisgICAgICAgICAg
ICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKKyAgICB9CisKKyAgICBpZiAobWly
cm9yKQorICAgICAgICBjID0gdV9jaGFyTWlycm9yKGMpOworCisgICAgcmV0dXJuIG1fZ2x5cGhz
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOwor
fQorCisjaWYgIVBMQVRGT1JNKENPQ09BKQorUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250Ojpj
cmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBjb25zdAoreworICAgIHJldHVy
biBudWxscHRyOworfQorCit2b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KikKK3sK
K30KKworZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKworc3RhdGljIGNvbnN0IGNoYXIq
IGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7CisgICAgIkFtZXJpY2FuIFR5
cGV3cml0ZXIiLAorICAgICJBcmlhbCBIZWJyZXciLAorICAgICJDaGFsa2JvYXJkIiwKKyAgICAi
Q29jaGluIiwKKyAgICAiQ29yc2l2YSBIZWJyZXciLAorICAgICJDb3VyaWVyIiwKKyAgICAiRXVw
aGVtaWEgVUNBUyIsCisgICAgIkdlbmV2YSIsCisgICAgIkdpbGwgU2FucyIsCisgICAgIkhlaSIs
CisgICAgIkhlbHZldGljYSIsCisgICAgIkhvZWZsZXIgVGV4dCIsCisgICAgIkluYWlNYXRoaSIs
CisgICAgIkthaSIsCisgICAgIkx1Y2lkYSBHcmFuZGUiLAorICAgICJNYXJrZXIgRmVsdCIsCisg
ICAgIk1vbmFjbyIsCisgICAgIk1zaHRha2FuIiwKKyAgICAiTmV3IFBlbmluaW0gTVQiLAorICAg
ICJPc2FrYSIsCisgICAgIlJhYW5hbmEiLAorICAgICJTVEhlaXRpIiwKKyAgICAiU3ltYm9sIiwK
KyAgICAiVGltZXMiLAorICAgICJBcHBsZSBCcmFpbGxlIiwKKyAgICAiQXBwbGUgTGlHb3RoaWMi
LAorICAgICJBcHBsZSBMaVN1bmciLAorICAgICJBcHBsZSBTeW1ib2xzIiwKKyAgICAiQXBwbGVH
b3RoaWMiLAorICAgICJBcHBsZU15dW5nam8iLAorICAgICIjR3VuZ1NlbyIsCisgICAgIiNIZWFk
TGluZUEiLAorICAgICIjUENNeXVuZ2pvIiwKKyAgICAiI1BpbEdpIiwKK307CisKKy8vIEZvciBm
b250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9uJ3QgaGF2ZSBhIHZhbGlkIGVu
dHJ5IGluIHRoZSBPUy8yIHRhYmxlCisvLyBmb3IgYXZnQ2hhcldpZHRoLCBmYWxsYmFjayB0byB0
aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRoZSBhdmdDaGFyV2lkdGgKKy8v
IGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2VlbXMgdG8gYXBwbHkgdG8gYSBm
aXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAorLy8gYnV0LCBpbiBvcmRlciB0byBnZXQgc2ltaWxh
ciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhpcyBjaGVjayBmb3IKKy8vIGFs
bCBwbGF0Zm9ybXMuCitib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0
Cit7CisgICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CisgICAgaWYgKGZh
bWlseS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oSU9TKQorICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlP
UyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0
aC4KKyAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorCisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOworCisgICAgaWYgKCFmb250RmFt
aWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgeworICAgICAgICBmb250RmFtaWxpZXNXaXRo
SW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZz47CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZvbnRGYW1pbGllc1dp
dGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQorICAgICAgICAgICAgZm9udEZhbWlsaWVzV2l0aElu
dmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9udEZhbWlsaWVzV2l0aEludmFs
aWRDaGFyV2lkdGhbaV0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gIWZvbnRGYW1pbGllc1dpdGhJ
bnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOworfQorCitib29sIEZvbnQ6OmZh
c3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAoreworICAg
IGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOworICAgIGlmIChzdWNj
ZXNzKQorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lk
dGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0
byBmaXJzdEZhbWlseSgpLgorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEZvbnQ6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICB0byA9ICh0byA9
PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9u
Y2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENv
bXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikp
CisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9V
c2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1w
bGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOworCisgICAgcmV0dXJuIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRv
KTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdp
dGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAK
KyAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICghdHlwZXNldHRpbmdGZWF0dXJl
cygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldEZv
clBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKwor
ICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1biwgeCwgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJh
Y3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIG5vcm1hbGl6ZWQ7CisgICAgbm9ybWFsaXplZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgbm9y
bWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKKwor
ICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsK
K30KKworU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5h
bChjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRVc2VGb250U21v
b3RoaW5nID0gdHJ1ZTsKKwordm9pZCBGb250OjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCBz
aG91bGRVc2VTbW9vdGhpbmcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBz
aG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3RoaW5nOworfQorCitib29sIEZv
bnQ6OnNob3VsZFVzZVNtb290aGluZygpCit7CisgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9v
dGhpbmc7Cit9CisKK3ZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3sKKyAgICBz
X2NvZGVQYXRoID0gcDsKK30KKworRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoKQorewor
ICAgIHJldHVybiBzX2NvZGVQYXRoOworfQorCit2b2lkIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0
dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKK3sK
KyAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsK
K30KKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJl
cygpCit7CisgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisKK0Zv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK3sK
KyAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQorICAgICAgICByZXR1cm4gc19jb2RlUGF0aDsK
KworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4p
KQorICAgICAgICByZXR1cm4gU2ltcGxlOworI2VuZGlmCisKKyAgICBpZiAobV9mb250RGVzY3Jp
cHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRp
bmdzKCktPnNpemUoKSA+IDApCisgICAgICAgIHJldHVybiBDb21wbGV4OworICAgIAorICAgIGlm
IChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5n
RmVhdHVyZXMoKnRoaXMpKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgIGlmICghcnVu
LmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQorICAgICAgICByZXR1cm4gU2ltcGxlOworCisg
ICAgaWYgKHJ1bi5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIC8vIFN0
YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRpbmcgYWxzbyBtZWFzdXJlIHRo
ZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdl
Q29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCkpOworfQorCitGb250OjpD
b2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW4pCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB1c2UgYSBVbmljb2Rl
U2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRoYXQgd2UgCisgICAgLy8gY2Fu
J3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5L2NsYXNzIGJlY2F1c2Ugc29t
ZSBjaGFyYWN0ZXJzCisgICAgLy8gYXJlIG5vdCAnY29tYmluaW5nJywgYnV0IHN0aWxsIG5lZWQg
dG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KKyAgICAvLyBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkg
YXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBzb3J0ZWQKKyAgICAvLyBsaXN0
IG9mIHJhbmdlcy4KKyAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1wbGU7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IFVDaGFyIGMgPSBjaGFy
YWN0ZXJzW2ldOworICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBVKzAyRTUgdGhyb3VnaCBVKzAy
RTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxldHRlcnMpICAKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweDJFOSkgCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAgdGhyb3VnaCBVKzAzNkYgQ29t
YmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aWYgKGMgPD0gMHgzNkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBp
ZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkxIHRocm91Z2ggVSswNUNGIGV4
Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywgSGVicmV3IHB1bmN0dWF0aW9u
IFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1a2hhCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJpYywgU3lyaWFjLCBUaGFhbmEs
IE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAorICAgICAgICAvLyBEZXZhbmFnYXJpLCBCZW5nYWxp
LCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVsdWd1LCBLYW5uYWRhLCAKKyAg
ICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8sIFRpYmV0YW4sIE15YW5tYXIK
KyAgICAgICAgaWYgKGMgPCAweDA2MDApIAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChjIDw9IDB4MTA5RikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAg
IC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAob25seSBBbmNpZW50IEtvcmVh
biBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3NlOworICAgICAgICAvLyBNb2Rl
cm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1bHQgb2Ygc3RlcCBBKQorICAg
ICAgICBpZiAoYyA8IDB4MTEwMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweDExRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0aGlvcGljIGNvbWJpbmluZyBt
YXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MTM1RikKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHgxNzAwKSAvLyBV
KzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywgQnVoaWQsIFRhZ2hhbndhLEto
bWVyLCBNb25nb2xpYW4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAw
eDE4QUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4
MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChVbmljb2RlIDQuMCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDE5NEYpCisgICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTk4MCkgLy8gVSsxOTgwIHRocm91
Z2ggVSsxOURGIE5ldyBUYWkgTHVlCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KGMgPD0gMHgxOURGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYg
KGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBCdWdpbmVzZSwgVGFpIFRoYW0s
IEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRpYworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChjIDw9IDB4MUNGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisg
ICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3VnaCBVKzFERkYgQ29taW5pbmcg
ZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGMgPD0gMHgxREZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAg
ICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMgd2l0aCBkaWFjcml0aWNzIGFu
ZCBzdGFja2VkIGRpYWNyaXRpY3MKKyAgICAgICAgaWYgKGMgPD0gMHgyMDAwKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGMgPCAweDIwRDApIC8vIFUrMjBEMCB0aHJv
dWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweDIwRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VGIHRocm91Z2ggVSsyQ0YxIENv
bWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aWYgKGMgPD0gMHgyQ0YxKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAg
aWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAyRiBJZGVvZ3JhcGhpYyBhbmQg
SGFuZ3VsIFRvbmUgbWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8
PSAweDMwMkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8
IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJpbmluZyBtYXJrcyBmb3Igb2xk
IEN5cmlsbGljCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNjdE
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2RjAp
IC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFyayBmb3IgQmFtdW0KKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEE2RjEpCisgICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKKworICAgICAgIC8vIFUrQTgwMCB0aHJvdWdoIFUrQUJGRiBOYWdyaSwg
UGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5kZWQsCisgICAgICAgLy8gSGFu
Z3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRlbmRlZCBBLCBUYWkgVmlldCwg
TWVldGVpIE1heWVrLAorICAgICAgICBpZiAoYyA8IDB4QTgwMCkgCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdCMCB0aHJvdWdoIFUrRDdGRiBI
YW5ndWwgSmFtbyBFeHQuIEIKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8
PSAweEQ3RkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8
PSAweERCRkYpIHsKKyAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlCisKKyAgICAgICAgICAg
IGlmIChpID09IGxlbiAtIDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysraV07CisgICAgICAgICAgICBpZiAoIVUxNl9J
U19UUkFJTChuZXh0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
VUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMs
IG5leHQpOworCisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8IDB4MUYx
RTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFsIEluZGljYXRvciBTeW1ib2xz
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8PSAweDFGMUZGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8IDB4RTAxMDApIC8vIFUr
RTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycy4KKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFj
dGVyIDw9IDB4RTAxRUYpCisgICAgICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzExMDAwIGJsb2NrKSwgS2FpdGhp
IChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3JpcHRzCisgICAgICAgICAgICAv
LyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAwIHRocm91Z2ggVStGRTBGIFVu
aWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChjIDw9IDB4RkUwRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAg
IGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZFMkYgQ29tYmluaW5nIGhhbGYg
bWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEZFMkYpCisg
ICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMpCit7CisgICAgLy8gVGhlIGJh
c2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCisgICAgaWYgKGMgPj0gMHg0RTAwICYm
IGMgPD0gMHg5RkZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgVW5p
ZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgorICAgIGlmIChjID49IDB4MzQwMCAmJiBjIDw9
IDB4NERCRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFJhZGljYWxz
IFN1cHBsZW1lbnQuCisgICAgaWYgKGMgPj0gMHgyRTgwICYmIGMgPD0gMHgyRUZGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBLYW5neGkgUmFkaWNhbHMuCisgICAgaWYgKGMg
Pj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICAvLyBDSksgU3Ryb2tlcy4KKyAgICBpZiAoYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRUYpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9n
cmFwaHMuCisgICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhGQUZGKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBC
LgorICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24g
Qy4KKyAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjczRikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRC4K
KyAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50
LgorICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFGKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250Ojppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKK3sKKyAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQorICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKKyAgICAvLyAweDJDQiBNb2RpZmllciBMZXR0ZXIg
R3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25lIAorICAgIC8vIDB4MkQ5IERv
dCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKKyAgICBpZiAoKGMgPT0gMHgyQzcp
IHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMgPT0gMHgyRDkpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIwMjApIHx8IChjID09IDB4MjAyMSkg
fHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChjID09IDB4MjAzQykKKyAgICAg
ICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8IChjID09IDB4MjA0OCkgfHwg
KGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEpCisgICAgICAgIHx8IChjID09IDB4MjBERCkg
fHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChjID09IDB4MjEwMykgfHwgKGMg
PT0gMHgyMTA1KQorICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8IChjID09IDB4MjEwQSkgfHwg
KGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09IDB4MjEyMSkKKyAgICAgICAg
fHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChjID09IDB4MjE1MCkgfHwgKGMg
PT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1QSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdCKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09IDB4MjE4OSkgfHwgKGMgPT0g
MHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNCRSkgfHwgKGMgPT0gMHgyM0JG
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDIzQzAgJiYgYyA8PSAw
eDIzQ0MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjNDRSkgfHwg
KGMgPT0gMHgyNDIzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI0
NjAgJiYgYyA8PSAweDI0OTIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNDlDICYmIGMgPD0gMHgyNEZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgo
YyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0gMHgyNUEyKSB8fCAoYyA9PSAw
eDI1QUEpIHx8IChjID09IDB4MjVBQikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9PSAweDI1QjMpIHx8IChjID09
IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1QkMpIHx8IChjID09IDB4MjVC
RCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICgoYyA9PSAweDI1QzApIHx8
IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9PSAweDI1QzcpIHx8IChjID09
IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1Q0MpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9IDB4MjVEMykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI1RTIgJiYgYyA8PSAweDI1RTYpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPT0gMHgyNUVGKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4MjYwMykKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAoYyA9PSAweDI2MDYpIHx8IChj
ID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAweDI2MTcpIHx8IChjID09IDB4
MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdEKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkgfHwgKGMgPT0gMHgyNkJFKSB8
fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMgPT0gMHgyNzNGKSB8fCAoYyA9
PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID09IDB4MkIxQSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZGVv
Z3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgorICAgIGlmIChjID49IDB4MkZGMCAmJiBj
IDw9IDB4MkZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFN5bWJv
bHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgorICAgIGlmIChjID49IDB4MzAw
MCAmJiBjIDwgMHgzMDMwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID4gMHgz
MDMwICYmIGMgPD0gMHgzMDNGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEhpcmFn
YW5hCisgICAgaWYgKGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlGKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIEthdGFrYW5hIAorICAgIGlmIChjID49IDB4MzBBMCAmJiBjIDw9IDB4
MzBGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBCb3BvbW9mbworICAgIGlmIChj
ID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKKyAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMx
QkYpCisgICAgICAgIHJldHVybiB0cnVlOworIAorICAgIC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJz
IGFuZCBNb250aHMuCisgICAgaWYgKGMgPj0gMHgzMjAwICYmIGMgPD0gMHgzMkZGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eS4KKyAgICBpZiAo
YyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLgorICAgIGlmIChjID49IDB4RkUzMCAmJiBj
IDw9IDB4RkU0RikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHhGRTEw
KSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwgKGMgPT0gMHhGRTE5KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHhGRjBEKSB8fCAoYyA9PSAweEZG
MUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMKKyAgICAvLyBVc3Vh
bGx5IG9ubHkgdXNlZCBpbiBDSksKKyAgICBpZiAoYyA+PSAweEZGMDAgJiYgYyA8PSAweEZGRUYp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRW1vamkuCisgICAgaWYgKGMgPT0gMHgx
RjEwMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTEwICYmIGMg
PD0gMHgxRjEyOSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTMw
ICYmIGMgPD0gMHgxRjE0OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAw
eDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBh
bnNpb24pCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAg
ICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZh
bHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxl
bmd0aDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0
ZXJzW2kgLSAxXSkpIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBjb3VudDsKK30KKwordW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3sKKyAgICBzdGF0aWMg
Ym9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0lu
Q29tcGxleFRleHQoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYgKGRpcmVjdGlv
biA9PSBMVFIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOworICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgY291
bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVMTZfSVNf
TEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUxNl9JU19UUkFJTChjaGFyYWN0
ZXJzW2kgKyAxXSkpIHsKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBM
RU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7CisgICAgICAgICAgICAgICAg
aSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFw
aHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwor
ICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lv
biA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAgICAg
ICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAtIDFdOworICAgICAgICAgICAg
aWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsK
KyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVMTZfSVNfVFJBSUwo
Y2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFyYWN0ZXJzW2kgLSAyXSkpIHsK
KyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFj
dGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVv
Z3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVy
RXhwYW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0FmdGVy
RXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50Owor
fQorCit1bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmlu
Z1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVy
RXhwYW5zaW9uKQoreworICAgIGlmIChzdHJpbmdWaWV3LmlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVy
czgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsK
KyAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcu
Y2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4
cGFuc2lvbik7Cit9CisKK2Jvb2wgRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMy
IGMpCit7CisgICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NO
X01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9yIGNoYXJhY3RlcnMgbGlzdGVk
IGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBOb3ZlbWJlciAyMDEwLgorICAg
IGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckxp
bmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90CisgICAgICAgIHx8IGMgPT0gdWdhcml0
aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJzeWxsYWJpY1RzaGVnIHx8IGMg
PT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGb250Ojppc0xvYWRpbmdDdXN0b21Gb250
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1fZ2x5cGhzLT5pc0xvYWRpbmdD
dXN0b21Gb250cygpOworfQorICAgIAorR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVy
bGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgpCit7CisgICAgLy8gSW4gZ2Vu
ZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2Nl
bmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywK
KyAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBj
aGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7
CisgICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1ZmZlci5vZmZzZXRJblN0cmlu
ZyhpbmRleCk7CisKKyAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0gR2x5cGhCdWZmZXI6Om5vT2Zm
c2V0KSB7CisgICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGljaCBjaGFyYWN0ZXIgc3Bhd25l
ZCB0aGlzIGdseXBoLiBCYWlsLgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9y
OjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7CisgICAgfQorICAgIAorICAgIGlm
ICh0ZXh0UnVuLmlzOEJpdCgpKQorICAgICAgICBiYXNlQ2hhcmFjdGVyID0gdGV4dFJ1bi5jaGFy
YWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIFUxNl9ORVhUKHRl
eHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0ZXh0UnVuLmxlbmd0aCgpLCBi
YXNlQ2hhcmFjdGVyKTsKKyAgICAKKyAgICAvLyB1X2dldEludFByb3BlcnR5VmFsdWUgd2l0aCBV
Q0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZvciBKYXBhbmVzZSBvciBLb3Jl
YW4gY29kZXBvaW50cy4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gdXNlIHRoZSAiVW5pY29kZSBh
bGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICBVQmxvY2tDb2RlIGJsb2Nr
Q29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOworICAgIHN3aXRjaCAoYmxvY2tD
b2RlKSB7CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NVUFBMRU1FTlQ6CisgICAgY2Fz
ZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgorICAgIGNhc2UgVUJMT0NLX0VO
Q0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBB
VElCSUxJVFk6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQToKKyAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTOgorICAgIGNhc2Ug
VUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM6CisgICAgY2FzZSBVQkxPQ0tfQ0pL
X0NPTVBBVElCSUxJVFlfRk9STVM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dS
QVBIU19FWFRFTlNJT05fQjoKKyAgICBjYXNlIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVP
R1JBUEhTX1NVUFBMRU1FTlQ6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1NUUk9LRVM6CisgICAgY2Fz
ZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQzoKKyAgICBjYXNlIFVC
TE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9EOgorICAgIGNhc2UgVUJMT0NL
X0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6CisgICAgY2FzZSBVQkxPQ0tfTElO
RUFSX0JfSURFT0dSQU1TOgorICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0lERU9HUkFQSElDX1NV
UFBMRU1FTlQ6CisgICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6CisgICAgY2FzZSBVQkxPQ0tfS0FU
QUtBTkE6CisgICAgY2FzZSBVQkxPQ0tfQk9QT01PRk86CisgICAgY2FzZSBVQkxPQ0tfQk9QT01P
Rk9fRVhURU5ERUQ6CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU86CisgICAgY2FzZSBVQkxP
Q0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfU1lM
TEFCTEVTOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0E6CisgICAgY2Fz
ZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQjoKKyAgICAgICAgcmV0dXJuIEdseXBoVG9Q
YXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJs
aW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7CisgICAgfQorfQorCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTQzLDcgKzQzLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExh
eW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRM
YXlvdXQgY2xhc3MgZGVmaW5pdGlvbgogdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxX
ZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCiB7Ci0gICAgV2Vi
Q29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7CisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGU6
OmRlbGV0ZUxheW91dChwdHIpOwogfQogCiB9CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4p
OwogCi1jb25zdCB1aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2
XSA9IHsKK2NvbnN0IHVpbnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVy
VGFibGVbMjU2XSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywg
MSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsCiAgICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDEgLyo/Ki8sCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwKQEAgLTk4LDE1ICs5OCwxNSBAQCBzdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hB
c1llblNpZ25Gb3JGYW1pCiAgICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKIH0KIAot
Rm9udDo6Q29kZVBhdGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87CitGb250Q2FzY2FkZTo6Q29k
ZVBhdGggRm9udENhc2NhZGU6OnNfY29kZVBhdGggPSBBdXRvOwogCi1UeXBlc2V0dGluZ0ZlYXR1
cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOworVHlwZXNldHRpbmdG
ZWF0dXJlcyBGb250Q2FzY2FkZTo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7CiAK
IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb250IEltcGxlbWVu
dGF0aW9uIChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQorLy8gRm9udENhc2NhZGUgSW1wbGVtZW50
YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24pCiAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQogCi1Gb250OjpGb250KCkKK0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZSgp
CiAgICAgOiBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAs
IG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMTQsNyArMTE0LDcgQEAgRm9u
dDo6Rm9udCgpCiB7CiB9CiAKLUZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwg
ZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCitGb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywg
ZmxvYXQgd29yZFNwYWNpbmcpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKICAgICAsIG1f
bGV0dGVyU3BhY2luZyhsZXR0ZXJTcGFjaW5nKQogICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3Bh
Y2luZykKQEAgLTEyNCw3ICsxMjQsNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZmQsIGZsCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9y
IHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21v
b3RoaW5nTW9kZSkKK0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nTW9kZSkKICAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRm
b3JtRm9udChmb250RGF0YSkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29y
ZFNwYWNpbmcoMCkKQEAgLTE0Myw3ICsxNDMsNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIGZvbnRECiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVj
dG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLUZvbnQ6OkZvbnQo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9y
PiBmb250U2VsZWN0b3IpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3Ip
CiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCkBA
IC0xNTksNyArMTU5LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250
RAogfQogI2VuZGlmCiAKLUZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCitGb250Q2FzY2Fk
ZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIG90aGVyKQogICAgIDogbV9mb250RGVz
Y3JpcHRpb24ob3RoZXIubV9mb250RGVzY3JpcHRpb24pCiAgICAgLCBtX2dseXBocyhvdGhlci5t
X2dseXBocykKICAgICAsIG1fbGV0dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNwYWNpbmcpCkBA
IC0xNjksNyArMTY5LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikKIHsKIH0KIAot
Rm9udCYgRm9udDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGUmIEZv
bnRDYXNjYWRlOjpvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKQogewogICAgIG1f
Zm9udERlc2NyaXB0aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247CiAgICAgbV9nbHlwaHMg
PSBvdGhlci5tX2dseXBoczsKQEAgLTE4MCw3ICsxODAsNyBAQCBGb250JiBGb250OjpvcGVyYXRv
cj0oY29uc3QgRm9udCYgb3RoZXIpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIEZvbnQ6
Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpv
cGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoaXNM
b2FkaW5nQ3VzdG9tRm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjMsMTQgKzMyMywxNCBAQCBzdGF0aWMgUmVmPEZvbnRH
bHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoCiAgICAgcmV0dXJuIGdseXBoczsKIH0KIAotdm9pZCBG
b250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QK
K3ZvaWQgRm9udENhc2NhZGU6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNl
bGVjdG9yKSBjb25zdAogewogICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRH
bHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAgbV91c2VC
YWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJz
dEZhbWlseSgpKTsKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRp
bmdGZWF0dXJlcygpOwogfQogCi1mbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAogICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCkBAIC0zNTEsNyArMzUxLDcg
QEAgZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjbwogICAgIHJldHVybiBk
cmF3Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lk
IEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29uCiAgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi1mbG9hdCBGb250
Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zs
b2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVy
ZmxvdykgY29uc3QKIHsKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVu
KTsKICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CkBAIC00MDMsNyArNDAzLDcg
QEAgZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBj
aGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRl
Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBn
bHlwaE5hbWUpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAoaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCkBAIC00MTUsNyArNDE1LDcgQEAgZmxvYXQgRm9udDo6d2lkdGgo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbgogICAgIHJldHVybiB3aWR0aChydW4pOwogfQogCi1HbHlw
aERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3Is
IEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udERhdGFWYXJp
YW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgaWYgKHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsK
ICAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9u
dERhdGEoKS5pc1NWR0ZvbnQoKSkgewpAQCAtNDM2LDE2ICs0MzYsMTYgQEAgR2x5cGhEYXRhIEZv
bnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQot
UGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZs
b2F0LCBib29sKSBjb25zdAorUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3Jl
YXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKIHsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit2b2lk
IEZvbnRDYXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCiB7CiB9CiAKLWZsb2F0IEZv
bnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKQEAgLTQ5Niw3ICs0OTYs
NyBAQCBzdGF0aWMgY29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsCiAvLyBmcm9tIHRo
ZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVt
YmVyIG9mIE1hYyBmb250cywKIC8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVy
aW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCiAvLyBhbGwgcGxhdGZv
cm1zLgotYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorYm9vbCBG
b250Q2FzY2FkZTo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKIHsKICAgICBBdG9t
aWNTdHJpbmcgZmFtaWx5ID0gZmlyc3RGYW1pbHkoKTsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHko
KSkKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpIGNvCiAgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+
Y29udGFpbnMoZmFtaWx5KTsKIH0KIAotYm9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElm
QXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OmZhc3RBdmVy
YWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQpA
QCAtNTI4LDcgKzUyOCw3IEBAIGJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWIKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3Qs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4u
bGVuZ3RoKCkgOiB0byk7CiAKQEAgLTU0Myw3ICs1NDMsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JUZXh0KGNvCiAgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKIH0KIAotaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNs
dWRlUGFydGlhbEdseXBocykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRp
b24oY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQg
aGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRw
Oi8vd2Via2l0Lm9yZy9iLzEwMDA1MAogICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXgg
JiYgKCF0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgfHwgaXNEcmF3bldpdGhTVkdGb250KHJ1bikpKQpA
QCAtNTU5LDU1ICs1NTksNTUgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgbm9ybWFsaXplU3BhY2Vz
SW50ZQogICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG5vcm1hbGl6ZWQuYXBw
ZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisgICAgICAgIG5vcm1h
bGl6ZWQuYXBwZW5kKEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkp
OwogCiAgICAgcmV0dXJuIG5vcm1hbGl6ZWQudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEZvbnQ6
Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorU3RyaW5nIEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50
ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIEZv
bnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9
IHRydWU7CiAKLXZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNl
U21vb3RoaW5nKQordm9pZCBGb250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wg
c2hvdWxkVXNlU21vb3RoaW5nKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
c2hvdWxkVXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKIH0KIAotYm9vbCBG
b250OjpzaG91bGRVc2VTbW9vdGhpbmcoKQorYm9vbCBGb250Q2FzY2FkZTo6c2hvdWxkVXNlU21v
b3RoaW5nKCkKIHsKICAgICByZXR1cm4gc2hvdWxkVXNlRm9udFNtb290aGluZzsKIH0KIAotdm9p
ZCBGb250OjpzZXRDb2RlUGF0aChDb2RlUGF0aCBwKQordm9pZCBGb250Q2FzY2FkZTo6c2V0Q29k
ZVBhdGgoQ29kZVBhdGggcCkKIHsKICAgICBzX2NvZGVQYXRoID0gcDsKIH0KIAotRm9udDo6Q29k
ZVBhdGggRm9udDo6Y29kZVBhdGgoKQorRm9udENhc2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRl
Ojpjb2RlUGF0aCgpCiB7CiAgICAgcmV0dXJuIHNfY29kZVBhdGg7CiB9CiAKLXZvaWQgRm9udDo6
c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0
dGluZ0ZlYXR1cmVzKQordm9pZCBGb250Q2FzY2FkZTo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVh
dHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKQogewogICAgIHNf
ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzOwogfQogCi1U
eXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OmRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCkKK1R5
cGVzZXR0aW5nRmVhdHVyZXMgRm9udENhc2NhZGU6OmRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KCkKIHsKICAgICByZXR1cm4gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotRm9u
dDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdAorRm9u
dENhc2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBy
dW4pIGNvbnN0CiB7CiAgICAgaWYgKHNfY29kZVBhdGggIT0gQXV0bykKICAgICAgICAgcmV0dXJu
IHNfY29kZVBhdGg7CkBAIC02MzMsNyArNjMzLDcgQEAgRm9udDo6Q29kZVBhdGggRm9udDo6Y29k
ZVBhdGgoY29uc3QgVGV4dAogICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5j
aGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKIH0KIAotRm9udDo6Q29kZVBhdGggRm9udDo6
Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuKQorRm9udENhc2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjaGFyYWN0ZXJSYW5nZUNv
ZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCiB7CiAgICAgLy8g
RklYTUU6IFNob3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2Vk
LiBOb3RlIHRoYXQgd2UgCiAgICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVy
IFByb3BlcnR5L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCkBAIC03ODcsNyArNzg3LDcg
QEAgRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQorYm9vbCBG
b250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQogewogICAgIC8vIFRoZSBiYXNp
YyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgogICAgIGlmIChjID49IDB4NEUwMCAmJiBj
IDw9IDB4OUZGRikKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
KFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTk4OSw3ICs5ODksNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBo
KGMpOwogfQogCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJu
YWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQordW5zaWduZWQgRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJF
eHBhbnNpb24pCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGlmIChkaXJlY3Rpb24g
PT0gTFRSKSB7CkBAIC0xMDEyLDcgKzEwMTIsNyBAQCB1bnNpZ25lZCBGb250OjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi11bnNpZ25lZCBGb250Ojpl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhw
YW5zaW9uKQordW5zaWduZWQgRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCiB7CiAgICAgc3RhdGljIGJv
b2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNv
bXBsZXhUZXh0KCk7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpAQCAtMTA2MiwxNCArMTA2Miwx
NCBAQCB1bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50CiAgICAgcmV0dXJu
IGNvdW50OwogfQogCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29s
JiBpc0FmdGVyRXhwYW5zaW9uKQordW5zaWduZWQgRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCiB7CiAgICAgaWYgKHN0cmluZ1ZpZXcu
aXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJu
YWwoc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rp
b24sIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgo
KSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsKIH0KIAotYm9vbCBGb250OjpjYW5SZWNl
aXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmNhblJlY2VpdmVU
ZXh0RW1waGFzaXMoVUNoYXIzMiBjKQogewogICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVf
R0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNLIHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgYm9vbCBGb250Ojpj
YW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEZvbnQ6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6Omlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9nbHlwaHMgJiYgbV9n
bHlwaHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODQxOCkJKGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOjE3ODQxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udF9oCisjZGVmaW5l
IEZvbnRfaAorCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiRm9udEdseXBocy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CisKKy8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8gMCBhbmQgY29uZmxpY3Rz
CisvLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4KKyNpZmRlZiBDb21wbGV4
CisjdW5kZWYgQ29tcGxleAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZvbnREYXRhOworY2xhc3MgRm9u
dE1ldHJpY3M7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgRm9udFNlbGVjdG9yOwor
Y2xhc3MgR2x5cGhCdWZmZXI7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBMYXlvdXRS
ZWN0OworY2xhc3MgUmVuZGVyVGV4dDsKK2NsYXNzIFRleHRMYXlvdXQ7CitjbGFzcyBUZXh0UnVu
OworCitzdHJ1Y3QgR2x5cGhEYXRhOworCitzdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7CisgICAgR2x5
cGhPdmVyZmxvdygpCisgICAgICAgIDogbGVmdCgwKQorICAgICAgICAsIHJpZ2h0KDApCisgICAg
ICAgICwgdG9wKDApCisgICAgICAgICwgYm90dG9tKDApCisgICAgICAgICwgY29tcHV0ZUJvdW5k
cyhmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNFbXB0eSgpCisgICAg
eworICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRvbTsKKyAg
ICB9CisKKyAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhl
cikKKyAgICB7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0KTsKKyAg
ICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQpOworICAgICAgICB0b3Ag
PSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7CisgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4KGJv
dHRvbSwgb3RoZXIuYm90dG9tKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
R2x5cGhPdmVyZmxvdyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbGVmdCAhPSBvdGhl
ci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBvdGhlci50b3AgfHwgYm90
dG9tICE9IG90aGVyLmJvdHRvbTsKKyAgICB9CisKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgcmln
aHQ7CisgICAgaW50IHRvcDsKKyAgICBpbnQgYm90dG9tOworICAgIGJvb2wgY29tcHV0ZUJvdW5k
czsKK307CisKK2NsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5cGgsIERy
YXdPdmVyR2x5cGh9OworICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygpID0gMDsK
KyAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxmbG9h
dCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7CisgICAgdmlydHVhbCBHbHlwaFVuZGVybGluZVR5cGUg
dW5kZXJsaW5lVHlwZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KK307CitHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBU
ZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOworCitjbGFzcyBGb250IHsK
K3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3
b3JkU3BhY2luZyk7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgaWYgdGhl
IHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KKyAgICBXRUJDT1JF
X0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZv
bnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KTsKKyNlbmRpZgorICAgIH5Gb250KCk7CisKKyAgICBGb250KGNvbnN0IEZv
bnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9udCYpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBj
b25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9CisKKyAg
ICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0
ZWRQaXhlbFNpemUoKTsgfQorICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQorCisgICAgdm9pZCB1cGRhdGUoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+KSBjb25zdDsKKworICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5
IH07CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9
IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkp
IGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1w
bGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKwor
ICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4
dGVudHMpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4
dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAs
IEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1
biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0OworCisgICAg
UGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0IHhQ
b3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBkZWxl
dGVMYXlvdXQoVGV4dExheW91dCopOworICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0
JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihj
b25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1
biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
IGNvbnN0OworCisgICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9CisKKyAgICBmbG9hdCB3b3JkU3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KKyAgICBmbG9hdCBsZXR0ZXJTcGFjaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CisgICAgdm9pZCBzZXRXb3JkU3BhY2luZyhm
bG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9CisgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5n
KGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQorICAgIGJvb2wgaXNGaXhlZFBpdGNo
KCkgY29uc3Q7CisgICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQorICAgIAorICAgIEZvbnRSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5yZW5k
ZXJpbmdNb2RlKCk7IH0KKworICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0
dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0aW5nRmVhdHVyZXM+KG1f
dHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RG
YW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOyB9
CisgICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlw
dGlvbi5mYW1pbHlDb3VudCgpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlBdCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsg
fQorCisgICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlw
dGlvbi5pdGFsaWMoKTsgfQorICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KKyAgICBGb250V2lkdGhWYXJpYW50IHdpZHRo
VmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgp
OyB9CisKKyAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMt
PmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KKworICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0
cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0K
KyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCku
c3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9CisgICAgZmxvYXQgdGFiV2lkdGgoY29u
c3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29u
c3Q7CisgICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24p
IGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3Np
dGlvbik7IH0KKyAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0OworICAg
IGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNvbnN0
OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcworCisgICAgaW50IGVtcGhhc2lzTWFya0FzY2Vu
dChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICBpbnQgZW1waGFzaXNNYXJrRGVzY2Vu
dChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEm
IHByaW1hcnlGb250RGF0YSgpIGNvbnN0OworICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNr
UmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50
KSBjb25zdDsKKyAgICAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhcios
IHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisjZW5kaWYKKworICAgIHN0
YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOworICAgIHN0YXRpYyBib29sIGlzQ0pL
SWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7CisKKyAgICAvLyBCRVdBUkU6IElmIGlzQWZ0ZXJF
eHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhlIHJldHVy
bmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkKKyAgICAvLyB3aGljaCBt
YXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29tcGVuc2F0ZXMKKyAgICAv
LyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZhbHVlIGlmIGlzQWZ0ZXJF
eHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiwgVGV4dERpcmVj
dGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7CisKKyAgICBlbnVtIENvZGVQYXRoIHsg
QXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB9OworICAgIENv
ZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKKyAgICBzdGF0aWMgQ29kZVBh
dGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVuc2lnbmVkKSB7IHJldHVy
biBTaW1wbGU7IH0KKyAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChj
b25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7CisKKyAgICBib29sIHByaW1hcnlGb250RGF0YUlz
U3lzdGVtRm9udCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0gRm9yVGV4dEVtcGhhc2lz
T3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OworCisgICAgLy8g
UmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KKyAgICBmbG9hdCBnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQg
dG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFz
aXMpIGNvbnN0OworICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7
CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBoQnVmZmVy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIEZs
b2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21pY1N0
cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBpbnQg
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3Np
dGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBib29sIGdldEVtcGhh
c2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBjb25zdDsK
KworICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
OworICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0
KCk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgorICAg
IGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYs
IGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBO
b3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OworICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxv
YXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDAp
IGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7
CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owor
CisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJF
eHBhbnNpb24pOworICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBib29s
JiBpc0FmdGVyRXhwYW5zaW9uKTsKKworICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsK
KyAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7CisKK3B1YmxpYzoK
KyNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKKyAgICBib29sIGVxdWFsRm9yVGV4dEF1
dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5tX2ZvbnREZXNj
cmlwdGlvbikKKyAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhlci5tX2xldHRl
clNwYWNpbmcKKyAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0gb3RoZXIubV93b3JkU3Bh
Y2luZzsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBk
aWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7CisgICAgc3RhdGljIENvZGVQYXRoIGNv
ZGVQYXRoKCk7CisgICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhUeXBlc2V0
dGluZ0ZlYXR1cmVzKTsKKyAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBkZWZhdWx0VHlw
ZXNldHRpbmdGZWF0dXJlcygpOworCisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19yb3VuZGlu
Z0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOworICAgIHN0YXRpYyBib29sIGlzUm91bmRpbmdIYWNr
Q2hhcmFjdGVyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICAgIHJldHVybiAhKGMgJiB+MHhGRikg
JiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKKyAgICB9CisKKyAgICBGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OworICAgIHN0YXRpYyBib29sIHRyZWF0QXNTcGFj
ZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8
IGMgPT0gbm9CcmVha1NwYWNlOyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNw
YWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlw
dChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQorICAgIHN0YXRpYyBib29sIHRy
ZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVybiBjIDwg
MHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4gfHwgYyA9
PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8IChjID49
IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgfHwg
YyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQorICAgIHN0YXRpYyBib29sIGNhblJl
Y2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKKworICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIg
bm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzcGFjZTsKKworICAgICAg
ICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICByZXR1
cm4gemVyb1dpZHRoU3BhY2U7CisKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKKyAgICB9CisK
KyAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBsZW5ndGgpOworCisgICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5bWJvbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KKyAgICBGb250R2x5
cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKKworICAgIFR5cGVzZXR0
aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnREZXNjcmlw
dGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOworICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIGZl
YXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKKworICAgICAgICBzd2l0Y2gg
KHRleHRSZW5kZXJpbmdNb2RlKSB7CisgICAgICAgIGNhc2UgQXV0b1RleHRSZW5kZXJpbmc6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPcHRpbWl6ZVNwZWVkOgorICAgICAgICAg
ICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKKyAgICAgICAgY2FzZSBPcHRpbWl6
ZUxlZ2liaWxpdHk6CisgICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGlnYXR1cmVz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1fZm9u
dERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgeworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
Tm9uZUtlcm5pbmc6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2VybmluZzoK
KyAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9uLmNvbW1v
bkxpZ2F0dXJlc1N0YXRlKCkpIHsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkRpc2Fi
bGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1cmVzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpFbmFibGVk
TGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0
dXJlc1N0YXRlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZmVhdHVyZXM7CisgICAgfQorCisgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMgc19k
ZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKKworICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnRE
ZXNjcmlwdGlvbjsKKyAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBoczsKKyAg
ICBmbG9hdCBtX2xldHRlclNwYWNpbmc7CisgICAgZmxvYXQgbV93b3JkU3BhY2luZzsKKyAgICBt
dXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKKyAgICBtdXRhYmxlIHVuc2ln
bmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1cmVzKSBD
YWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRpb24uCit9OworCit2b2lk
IGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKK3ZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRy
aWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwordm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CisKK2lu
bGluZSBGb250Ojp+Rm9udCgpCit7Cit9CisKK2lubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYg
Rm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOwor
ICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERlc2NyaXB0
aW9uKTsKK30KKworaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNrUmFuZ2Vz
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZ2x5cGhzKTsKKyAgICBy
ZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2NyaXB0aW9u
LCBpbmRleCk7Cit9CisKK2lubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fZ2x5cGhzKTsKKyAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4ZWRQaXRj
aChtX2ZvbnREZXNjcmlwdGlvbik7Cit9CisKK2lubGluZSBGb250U2VsZWN0b3IqIEZvbnQ6OmZv
bnRTZWxlY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlwaHMtPmZv
bnRTZWxlY3RvcigpIDogMDsKK30KKworaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRoKGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRp
b24pIGNvbnN0Cit7CisgICAgaWYgKCF0YWJTaXplKQorICAgICAgICByZXR1cm4gbGV0dGVyU3Bh
Y2luZygpOworICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNwYWNlV2lk
dGgoKSArIGxldHRlclNwYWNpbmcoKTsKKyAgICBmbG9hdCB0YWJEZWx0YVdpZHRoID0gdGFiV2lk
dGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOworICAgIHJldHVybiAodGFiRGVsdGFXaWR0
aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRo
OworfQorCit9CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiB2b2lkIGRlbGV0ZU93
bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsKKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogICoK
ICAqLwogCi0jaWZuZGVmIEZvbnRfaAotI2RlZmluZSBGb250X2gKKyNpZm5kZWYgRm9udENhc2Nh
ZGVfaAorI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKQEAgLTEwNiwyNCArMTA2LDI0IEBAIHB1YmxpYzoK
IH07CiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5k
ZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgp
OwogCi1jbGFzcyBGb250IHsKK2NsYXNzIEZvbnRDYXNjYWRlIHsKIHB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2Fz
Y2FkZShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3
b3JkU3BhY2luZyk7CiAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgaWYgdGhl
IHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KLSAgICBXRUJDT1JF
X0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZv
bnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNt
b290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
bWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JN
KElPUykKLSAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4pOworICAgIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogI2VuZGlmCi0gICAgfkZvbnQoKTsKKyAgICB+Rm9udENh
c2NhZGUoKTsKIAotICAgIEZvbnQoY29uc3QgRm9udCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZv
bnQmIG9wZXJhdG9yPShjb25zdCBGb250Jik7CisgICAgRm9udENhc2NhZGUoY29uc3QgRm9udENh
c2NhZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSYgb3BlcmF0b3I9KGNvbnN0
IEZvbnRDYXNjYWRlJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9udCYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICBXRUJDT1JFX0VY
UE9SVCBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQogCiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbjsgfQogCkBAIC0y
NDMsNyArMjQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogI2lmIEVOQUJMRShJT1NfVEVYVF9B
VVRPU0laSU5HKQotICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBv
dGhlcikgY29uc3QKKyAgICBib29sIGVxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENh
c2NhZGUmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIubV9mb250RGVzY3JpcHRpb24pCiAgICAg
ICAgICAgICAmJiBtX2xldHRlclNwYWNpbmcgPT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nCkBAIC0z
NDcsMzQgKzM0NywzNCBAQCB2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQg
cHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwogdm9pZCBjbGVh
cldpZHRoQ2FjaGVzKCk7CiAKLWlubGluZSBGb250Ojp+Rm9udCgpCitpbmxpbmUgRm9udENhc2Nh
ZGU6On5Gb250Q2FzY2FkZSgpCiB7CiB9CiAKLWlubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYg
Rm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKK2lubGluZSBjb25zdCBTaW1wbGVGb250RGF0
YSYgRm9udENhc2NhZGU6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1f
Z2x5cGhzKTsKICAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YShtX2Zv
bnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250OjpmYWxs
YmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnRSYW5n
ZXMmIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAog
ewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwogfQogCi1pbmxpbmUgYm9v
bCBGb250Ojppc0ZpeGVkUGl0Y2goKSBjb25zdAoraW5saW5lIGJvb2wgRm9udENhc2NhZGU6Omlz
Rml4ZWRQaXRjaCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKICAgICByZXR1cm4g
bV9nbHlwaHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBG
b250U2VsZWN0b3IqIEZvbnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CitpbmxpbmUgRm9udFNlbGVj
dG9yKiBGb250Q2FzY2FkZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9n
bHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1pbmxpbmUgZmxvYXQg
Rm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0
YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK2lubGluZSBmbG9hdCBGb250Q2FzY2FkZTo6
dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXpl
LCBmbG9hdCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXRhYlNpemUpCiAgICAgICAgIHJl
dHVybiBsZXR0ZXJTcGFjaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gbWF5IG5vdCB3b3JrIGlmIHRo
ZSBlbXBoYXNpcyBtYXJrIHVzZXMgYSBjb21wbGV4IHNjcmlwdCwgYnV0IG5vbmUgb2YgdGhlCiAv
LyBzdGFuZGFyZCBlbXBoYXNpcyBtYXJrcyBkbyBzby4KLWJvb2wgRm9udDo6Z2V0RW1waGFzaXNN
YXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERh
dGEpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBHbHlwaERhdGEmIGdseXBoRGF0YSkgY29uc3QKIHsKICAg
ICBpZiAobWFyay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY2LDcgKzY2
LDcgQEAgYm9vbCBGb250OjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29ucwogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrQXNjZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBo
RGF0YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhE
YXRhKSkKQEAgLTgwLDcgKzgwLDcgQEAgaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taQogICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7
CiB9CiAKLWludCBGb250OjplbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CkBAIC05NCw3ICs5NCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0
b20KICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKIH0K
IAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmsp
IGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CiAgICAg
aWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCkBAIC0x
MDgsNyArMTA4LDcgQEAgaW50IEZvbnQ6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taQog
ICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZs
b2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4
dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lz
T3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNl
OwogCkBAIC0xMzgsNyArMTM4LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JTaW1wbAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQgRm9udDo6ZHJh
d1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQg
Rm9udENhc2NhZGU6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2Fk
dmFuY2VzK2ZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1
ZmZlcjsKQEAgLTE1NCw3ICsxNTQsNyBAQCBmbG9hdCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFw
aGljc0NvbnRlCiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lk
IEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENh
c2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yU2ltcGxlVGV4CiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBn
bHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwg
cG9pbnQueSgpKSk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAogewogI2lmICFFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFVOVVNFRF9QQVJBTShydW4pOwpAQCAt
MjMxLDcgKzIzMSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXAK
ICAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQo
aSksIGdseXBoQnVmZmVyLmdseXBoQXQoaSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFz
aXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhE
YXRhOwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERh
dGEpKQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb24KICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBtYXJrQnVmZmVyLCBz
dGFydFBvaW50KTsKIH0KIAotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2Fz
Y2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4sIGZh
bGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVy
OwpAQCAtMjc2LDcgKzI3Niw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0
KGNvbnMKICAgICByZXR1cm4gaXQubV9ydW5XaWR0aFNvRmFyOwogfQogCi12b2lkIEZvbnQ6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0
UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENh
c2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsK
ICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMs
IHJ1bik7CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yU2ltcGxlVAogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9y
ZVdpZHRoKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
CiB7CiAgICAgZmxvYXQgZGVsdGEgPSB4OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250
R2x5cGhzLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMjY0LDcgKzI2NCw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpn
bHlwaERhdGFGb3JTeXN0ZW0KICAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCiAgICAg
ICAgIHJldHVybiBHbHlwaERhdGEoKTsKIAotICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxs
YmFja0ZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYykpCisgICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEt
Pmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woYykpCiAgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwogCiAgICAg
R2x5cGhEYXRhIGZhbGxiYWNrR2x5cGhEYXRhOwpAQCAtMjc0LDcgKzI3NCw3IEBAIEdseXBoRGF0
YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW0KICAgICAgICAgZmFsbGJhY2tHbHlwaERh
dGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT52YXJpYW50Rm9udERhdGEoZGVzY3JpcHRpb24s
IHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKICAgICBpZiAodmFyaWFudCA9
PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAg
IGlmICghRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0
YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAh
ZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkK
KyAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBm
YWxsYmFja0dseXBoRGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2soKSkKICAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRh
Rm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9u
Q0pLR2x5cGhPcmllbnRhdGlvbigpLCBmYWxsYmFja0dseXBoRGF0YSk7CiAgICAgfQogCkBAIC0z
MjIsNyArMzIyLDcgQEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAog
ICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsK
ICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsKICAgICAgICAgICAgIGlmIChkYXRhLmZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZv
bnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgICAgICAgICAgICAgaWYg
KCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0
aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoIWRhdGEuZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcg
KzQzMCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkKIC8vIHRo
ZSB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5vdGlj
ZWFibGUgZGlmZmVyZW5jZXMgaW4gbGF5b3V0LgogI2lmICFQTEFURk9STShJT1MpCiAjaWYgIVVT
RShXSU5HREkpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0
KGNvbnN0IEZvbgogfQogI2VuZGlmCiAjZWxzZQotZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ0OCw3ICs0NDgsNyBAQCBmbG9hdCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDU2LDcgKzQ1
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEYKICAgICBmb250
LmRyYXdHbHlwaHModGhpcywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9p
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDY1LDEyICs0NjUsMTIgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKAogfQogCiAvLyBGSVhNRTogQmV0dGVyIG1lcmdlIHRo
ZSBpT1MgYW5kIG5vbi1pT1MgZGlmZmVyZW5jZXMuIEluIHBhcnRpY3VsYXIsIG1ha2UgdGhpcyBt
ZXRob2QgdXNlIHRoZQotLy8gcmV0dXJuZWQgd2lkdGggb2YgdGhlIGRyYXduIHRleHQsIEZvbnQ6
OmRyYXdUZXh0KCksIGluc3RlYWQgb2YgY29tcHV0aW5nIGl0LiBFbnN1cmUgdGhhdCB0aGVyZQor
Ly8gcmV0dXJuZWQgd2lkdGggb2YgdGhlIGRyYXduIHRleHQsIEZvbnRDYXNjYWRlOjpkcmF3VGV4
dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKIC8vIGFyZW4n
dCBub3RpY2VhYmxlIGRpZmZlcmVuY2VzIGluIGxheW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCiAj
aWYgIVBMQVRGT1JNKElPUykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRD
YXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
KQogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnQ6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlT
dGF0dXMqIHN0YXR1cywgaW50IGxlbmd0aCkKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
IGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiwgQmlkaVN0YXR1cyogc3RhdHVzLCBpbnQgbGVuZ3Ro
KQogI2VuZGlmCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTUxNSw3ICs1MTUs
NyBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zCiAgICAgICAgIGZv
bnQuZHJhd1RleHQodGhpcywgc3VicnVuLCBjdXJyUG9pbnQsIDAsIC0xLCBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pOwogCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBIYXZlIEZvbnQ6OmRyYXdUZXh0IHJldHVybiB0aGUgd2lkdGggb2Ygd2hh
dCBpdCBkcmV3IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byByZS1tZWFzdXJlIGhlcmUuCisgICAg
ICAgIC8vIEZJWE1FOiBIYXZlIEZvbnRDYXNjYWRlOjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRo
IG9mIHdoYXQgaXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJl
LgogICAgICAgICBpZiAoYmlkaVJ1bikKICAgICAgICAgICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQu
d2lkdGgoc3VicnVuKSwgMCk7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCkBAIC0zNTYs
MTYgKzM1NiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYg
IVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsK
KyAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAjZWxzZQot
ICAgICAgICBmbG9hdCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgZmxvYXQg
ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2VuZGlmCi0gICAgICAgIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0g
ICAgICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
ICwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYgLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwor
ICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogI2Vsc2UKLSAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBp
bnQgbGVuZ3RoID0gLTEpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3QmlkaVRl
eHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9O
b3RQYWludElmRm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAtMSk7
CiAjZW5kaWYKICAgICAgICAgZW51bSBSb3VuZGluZ01vZGUgewogICAgICAgICAgICAgUm91bmRB
bGxTaWRlcywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsOCBAQAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAjaW5jbHVkZSAiQ29yZVRleHRT
UEkuaCIKICNlbmRpZgotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgpAQCAtNDE5LDcgKzQxOSw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OnMKICAgICAgICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVu
aXRzTGVuZ3RoOwogICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewotICAgICAgICAg
ICAgY29kZVVuaXRzWzBdID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJh
Y3Rlcik7CiAgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgogCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiVGV4
dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbGVmdFRydW5j
YXRlVG9CdWZmZXIoY29uCiAgICAgcmV0dXJuIGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsK
IH0KIAotc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGlu
Z0hhY2tzKQorc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiByZW5k
ZXJlciwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNh
YmxlUm91bmRpbmdIYWNrcykKIHsKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgp
OwogICAgIGlmIChkaXNhYmxlUm91bmRpbmdIYWNrcykKQEAgLTIwMCw3ICsyMDAsNyBAQCBzdGF0
aWMgZmxvYXQgc3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuCiAgICAgcmV0dXJuIHJlbmRlcmVy
LndpZHRoKHJ1bik7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBUcnVuY2F0aW9u
RnVuY3Rpb24gdHJ1bmNhdGVUb0J1ZmZlciwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcywgZmxv
YXQqIHJlc3VsdFdpZHRoID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRy
dWUsICBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNU
cnVuY2F0ZSA9IGZhbHNlKQorc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBUcnVu
Y2F0aW9uRnVuY3Rpb24gdHJ1bmNhdGVUb0J1ZmZlciwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQqIHJlc3VsdFdpZHRoID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cyA9IHRydWUsICBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBh
bHdheXNUcnVuY2F0ZSA9IGZhbHNlKQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gc3RyaW5nOwpAQCAtMjk1LDQyICsyOTUsNDIgQEAgc3RhdGljIFN0cmluZyB0
cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbgogICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVy
LCB0cnVuY2F0ZWRMZW5ndGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQm
IGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQorU3Ry
aW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3Ry
aW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIGNlbnRlclRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVu
Y2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZv
bnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQorU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmco
c3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91
bmRpbmdIYWNrcyk7CiB9CiAKLWZsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBl
bmFibGVSb3VuZGluZ0hhY2tzKQorZmxvYXQgU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aChjb25zdCBT
dHJpbmcmIHN0cmluZywgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiBzdHJpbmdXaWR0aChm
b250LCBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIHN0cmluZy5s
ZW5ndGgoKSwgIWVuYWJsZVJvdW5kaW5nSGFja3MpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgs
IGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGlu
Z0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZs
b2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9y
OjpjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91
bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
LCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVu
Y2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVy
LCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNp
cywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVu
Y2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91
bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
LCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVu
Y2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIs
ICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lz
LCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5j
YXRvcjo6bGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6
OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0
ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlciwgIWVu
YWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodENsaXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lk
dGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3Vu
ZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpyaWdodENsaXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3Qg
ZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2Vy
dEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJl
dHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb0No
YXJhY3RlckJ1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxk
SW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJp
bmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZElu
c2VydEVsbGlwc2lzLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBh
bHdheXNUcnVuY2F0ZSkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZChj
b25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxvYXQgY3VzdG9tVHJ1
bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKIHsKICAgICByZXR1cm4g
dHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9Xb3JkQnVm
ZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxp
cHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1bmNhdGUpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1
bmNhdG9yLmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMyArMzMsMjMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIEZvbnQ7Ci0gICAgCi0g
ICAgY2xhc3MgU3RyaW5nVHJ1bmNhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gRW5h
YmxlUm91bmRpbmdIYWNrc09yTm90IHsgRGlzYWJsZVJvdW5kaW5nSGFja3MsIEVuYWJsZVJvdW5k
aW5nSGFja3MgfTsKLQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNlbnRl
clRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5h
YmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBE
aXNhYmxlUm91bmRpbmdIYWNrcyk7Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0
cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29s
IHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1l
bnRXaWR0aCA9IDApOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0
VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAw
KTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBsZWZ0VHJ1bmNhdGUoY29u
c3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hh
Y2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9
IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb0NoYXJhY3Rlcihjb25zdCBT
dHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NP
ck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1
ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOwotICAgICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJpbmcmLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxv
YXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBm
YWxzZSk7CitjbGFzcyBGb250Q2FzY2FkZTsKKworY2xhc3MgU3RyaW5nVHJ1bmNhdG9yIHsKK3B1
YmxpYzoKKyAgICBlbnVtIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGlu
Z0hhY2tzLCBFbmFibGVSb3VuZGluZ0hhY2tzIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgU3RyaW5nIGNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3Vu
ZGluZ0hhY2tzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5h
YmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9h
dCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFN0cmluZyBsZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0
V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmlu
ZyByaWdodENsaXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRX
aWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5n
IHJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9u
dENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25F
bGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFsc2UpOwogCi0gICAgICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25zdCBG
b250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwot
ICAgIH07CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IHdpZHRoKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJs
ZVJvdW5kaW5nSGFja3MpOworfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250
Q2FzY2FkZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEdseXBoQnVmZmVyOwogY2xh
c3MgR2x5cGhUb1BhdGhUcmFuc2xhdG9yOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB+UmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNv
bnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9y
LCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYg
bm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0
b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVy
LCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5n
Q2FjaGUpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1
biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5h
bWUpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25z
dCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9t
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRo
VHJhbnNsYXRvcj4gY3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnRE
YXRhJiwgY29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250
KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cywgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMsIGJvb2wgZm9yVGV4
dEVtcGhhc2lzKQorV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2Fk
ZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRl
eHRFbXBoYXNpcykKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwg
bV9jdXJyZW50Q2hhcmFjdGVyKDApCkBAIC01Nyw3ICs1Nyw3IEBAIFdpZHRoSXRlcmF0b3I6Oldp
ZHRoSXRlcmF0b3IoY29uc3QgRm9udCoKICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eSA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1faXNB
ZnRlckV4cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5s
dHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhw
YW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1fcnVuLmFsbG93c1Ry
YWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
LS07CiAKQEAgLTIyOSw5ICsyMjksOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUluCiAgICAgICAgICAgICBpZiAod2lkdGggJiYgbV9mb250LT5sZXR0ZXJTcGFjaW5n
KCkpCiAgICAgICAgICAgICAgICAgd2lkdGggKz0gbV9mb250LT5sZXR0ZXJTcGFjaW5nKCk7CiAK
LSAgICAgICAgICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Ojpj
YW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwotICAgICAgICAgICAgYm9v
bCB0cmVhdEFzU3BhY2UgPSBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKTsKLSAgICAgICAg
ICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udDo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgeworICAgICAgICAgICAgc3RhdGlj
IGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91
bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOworICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3Bh
Y2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBp
ZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnRDYXNjYWRl
Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBl
eHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAgICAgICAgICAgIGlmICht
X2V4cGFuc2lvbikgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lv
biA9IG1fZXhwYW5zaW9uOwpAQCAtMjY4LDkgKzI2OCwxMCBAQCBpbmxpbmUgdW5zaWduZWQgV2lk
dGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAgICAgbV9pc0FmdGVyRXhwYW5zaW9u
ID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNm
b3JtcygpICYmIGdseXBoQnVmZmVyICYmIEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQor
ICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpICYmIGdseXBoQnVmZmVyICYm
IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgY2hh
cmFjdGVyc1RyZWF0ZWRBc1NwYWNlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+
c2l6ZSgpLAogICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVh
dGVkQXNTcGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhC
dWZmZXItPmFkdmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkud2lkdGgoKSA6IDAsIHdp
ZHRoKSkpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRz
KSB7CiAgICAgICAgICAgICBib3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgp
OwpAQCAtMjc4LDcgKzI3OSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZh
bmNlSW4KICAgICAgICAgICAgICAgICBtX2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZs
b2F0PigwLCAtYm91bmRzLngoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9mb3JUZXh0
RW1waGFzaXMgJiYgIUZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoY2hhcmFjdGVyKSkKKyAg
ICAgICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzICYmICFGb250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhjaGFyYWN0ZXIpKQogICAgICAgICAgICAgZ2x5cGggPSAwOwogCiAgICAgICAg
IC8vIEFkdmFuY2UgcGFzdCB0aGUgY2hhcmFjdGVyIHdlIGp1c3QgZGVhbHQgd2l0aC4KQEAgLTI4
OCw3ICsyODksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAK
ICAgICAgICAgLy8gRm9yY2UgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIHRvIGRldGVybWluZSB3
b3JkIGJvdW5kYXJpZXMgZm9yIHRoZSByb3VuZGluZyBoYWNrCiAgICAgICAgIC8vIHRvIGJlIGlu
dGVnZXIgd2lkdGgsIHNvIGZvbGxvd2luZyB3b3JkcyB3aWxsIHN0YXJ0IG9uIGFuIGludGVnZXIg
Ym91bmRhcnkuCi0gICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnQ6
OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHsKKyAgICAgICAgaWYgKG1fcnVu
LmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFj
dGVyKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIHdpZHRoID0gY2VpbGYod2lkdGgpOwogCiAg
ICAgICAgICAgICAvLyBTaW5jZSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nIGNhbiBsb3NlIHByZWNp
c2lvbiBpZiB3ZSBpbmNsdWRlIG1lYXN1cmVtZW50cyBmb3IKQEAgLTMwMSw3ICszMDIsNyBAQCBp
bmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEg
InJvdW5kaW5nIGhhY2sgY2hhcmFjdGVyIiwgaWYgc28sIGFkanVzdAogICAgICAgICAgICAgLy8g
d2lkdGggc28gdGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4gaW50ZWdlciBi
b3VuZGFyeS4KLSAgICAgICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSkgPCBt
X3J1bi5sZW5ndGgoKSAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcigqKHRleHRJdGVy
YXRvci5jaGFyYWN0ZXJzKCkpKSkKKyAgICAgICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91
bmRpbmcoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFy
YWN0ZXIoKSkgPCBtX3J1bi5sZW5ndGgoKSAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIoKih0ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpKSkpCiAgICAgICAgICAgICAgICAg
fHwgKG1fcnVuLmFwcGx5UnVuUm91bmRpbmcoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4
dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSkgPj0gbV9ydW4ubGVuZ3RoKCkpKSB7CiAgICAg
ICAgICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IHdpZHRoU2luY2VMYXN0Um91bmRpbmcgKyB3
aWR0aDsKICAgICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nID0gY2VpbGYodG90
YWxXaWR0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIy
LDcgQEAKICNpZm5kZWYgV2lkdGhJdGVyYXRvcl9oCiAjZGVmaW5lIFdpZHRoSXRlcmF0b3JfaAog
Ci0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
U1ZHR2x5cGguaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250
OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNzIFNpbXBsZUZv
bnREYXRhOwogY2xhc3MgVGV4dFJ1bjsKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IEdseXBoRGF0
YTsKIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CisgICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29s
IGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZh
bHNlKTsKIAogICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAg
IGJvb2wgYWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+
JiBhcmFiaWNGb3JtcygpIHsgcmV0dXJuIG1fYXJhYmljRm9ybXM7IH0KICNlbmRpZgogCi0gICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnQmIGZvbnQp
CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250KQogICAgIHsKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogICAgICAgICBpZiAo
IWZvbnQuaXNQcmludGVyRm9udCgpKQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
ICAgICB9CiAKLSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUq
IG1fZm9udDsKIAogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHJl
dmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9G
b250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2ltcG9y
dCAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgotI2ltcG9ydCAi
Rm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lSU9T
LmgiCiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVG
b250RGF0YUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMu
aCIKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5oIgogI2ltcG9y
dCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERl
c2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJGb250U2VydmljZXNJT1MuaCIKICNpbXBvcnQgPENvcmVU
ZXh0L0NvcmVUZXh0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
bmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCkBAIC00MywxMyArNDMsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBUZXh0TGF5b3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc05lZWRlZChS
ZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250KQorICAgIHN0YXRpYyBib29sIGlzTmVl
ZGVkKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIHsKICAg
ICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBm
b250LCB0ZXh0LCB0ZXh0LT5zdHlsZSgpKTsKLSAgICAgICAgcmV0dXJuIGZvbnQuY29kZVBhdGgo
cnVuKSA9PSBGb250OjpDb21wbGV4OworICAgICAgICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4p
ID09IEZvbnRDYXNjYWRlOjpDb21wbGV4OwogICAgIH0KIAotICAgIFRleHRMYXlvdXQoUmVuZGVy
VGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBvcykKKyAgICBUZXh0TGF5b3V0
KFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zKQog
ICAgICAgICA6IG1fZm9udChmb250KQogICAgICAgICAsIG1fcnVuKGNvbnN0cnVjdFRleHRSdW4o
dGV4dCwgZm9udCwgeFBvcykpCiAgICAgICAgICwgbV9jb250cm9sbGVyKHN0ZDo6bWFrZV91bmlx
dWU8Q29tcGxleFRleHRDb250cm9sbGVyPigmbV9mb250LCBtX3J1biwgdHJ1ZSkpCkBAIC02MCw3
ICs2MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShm
cm9tLCAwLCBCeVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQgYmVm
b3JlV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaWYgKG1f
Zm9udC53b3JkU3BhY2luZygpICYmIGZyb20gJiYgRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zy
b21dKSkKKyAgICAgICAgaWYgKG1fZm9udC53b3JkU3BhY2luZygpICYmIGZyb20gJiYgRm9udENh
c2NhZGU6OnRyZWF0QXNTcGFjZShtX3J1bltmcm9tXSkpCiAgICAgICAgICAgICBiZWZvcmVXaWR0
aCArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNl
KGZyb20gKyBsZW4sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBm
bG9hdCBhZnRlcldpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7CkBAIC02OCw3
ICs2OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBmbG9h
dCB4UG9zKQorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyVGV4dCog
dGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgewogICAgICAg
ICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQs
IHRleHQsIHRleHQtPnN0eWxlKCkpOwogICAgICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0
ZXh0LT50ZXh0TGVuZ3RoKCkpOwpAQCAtNzgsMjUgKzc4LDI1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBydW47CiAgICAgfQogCi0gICAgLy8gQ29tcGxleFRleHRDb250cm9sbGVyIGhhcyBv
bmx5IHJlZmVyZW5jZXMgdG8gaXRzIEZvbnQgYW5kIFRleHRSdW4gc28gdGhleSBtdXN0IGJlIGtl
cHQgYWxpdmUgaGVyZS4KLSAgICBGb250IG1fZm9udDsKKyAgICAvLyBDb21wbGV4VGV4dENvbnRy
b2xsZXIgaGFzIG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9udENhc2NhZGUgYW5kIFRleHRSdW4g
c28gdGhleSBtdXN0IGJlIGtlcHQgYWxpdmUgaGVyZS4KKyAgICBGb250Q2FzY2FkZSBtX2ZvbnQ7
CiAgICAgVGV4dFJ1biBtX3J1bjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGxleFRleHRDb250
cm9sbGVyPiBtX2NvbnRyb2xsZXI7CiB9OwogCi1QYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnQ6
OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNl
V2hpdGVTcGFjZSkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNy
ZWF0ZUxheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hp
dGVTcGFjZSkgY29uc3QKIHsKICAgICBpZiAoIWNvbGxhcHNlV2hpdGVTcGFjZSB8fCAhVGV4dExh
eW91dDo6aXNOZWVkZWQodGV4dCwgKnRoaXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHRMYXlvdXQodGV4dCwgKnRoaXMsIHhQb3MpKTsKIH0K
IAotdm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCogbGF5b3V0KQordm9pZCBGb250
Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqIGxheW91dCkKIHsKICAgICBkZWxldGUg
bGF5b3V0OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91
dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMpCiB7CiAgICAgcmV0dXJuIGxheW91dC53aWR0aChmcm9tLCBs
ZW4sIGZhbGxiYWNrRm9udHMpOwogfQpAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbmxpbmUg
Q0dGbG9hdCBjZWlsQ0dGbG9hdChDR0Zsb2EKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9h
dD4oY2VpbChmKSk7CiB9CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250
cm9sbGVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFz
aXMpCiAgICAgOiBtX2ZvbnQoKmZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2lzTFRS
T25seSh0cnVlKQpAQCAtMTQ0LDcgKzE0NCw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRDb250cm8KICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1fYWZ0ZXJFeHBhbnNp
b247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Ojpl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBMVFIg
OiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9y
dW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CiAg
ICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFu
c2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwogCkBAIC02
MTUsNyArNjE1LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21wbGV4VGV4
dFJ1bnNbciArIDFdLT5jaGFyYWN0ZXJzKCkgKyBtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmlu
ZGV4QXQoMCkpOwogCi0gICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnQ6OnRyZWF0
QXNTcGFjZShjaCk7CisgICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRl
Ojp0cmVhdEFzU3BhY2UoY2gpOwogICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNT
cGFjZSA/IGZvbnREYXRhLnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAgICAgIENH
U2l6ZSBhZHZhbmNlID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRoLCBhZHZh
bmNlc1tpXS5oZWlnaHQpIDogYWR2YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtNjI1
LDcgKzYyNSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKIAog
ICAgICAgICAgICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCiAgICAgICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aChmb250RGF0YSwgbV9ydW4u
dGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENv
bW1pdCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2Uo
Y2gpICYmICF0cmVhdEFzU3BhY2UpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKEZvbnRDYXNjYWRl
Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAg
ICAgICAgICBhZHZhbmNlLndpZHRoID0gMDsKICAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnRE
YXRhLnNwYWNlR2x5cGgoKTsKICAgICAgICAgICAgIH0KQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2Uud2lkdGggKz0gbV9mb250LmxldHRlclNwYWNpbmcoKTsKIAogICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNo
KSkgeworICAgICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgRm9udENhc2NhZGU6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3Ry
aWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9u
IG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhw
YW5zaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lv
biA9IG1fZXhwYW5zaW9uOwpAQCAtNjg1LDEyICs2ODUsMTMgQEAgdm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgLy8gV2UgYWRqdXN0IHRoZSB3aWR0
aCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSAid29yZCIgdG8gZW5zdXJlIGFuIGludGVnZXIg
d2lkdGguIAogICAgICAgICAgICAgLy8gRm9yY2UgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIHRv
IGRldGVybWluZSB3b3JkIGJvdW5kYXJpZXMgZm9yIHRoZSByb3VuZGluZyBoYWNrIAogICAgICAg
ICAgICAgLy8gdG8gYmUgaW50ZWdlciB3aWR0aCwgc28gdGhlIGZvbGxvd2luZyB3b3JkcyB3aWxs
IHN0YXJ0IG9uIGFuIGludGVnZXIgYm91bmRhcnkuIAotICAgICAgICAgICAgaWYgKG1fcnVuLmFw
cGx5V29yZFJvdW5kaW5nKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoY2gpKSAK
KyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRl
Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaCkpIAogICAgICAgICAgICAgICAgIGFkdmFuY2Uu
d2lkdGggPSBjZWlsQ0dGbG9hdChhZHZhbmNlLndpZHRoKTsgCiAKICAgICAgICAgICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSAicm91bmRpbmcgaGFjayBjaGFy
YWN0ZXIiLCBpZiBzbywgYWRqdXN0IHRoZSAKLSAgICAgICAgICAgIC8vIHdpZHRoIHNvIHRoYXQg
dGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91bmRhcnkuIAotICAg
ICAgICAgICAgaWYgKChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmICFsYXN0R2x5cGggJiYg
Rm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIobmV4dENoKSkgfHwgKG1fcnVuLmFwcGx5UnVu
Um91bmRpbmcoKSAmJiBsYXN0R2x5cGgpKSB7IAorICAgICAgICAgICAgLy8gd2lkdGggc28gdGhh
dCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4KKyAg
ICAgICAgICAgIGJvb2wgbmVlZHNSb3VuZGluZ0ZvckNoYXJhY3RlciA9IG1fcnVuLmFwcGx5V29y
ZFJvdW5kaW5nKCkgJiYgIWxhc3RHbHlwaCAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIobmV4dENoKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JvdW5kaW5nRm9yQ2hhcmFj
dGVyIHx8IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgbGFzdEdseXBoKSkgewogICAgICAg
ICAgICAgICAgIENHRmxvYXQgdG90YWxXaWR0aCA9IHdpZHRoU2luY2VMYXN0Q29tbWl0ICsgYWR2
YW5jZS53aWR0aDsgCiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RDb21taXQgPSBjZWls
Q0dGbG9hdCh0b3RhbFdpZHRoKTsgCiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBleHRyYVdpZHRo
ID0gd2lkdGhTaW5jZUxhc3RDb21taXQgLSB0b3RhbFdpZHRoOyAKQEAgLTcwOSw3ICs3MTAsNyBA
QCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAg
ICAgd2lkdGhTaW5jZUxhc3RDb21taXQgKz0gYWR2YW5jZS53aWR0aDsgCiAKICAgICAgICAgICAg
IC8vIEZJWE1FOiBDb21iaW5pbmcgbWFya3Mgc2hvdWxkIHJlY2VpdmUgYSB0ZXh0IGVtcGhhc2lz
IG1hcmsgaWYgdGhleSBhcmUgY29tYmluZSB3aXRoIGEgc3BhY2UuCi0gICAgICAgICAgICBpZiAo
bV9mb3JUZXh0RW1waGFzaXMgJiYgKCFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoKSB8
fCAoVV9HRVRfR0NfTUFTSyhjaCkgJiBVX0dDX01fTUFTSykpKQorICAgICAgICAgICAgaWYgKG1f
Zm9yVGV4dEVtcGhhc2lzICYmICghRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMo
Y2gpIHx8IChVX0dFVF9HQ19NQVNLKGNoKSAmIFVfR0NfTV9NQVNLKSkpCiAgICAgICAgICAgICAg
ICAgZ2x5cGggPSAwOwogCiAgICAgICAgICAgICBhZHZhbmNlLmhlaWdodCAqPSAtMTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAq
IENUTGluZVJlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNzIEZv
bnRDYXNjYWRlOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBUZXh0UnVuOwogCkBAIC01
MCw3ICs1MCw3IEBAIGVudW0gR2x5cGhJdGVyYXRpb25TdHlsZSB7IEluY2x1ZGVQYXJ0aWEKIC8v
IGNvbXBsZXggc2NyaXB0cyBvbiBPUyBYLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsK
IHB1YmxpYzoKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCosIGNvbnN0IFRl
eHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4
dEVtcGhhc2lzID0gZmFsc2UpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250
Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0
aW9uID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBh
bmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCiAgICAgdm9pZCBh
ZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxl
ID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDApOwpAQCAtMTM4LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPHVuc2lnbmVkLCAxNj4gbV9ydW5JbmRpY2VzOwogICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+
IG1fZ2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXg7CiAKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7
CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1
bjsKICAgICBib29sIG1faXNMVFJPbmx5OwogICAgIGJvb2wgbV9tYXlVc2VOYXR1cmFsV3JpdGlu
Z0RpcmVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgogCiAjaW5j
bHVkZSAiQ29yZVRleHRTUEkuaCIKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCkBAIC00MCwxOSArNDAsMTkgQEAK
IAogQGludGVyZmFjZSBXZWJDYXNjYWRlTGlzdCA6IE5TQXJyYXkgewogICAgIEBwcml2YXRlCi0g
ICAgY29uc3QgV2ViQ29yZTo6Rm9udCogX2ZvbnQ7CisgICAgY29uc3QgV2ViQ29yZTo6Rm9udENh
c2NhZGUqIF9mb250OwogICAgIFVDaGFyMzIgX2NoYXJhY3RlcjsKICAgICBOU1VJbnRlZ2VyIF9j
b3VudDsKICAgICBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+LCAxNj4gX2Zv
bnREZXNjcmlwdG9yczsKIH0KIAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpG
b250Kilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXI7CistIChpZClpbml0V2l0aEZv
bnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNjYWRlKilmb250IGNoYXJhY3RlcjooVUNoYXIzMilj
aGFyYWN0ZXI7CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkNhc2NhZGVMaXN0CiAKLS0g
KGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udCopZm9udCBjaGFyYWN0ZXI6KFVD
aGFyMzIpY2hhcmFjdGVyCistIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnRD
YXNjYWRlKilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXIKIHsKICAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTYwLDcgKzYwLDcg
QEAgLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250KgogICAgIF9mb250ID0g
Zm9udDsKICAgICBfY2hhcmFjdGVyID0gY2hhcmFjdGVyOwogCi0gICAgLy8gQnkgdGhlIHRpbWUg
YSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udCBoYXMgYWxyZWFkeSBiZWVuIGFza2Vk
IHRvIHJlYWxpemUgYWxsIG9mIGl0cworICAgIC8vIEJ5IHRoZSB0aW1lIGEgV2ViQ2FzY2FkZUxp
c3QgaXMgdXNlZCwgdGhlIEZvbnRDYXNjYWRlIGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVh
bGl6ZSBhbGwgb2YgaXRzCiAgICAgLy8gRm9udERhdGEsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBo
aXQgdGhlIEZvbnRDYWNoZS4KICAgICB3aGlsZSAoIV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9j
b3VudCkuaXNOdWxsKCkpCiAgICAgICAgIF9jb3VudCsrOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lv
biAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENh
Y2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaWYgIVBMQVRGT1JN
KElPUykKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisj
aW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBv
cnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbXBvcnQgIk5TRm9udFNQSS5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
b21wbGV4VGV4dE1hYy5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw3ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRl
eHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKICAgICBjb250cm9sbGVyLmFkdmFu
Y2UoZnJvbSk7CkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXgKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZv
cmVXaWR0aCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QK
K2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAg
ZmxvYXQgaW5pdGlhbEFkdmFuY2U7CiAKQEAgLTc1LDcgKzc1LDcgQEAgZmxvYXQgRm9udDo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0K
IAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVy
IGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4K
ICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTkzLDcgKzkzLDcgQEAgZmxvYXQgRm9u
dDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50Lngo
KSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBp
bml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBm
cm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZQogICAgIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9p
bnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi1mbG9hdCBGb250Ojpm
bG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENv
bXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tG
b250cyk7CiAgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKQEAgLTExNiwxMyArMTE2LDEzIEBAIGZs
b2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb24KICAgICByZXR1cm4gY29udHJv
bGxlci50b3RhbFdpZHRoKCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhp
cywgcnVuKTsKICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNs
dWRlUGFydGlhbEdseXBocyk7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Ojpmb250
RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK2NvbnN0IFNp
bXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFW
YXJpYW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAg
IHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKIAogI2ltcG9ydCAiQ29yZUdy
YXBoaWNzU1BJLmgiCiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgpAQCAtNTgsMTIgKzU4LDEyIEBA
IFNPRlRfTElOSyhVSUtpdCwgX1VJS2l0R2V0VGV4dEVmZmVjdHNDYXQKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRl
eHQoKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFy
b3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE5NSw3ICsxOTUsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29u
CiB9CiAjZW5kaWYKIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hv
clBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3JQb2ludCkgY29uc3QKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0
Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5z
aXplKCkpCkBAIC01MjYsNyArNTI2LDcgQEAgdm9pZCBNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OmFkdmFuY2UoKQogICAgIH0gd2hpbGUgKG1fZm9udERhdGEtPmlzU1ZHRm9udCgpICYmIG1faW5k
ZXggPCBtX2dseXBoQnVmZmVyLnNpemUoKSk7CiB9CiAKLURhc2hBcnJheSBGb250OjpkYXNoZXNG
b3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdAorRGFz
aEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJl
Y3QmIGxpbmVFeHRlbnRzKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygp
KQogICAgICAgICByZXR1cm4gRGFzaEFycmF5KCk7CkBAIC01MzQsNyArNTM0LDcgQEAgRGFzaEFy
cmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaQogICAgIEdseXBoQnVmZmVyIGdseXBo
QnVmZmVyOwogICAgIGdseXBoQnVmZmVyLnNhdmVPZmZzZXRzSW5TdHJpbmcoKTsKICAgICBmbG9h
dCBkZWx0YVg7Ci0gICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gRm9udDo6Q29tcGxleCkKKyAgICBp
ZiAoY29kZVBhdGgocnVuKSAhPSBGb250Q2FzY2FkZTo6Q29tcGxleCkKICAgICAgICAgZGVsdGFY
ID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwgMCwgcnVuLmxlbmd0aCgp
LCBnbHlwaEJ1ZmZlcik7CiAgICAgZWxzZQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgMCwgcnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7
CkBAIC01OTAsNyArNTkwLDcgQEAgRGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaQogfQogI2VuZGlmCiAKLWJvb2wgRm9udDo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250
KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgp
IGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID4gMTA5MAogICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRh
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR2x5cGhQYWdlTWFjLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2luY2x1ZGUg
IkNvcmVUZXh0U1BJLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGlj
IGJvb2wgc2hvdWxkVXNlQ29yZVRleHQoY29uc3QgVUNoYQogICAgIGlmIChmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkgIT0gUmVndWxhcldpZHRoIHx8IGZvbnREYXRhLT5o
YXNWZXJ0aWNhbEdseXBocygpKSB7CiAgICAgICAgIC8vIElkZW9ncmFwaHMgZG9uJ3QgaGF2ZSBh
IHZlcnRpY2FsIHZhcmlhbnQgb3Igd2lkdGggdmFyaWFudHMuCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCFGb250
Ojppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQorICAgICAgICAgICAgaWYgKCFGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDE3
ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2ltcG9ydCAiQ29y
ZUdyYXBoaWNzU1BJLmgiCiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgogI2ltcG9ydCAiRmxvYXRS
ZWN0LmgiCi0jaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIlNo
YXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCShyZXZpc2lvbiAxNzg0MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBv
cnQgIkN1cnNvci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNp
bXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFw
aGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNp
bXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWQu
aCIKICNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgIkJpdG1hcElt
YWdlLmgiCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNp
bXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBv
cnQgIkZvbnRTZWxlY3Rvci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xNTcs
MTAgKzE1NywxMCBAQCBjb25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CiAKIC8v
IEZJWE1FIC0gd2Ugc2hvdWxkIG1vdmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5n
IGV4dHJhcyB0byBXZWJDb3JlCiAgICAgCi1zdGF0aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNG
b250ICpmb250KQorc3RhdGljIEZvbnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZv
bnQpCiB7CiAgICAgc3RhdGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FzY2FkZSwgY3VycmVudFJlbmRlcmVyLCAo
KSk7CiAgICAgCiAgICAgaWYgKFtmb250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQogICAgICAgICBy
ZXR1cm4gY3VycmVudFJlbmRlcmVyOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBGb250JiBm
b250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQKICAgICBjdXJyZW50Rm9udCA9IGZvbnQ7CiAgICAg
Q0ZSZXRhaW4oY3VycmVudEZvbnQpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgZihmb250LCBbZm9u
dCBwb2ludFNpemVdKTsKLSAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250KGYsICFbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgIGN1cnJl
bnRSZW5kZXJlciA9IEZvbnRDYXNjYWRlKGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7
CiB9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhXaXRoRm9udChOU1N0
cmluZyAqc3RyCiAgICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogICAg
IAogICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewot
ICAgICAgICBGb250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9p
bnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdU
b1NjcmVlbl0pOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1E
YXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVy
LmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAg
ICAgICAgIHJldHVybiB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpAQCAtMjI0LDcgKzIyNCw3IEBA
IHN0YXRpYyB2b2lkIGRyYXdBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcKICAgICAgICAgaWYgKCFm
bGlwcGVkKQogICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRh
KGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0s
IEFudGlhbGlhc2VkKTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRm
b3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9T
Y3JlZW5dLCBBbnRpYWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCks
IGxlbmd0aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDEzICs0MSwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQ
b3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGb250
RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9u
dChDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dDsKICAgICAKLSAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQs
IGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7
Ci0gICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwg
Y29uc3QgRm9udCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3Ro
U2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBM
ZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhT
aXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBm
bG9hdCB6b29tRmFjdG9yKSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQ
YWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRC
b3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRy
b2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21l
ZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29u
dHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3Ro
Qm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVu
Z3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFy
dCkgY29uc3QgeyByZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw3ICsxNDksNyBAQCBUaGVtZSogcGxhdGZvcm1UaGVtZSgpCiAKIC8vIEhlbHBlciBmdW5j
dGlvbnMgdXNlZCBieSBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgogCi1zdGF0
aWMgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0
YXRpYyBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCkKIHsKICAgICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlmIChm
b250U2l6ZSA+PSAxNikKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgTGVuZ3RoU2l6ZSBzaXpl
RnJvbU5TQ29udHJvbFNpemUoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIExlbmd0
aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpv
b21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4m
IHNpemVzKQorc3RhdGljIExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBj
b25zdCBzdGQ6OmFycmF5PEludFNpemUsIDM+JiBzaXplcykKIHsKICAgICByZXR1cm4gc2l6ZUZy
b21OU0NvbnRyb2xTaXplKGNvbnRyb2xTaXplRm9yRm9udChmb250KSwgem9vbWVkU2l6ZSwgem9v
bUZhY3Rvciwgc2l6ZXMpOwogfQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQq
IGNoZWNrYm94TWFyZ2lucyhOU0NvbnQKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07
CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBj
b25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExl
bmd0aFNpemUgY2hlY2tib3hTaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5n
dGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcg
dG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAm
JiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtMzIzLDcgKzMy
Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIHJhZGlvTWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1
cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6
ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6
b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQog
ewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhl
biB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0
bygpKQpAQCAtNTkzLDcgKzU5Myw3IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PEludFNpemUs
IDM+JiBzdGUKIAogLy8gV2UgZG9uJ3QgdXNlIGNvbnRyb2xTaXplRm9yRm9udCgpIGZvciBzdGVw
cGVycyBiZWNhdXNlIHRoZSBzdGVwcGVyIGhlaWdodAogLy8gc2hvdWxkIGJlIGVxdWFsIHRvIG9y
IGxlc3MgdGhhbiB0aGUgY29ycmVzcG9uZGluZyB0ZXh0IGZpZWxkIGhlaWdodCwKLXN0YXRpYyBO
U0NvbnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkK
K3N0YXRpYyBOU0NvbnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQpCiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsK
ICAgICBpZiAoZm9udFNpemUgPj0gMTgpCkBAIC02NzMsNyArNjczLDcgQEAgaW50IFRoZW1lTWFj
OjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbkFkanVzdG1lbnQocGFydCk7CiB9CiAKLUZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKK0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6IHsKQEAgLTY5MSw3ICs2OTEsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRy
b2xGb250KENvCiAgICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShD
b250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29u
dHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgpAQCAtNzEwLDcgKzcx
MCw3IEBAIExlbmd0aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2wKICAgICB9CiB9
CiAKLUxlbmd0aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6
ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAo
cGFydCkgewogICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MjcsNyArNzI3LDcg
QEAgTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKAogICAgIH0KIH0KIAot
TGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBh
cnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAg
Y2FzZSBTcXVhcmVCdXR0b25QYXJ0OgpAQCAtNzM5LDcgKzczOSw3IEBAIExlbmd0aEJveCBUaGVt
ZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1h
Yzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29u
c3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhC
b3ggVGhlbWVNYWM6OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3Rv
cikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9u
UGFydDogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIK
ICNpbXBvcnQgIkN1cnNvci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQu
aCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAi
RnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgJKHJldmlzaW9uIDE3ODQx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYg
UExBVEZPUk0oSU9TKQotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogI2VuZGlmCiAK
IGNsYXNzIExvY2FsZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9M
b2NhbGl6ZWREYXRlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gK
IAogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKIGNsYXNzIExvY2FsaXplZERhdGVDYWNoZSB7CiBwdWJsaWM6CiAg
ICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6
VHlwZSk7Ci0gICAgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6
OlR5cGUsIGNvbnN0IEZvbnQmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOworICAgIGZsb2F0
IG1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50Jik7CiAgICAgdm9pZCBsb2NhbGVDaGFu
Z2VkKCk7CiAKIHByaXZhdGU6CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgZmxvYXQ+IERhdGVUeXBlTWF4V2lkdGhNYXA7CiAgICAgRGF0ZVR5cGVG
b3JtYXR0ZXJNYXAgbV9mb3JtYXR0ZXJNYXA7CiAgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21h
eFdpZHRoTWFwOwotICAgIEZvbnQgbV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKIAog
ICAgIGZyaWVuZCBMb2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOwogICAg
IGZyaWVuZCBOZXZlckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNo
ZS5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9p
b3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCi0j
aW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiVGV4dFJ1
bi5oIgogI2ltcG9ydCA8bWF0aC5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTg0
LDcgKzg0LDcgQEAgTlNEYXRlRm9ybWF0dGVyICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmZvcgogICAg
IHJldHVybiBkYXRlRm9ybWF0dGVyOwogfQogCi1mbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1h
eGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50JiBtZWFzdXJlcikKK2Zsb2F0IExvY2Fs
aXplZERhdGVDYWNoZTo6bWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5
cGUgdHlwZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50
JiBtZWFzdXJlcikKIHsKICAgICBpbnQga2V5ID0gc3RhdGljX2Nhc3Q8aW50Pih0eXBlKTsKICAg
ICBpZiAobV9mb250ID09IGZvbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lu
Y2x1ZGUgIkVsbGlwc2lzQm94LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnQKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBG
b250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgewogICAgICAgICBwYWludFNlbGVjdGlvbihj
b250ZXh0LCBwYWludE9mZnNldCwgbGluZVN0eWxlLCBmb250KTsKIApAQCAtMTEwLDcgKzExMCw3
IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50TWFya3VwQm94KFBhaW50SW4KIEludFJlY3QgRWxs
aXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5l
U3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0
eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250
Q2FzY2FkZSgpOwogICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByb290KCk7CiAg
ICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJl
Y3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0g
TGF5b3V0UmVjdCh4KCksIHkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVj
ZWRpbmdCbG9jaygpLCAwLCByb290Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2Vk
aW5nQmxvY2soKSk7CkBAIC0xMTksNyArMTE5LDcgQEAgSW50UmVjdCBFbGxpcHNpc0JveDo6c2Vs
ZWN0aW9uUmVjdCgpCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7
CiB9CiAKLXZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVj
dGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkK
IHsKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9IGJsb2NrRmxvdygpLnNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJ
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YWludE1hcmt1cEJveChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBjb25zdCBSZW5kZXJT
dHlsZSYpOwogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7IH0KLSAgICB2b2lkIHBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENh
c2NhZGUmKTsKICAgICBJbmxpbmVCb3gqIG1hcmt1cEJveCgpIGNvbnN0OwogCiAgICAgYm9vbCBt
X3Nob3VsZFBhaW50TWFya3VwQm94OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtMTIyLDcgKzEyMiw3
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKElubGluZUJveCoKICAgICAgICAgICAg
IHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5iZWhhdmVzTGlrZVRleHQoKSkgewogICAgICAg
ICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLmlzTGluZUJyZWFrKCkgfHwgY2hpbGQtPnJlbmRl
cmVyKCkucGFyZW50KCkgIT0gJnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBh
cmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRB
bmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFwYXJlbnRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRp
Y2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRN
ZXRyaWNzKCkpCiAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQo
KSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKQogICAgICAgICAgICAgICAgICAgICB8fCAocGFy
ZW50U3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3go
KSkgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUpCiAgICAgICAgICAg
ICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNl
bGluZSA9IHRydWU7CkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRU
b0xpbmUoSW5saW5lQm94KgogICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkRmxvd0JveCA9IGRv
d25jYXN0PElubGluZUZsb3dCb3g+KCpjaGlsZCk7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
dGhlIGNoaWxkJ3MgYml0LCBhbmQgdGhlbiBhbHNvIGNoZWNrIGZvciBkaWZmZXJlbmNlcyBpbiBm
b250LCBsaW5lLWhlaWdodCwgdmVydGljYWwtYWxpZ24KICAgICAgICAgICAgICAgICBpZiAoIWNo
aWxkRmxvd0JveC5kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkKLSAg
ICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhh
c0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udCgpLmZvbnRN
ZXRyaWNzKCkpCisgICAgICAgICAgICAgICAgICAgIHx8ICFwYXJlbnRTdHlsZS5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hp
bGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICAgICAgICAg
IHx8IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKQog
ICAgICAgICAgICAgICAgICAgICB8fCAocGFyZW50U3R5bGUudmVydGljYWxBbGlnbigpICE9IEJB
U0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3goKSkgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS5oYXNCb3Jk
ZXIoKSB8fCBjaGlsZFN0eWxlLmhhc1BhZGRpbmcoKSB8fCBjaGlsZFN0eWxlLmhhc1RleHRDb21i
aW5lKCkpCkBAIC0zODgsNyArMzg4LDcgQEAgZmxvYXQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hS
YW5nZUluSW5saQogICAgICAgICAgICAgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCA9IHRleHRCb3gu
cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYmIGlzU3BhY2VPck5ld2xpbmUo
cmVuZGVyVGV4dC5jaGFyYWN0ZXJBdCh0ZXh0Qm94LnN0YXJ0KCkpKSkKLSAgICAgICAgICAgICAg
ICAgICAgbG9naWNhbExlZnQgKz0gdGV4dEJveC5saW5lU3R5bGUoKS5mb250KCkud29yZFNwYWNp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gdGV4dEJveC5saW5lU3R5
bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAgbmVlZHNX
b3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQodGV4
dEJveC5lbmQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGV4dEJveC5zZXRMb2dp
Y2FsTGVmdChsb2dpY2FsTGVmdCk7CkBAIC00NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVGbG93
Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0
aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25V
cHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaGFz
VmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgfHwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCw3ICs0NjAsNyBAQCBib29sIElubGlu
ZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8
SW5saW5lRmxvd0JveD4oKmNoaWxkKS5yZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUodGV4dEJv
eERhdGFNYXApKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGNoaWxkLT5saW5lU3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnRE
YXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gbnVsbHB0
cjsKQEAgLTg3Myw3ICs4NzMsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0
Qm94VmlzCiAKICAgICBib29sIGVtcGhhc2lzTWFya0lzQWJvdmU7CiAgICAgaWYgKGxpbmVTdHls
ZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgJiYgdGV4dEJveC5l
bXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92
ZSkpIHsKLSAgICAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodCA9IGxpbmVTdHlsZS5mb250KCku
ZW1waGFzaXNNYXJrSGVpZ2h0KGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwor
ICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCku
ZW1waGFzaXNNYXJrSGVpZ2h0KGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwog
ICAgICAgICBpZiAoZW1waGFzaXNNYXJrSXNBYm92ZSA9PSAhbGluZVN0eWxlLmlzRmxpcHBlZExp
bmVzV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHRvcEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1p
bih0b3BHbHlwaE92ZXJmbG93LCAtZW1waGFzaXNNYXJrSGVpZ2h0KTsKICAgICAgICAgZWxzZQpA
QCAtODgyLDcgKzg4Miw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hW
aXMKIAogICAgIC8vIElmIGxldHRlci1zcGFjaW5nIGlzIG5lZ2F0aXZlLCB3ZSBzaG91bGQgZmFj
dG9yIHRoYXQgaW50byByaWdodCBsYXlvdXQgb3ZlcmZsb3cuIChFdmVuIGluIFJUTCwgbGV0dGVy
LXNwYWNpbmcgaXMKICAgICAvLyBhcHBsaWVkIHRvIHRoZSByaWdodCwgc28gdGhpcyBpcyBub3Qg
YW4gaXNzdWUgd2l0aCBsZWZ0IG92ZXJmbG93LgotICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBz
dGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5mb250KCkubGV0dGVyU3BhY2luZygpKTsKKyAgICBy
aWdodEdseXBoT3ZlcmZsb3cgLT0gc3RkOjptaW4oMCwgKGludClsaW5lU3R5bGUuZm9udENhc2Nh
ZGUoKS5sZXR0ZXJTcGFjaW5nKCkpOwogCiAgICAgTGF5b3V0VW5pdCB0ZXh0U2hhZG93TG9naWNh
bFRvcDsKICAgICBMYXlvdXRVbml0IHRleHRTaGFkb3dMb2dpY2FsQm90dG9tOwpAQCAtMTUzNCwx
MCArMTUzNCwxMCBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5uCiAg
ICAgICAgICAgICBib29sIGVtcGhhc2lzTWFya0lzQWJvdmU7CiAgICAgICAgICAgICBpZiAoY2hp
bGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYm
IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNB
Ym92ZShjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSkgJiYgZW1waGFzaXNNYXJr
SXNBYm92ZSkgewogICAgICAgICAgICAgICAgIGlmICghY2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVk
TGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0b3BPZkVtcGhh
c2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1w
aGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgICAgIGludCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dp
Y2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdo
dChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChyZXN1bHQsIGFsbG93ZWRQb3NpdGlvbiAtIHRvcE9m
RW1waGFzaXNNYXJrKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsg
Y2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9t
T2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUu
Zm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhh
c2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgo
cmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3NpdGlvbik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTU4MywxMCArMTU4MywxMCBAQCBMYXlvdXRV
bml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFuCiAgICAgICAgICAgICBkb3duY2FzdDxJ
bmxpbmVUZXh0Qm94PigqY2hpbGQpLmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY2hpbGRM
aW5lU3R5bGUsIGVtcGhhc2lzTWFya0lzQWJvdmUpOwogICAgICAgICAgICAgaWYgKGNoaWxkTGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiAhZW1w
aGFzaXNNYXJrSXNBYm92ZSkgewogICAgICAgICAgICAgICAgIGlmICghY2hpbGRMaW5lU3R5bGUu
aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hp
bGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0
RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJv
dHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkTGluZVN0
eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRF
bXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6
bWF4KHJlc3VsdCwgYm90dG9tT2ZFbXBoYXNpc01hcmsgLSBhbGxvd2VkUG9zaXRpb24pOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9w
T2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9u
dCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcE9mRW1waGFzaXNNYXJr
ID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1w
aGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBv
c2l0aW9uIC0gdG9wT2ZFbXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDE0ICsyNDUsMTQgQEAgUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0QgogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotc3Rh
dGljIGNvbnN0IEZvbnQmIGZvbnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlcmVyKQorc3RhdGljIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250VG9V
c2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikK
IHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4
dD4ocmVuZGVyZXIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHRleHRDb21iaW5lUmVuZGVyZXIg
PSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpOwogICAgICAgICBpZiAodGV4
dENvbWJpbmVSZW5kZXJlci5pc0NvbWJpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdGV4dENv
bWJpbmVSZW5kZXJlci50ZXh0Q29tYmluZUZvbnQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0eWxl
LmZvbnQoKTsKKyAgICByZXR1cm4gc3R5bGUuZm9udENhc2NhZGUoKTsKIH0KIAogTGF5b3V0UmVj
dCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5k
UG9zKSBjb25zdApAQCAtMjY2LDcgKzI2Niw3IEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6
bG9jYWxTZWxlY3Rpb24KICAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVj
dGlvblRvcCgpOwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0
aW9uSGVpZ2h0KCk7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxp
bmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCBy
ZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5l
U3R5bGUsIHJlbmRlcmVyKCkpOwogCiAgICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7
CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBvcyA9PSBtX2xlbiAmJiBoYXNIeXBoZW4oKTsK
QEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpCiAgICAgICAgIHNlbGVjdGlvblBhaW50U3R5bGUgPSB0ZXh0UGFpbnRTdHlsZTsKIAogICAg
IC8vIFNldCBvdXIgZm9udC4KLSAgICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVT
dHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9V
c2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKICAgICAvLyAxLiBQYWludCBiYWNrZ3JvdW5kcyBi
ZWhpbmQgdGV4dCBpZiBuZWVkZWQuIEV4YW1wbGVzIG9mIHN1Y2ggYmFja2dyb3VuZHMgaW5jbHVk
ZSBzZWxlY3Rpb24KICAgICAvLyBhbmQgY29tcG9zaXRpb24gdW5kZXJsaW5lcy4KICAgICBpZiAo
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNl
ICE9IFBhaW50UGhhc2VUZXh0Q2xpcCAmJiAhaXNQcmludGluZykgewpAQCAtNjc4LDcgKzY3OCw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoaW4KICAgICBlUG9zID0g
c3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CiB9CiAKLXZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVj
dGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgQ29s
b3IgdGV4dENvbG9yKQogewogI2lmIEVOQUJMRShURVhUX1NFTEVDVElPTikKICAgICBpZiAoY29u
dGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAogI2VuZGlmCiB9CiAKLXZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQogewog
ICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0OwogICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQ
b3MgLSBvZmZzZXQsIDApOwpAQCAtMTA1OCw3ICsxMDU4LDcgQEAgc3RhdGljIEdyYXBoaWNzQ29u
dGV4dDo6RG9jdW1lbnRNYXJrZXJMaQogICAgIH0KIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQ
b2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBt
YXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGJvb2wgZ3JhbW1hcikKIHsKICAgICAvLyBOZXZlciBwcmludCBzcGVsbGluZy9ncmFtbWFyIG1h
cmtlcnMgKDUzMjc4ODcpCiAgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygp
KQpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VyKAogICAgIGNvbnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihGbG9hdFBvaW50
KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCks
IHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci50eXBlKCkpKTsKIH0KIAotdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtl
ciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2
b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFy
a2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpCiB7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rp
b25IZWlnaHQoKTsKIApAQCAtMTE1OSw3ICsxMTU5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRNYXRjaE1hcmtlcgogICAgIH0KIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21w
dXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtl
ciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQordm9pZCBJbmxp
bmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKIHsKICAgICAvLyBSZXBsYWNlbWVudCBtYXJrZXJzIGFyZSBub3QgYWN0dWFs
bHkgZHJhd24sIGJ1dCB0aGVpciByZWN0cyBuZWVkIHRvIGJlIGNvbXB1dGVkIGZvciBoaXQgdGVz
dGluZy4KICAgICBMYXlvdXRVbml0IHRvcCA9IHNlbGVjdGlvblRvcCgpOwpAQCAtMTE3Nyw3ICsx
MTc3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhYwogICAgIG1h
cmtlci5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiB9CiAgICAgCi12b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRE
b2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGJvb2wgYmFja2dyb3VuZCkKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkudGV4dE5vZGUo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgaW50IElubGluZVRleHRC
b3g6Om9mZnNldEZvclBvc2l0aW9uKGZsbwogICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gMCA6IGxlbigpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHls
ZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2Uo
bGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZv
bnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIHJldHVybiBmb250Lm9mZnNldEZv
clBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAt
IGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIApAQCAtMTM0Miw3ICsx
MzQyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaQogICAgICAg
ICByZXR1cm4gbG9naWNhbExlZnQoKTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5
bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNl
KGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBm
b250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKICAgICBpbnQgZnJvbSA9ICFpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSAh
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KQEAgLTEzNTIs
NyArMTM1Miw3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGkKICAg
ICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVj
dGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4u
bHRyKCkpLm1heFgoKTsKIH0KIAotVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5nKiBo
eXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25z
dHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICBBU1NF
UlQocmVuZGVyZXIoKS50ZXh0KCkpOwogCkBAIC0xMzY2LDcgKzEzNjYsNyBAQCBUZXh0UnVuIElu
bGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUsIGZvbnQsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFydFBv
cywgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcik7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6
Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVu
YXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0
VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0
ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJ
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsOCBAQCBwcml2YXRlOgogICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rp
b25IZWlnaHQoKSBjb25zdDsKIAotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIg
PSBudWxscHRyKSBjb25zdDsKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBGb250JiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBT
dHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2Fk
ZSYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OworICAg
IFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0
ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKIAogcHVibGljOgogICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3Qo
eCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQpAQCAtMTQ4LDE3ICsxNDgsMTcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29u
c3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVy
U3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lk
IHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3Jv
dW5kKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250Q2FzY2FkZSYsIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7CisgICAgdm9pZCBwYWlu
dERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBib29sIGJhY2tn
cm91bmQpOwogICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJs
aW5lJik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBUZXh0RGVjb3JhdGlvbiwgVGV4dERl
Y29yYXRpb25TdHlsZSwgY29uc3QgU2hhZG93RGF0YSosIFRleHRQYWludGVyJik7Ci0gICAgdm9p
ZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIENvbG9yIHRleHRDb2xvcik7
Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7Ci0gICAgdm9pZCBwYWludFRleHRN
YXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQm
KTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYs
IENvbG9yIHRleHRDb2xvcik7CisgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1h
cmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBib29sIGdyYW1t
YXIpOworICAgIHZvaWQgcGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYpOwogCi0gICAgdm9pZCBjb21wdXRlUmVj
dEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1l
bnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmKTsKIAogICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjUsNyArMjMyNSw3
IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMZWYKICAgICAgICAgcmV0
dXJuIGxlZnQ7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBU
aGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0g
ICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpLm1heENoYXJXaWR0aCgpOworICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVH
cmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRo
KCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiBsZWZ0OwogCkBAIC0y
MzY1LDcgKzIzNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmln
CiAgICAgICAgIHJldHVybiByaWdodDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNw
YWNpbmcgYXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBh
dCB0aGUgZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hh
cldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5tYXhDaGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJu
IHJpZ2h0OwogCkBAIC0zMDAzLDcgKzMwMDMsNyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKHN0YXJ0aW5nRm9udFNpemUpOwogICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOwogICAgICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHBzZXVkb1N0eWxlLT5m
b250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAg
ICBwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnRDYXNj
YWRlKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAKICAgICAgICAgaW50IGRlc2lyZWRDYXBI
ZWlnaHQgPSAocHNldWRvU3R5bGUtPmluaXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhl
aWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAg
ICAgICBpbnQgYWN0dWFsQ2FwSGVpZ2h0ID0gcHNldWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuY2Fw
SGVpZ2h0KCk7CkBAIC0zMDEyLDcgKzMwMTIsNyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpIC0gMSk7CiAgICAgICAg
ICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSAtMSk7CiAgICAgICAgICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9udERl
c2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBwc2V1ZG9TdHlsZS0+
Zm9udCgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAg
ICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9u
dENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICBhY3R1YWxDYXBIZWlnaHQg
PSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTM2OTMsNyArMzY5Myw3IEBAIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJO
YW1lKCkgY28KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMg
aW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywg
aW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb24pCitzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewog
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IExUUjsKICAgICBib29sIGRpcmVjdGlv
bmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyOwpAQCAtMzcw
OCw3ICszNzA4LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5Jbgog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgVGV4
dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25z
dCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQorc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbiA9IExUUjsKICAgICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRl
cmluZygpID09IFZpc3VhbE9yZGVyOwpAQCAtMzcyNywyNCArMzcyNywyNCBAQCBzdGF0aWMgaW5s
aW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiAgICAgcmV0dXJuIHJ1bjsKIH0KIAotVGV4
dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50
ZXJuYWwoY29udGV4dCwgZm9udCwgY2hhcmFjdGVycywgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9u
KTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
UmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBjb25zdHJ1
Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgY2hhcmFjdGVycywgbGVuZ3RoLCBzdHls
ZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRl
eHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihS
ZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBSZW5k
ZXJUZXh0KiB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBpZiAodGV4dC0+aXM4Qml0KCkpCiAgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hh
cmFjdGVyczgoKSwgdGV4dC0+dGV4dExlbmd0aCgpLCBzdHlsZSwgZXhwYW5zaW9uKTsKICAgICBy
ZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZvbnQsIHRleHQtPmNoYXJh
Y3RlcnMxNigpLCB0ZXh0LT50ZXh0TGVuZ3RoKCksIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1U
ZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6
RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb24pCiB7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSB0ZXh0LT50ZXh0TGVu
Z3RoKCkpOwogICAgIGlmICh0ZXh0LT5pczhCaXQoKSkKQEAgLTM3NTIsNyArMzc1Miw3IEBAIFRl
eHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmUKICAgICByZXR1cm4gY29uc3Ry
dWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZvbnQsIHRleHQtPmNoYXJhY3RlcnMxNigpICsg
b2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitU
ZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlz
aW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIsMjIgKzIwMiwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBvYmotPmlzRmxvYXRpbmcoKSB8fCAob2JqLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAh
b2JqLT5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpICYmICFvYmotPmNvbnRh
aW5lcigpLT5pc1JlbmRlcklubGluZSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBj
b25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lv
bkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZv
cmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3Mp
OwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNv
bnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5kZXJUZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUm
LAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250
ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJT
dHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwog
Ci0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFu
c2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZz
ZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBSZW5k
ZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBj
b25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAor
ICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
LCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9y
ID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRp
bmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAg
ICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGlu
Z0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogICAgIAogICAg
IExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5NDcsNyArMzk0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdHJpcFRyYWlsaW5n
U3BhY2UoZmwKICAgICAgICAgLy8gQ29sbGFwc2UgYXdheSB0aGUgdHJhaWxpbmcgc3BhY2UgYXQg
dGhlIGVuZCBvZiBhIGJsb2NrLgogICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gZG93
bmNhc3Q8UmVuZGVyVGV4dD4oKnRyYWlsaW5nU3BhY2VDaGlsZCk7CiAgICAgICAgIGNvbnN0IFVD
aGFyIHNwYWNlID0gJyAnOwotICAgICAgICBjb25zdCBGb250JiBmb250ID0gcmVuZGVyVGV4dC5z
dHlsZSgpLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHJlbmRlclRleHQuc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCiAgICAgICAgIGZsb2F0IHNw
YWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKCZyZW5k
ZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHJlbmRlclRleHQuc3R5bGUoKSkpOwogICAgICAgICBp
bmxpbmVNYXggLT0gc3BhY2VXaWR0aCArIGZvbnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgaWYg
KGlubGluZU1pbiA+IGlubGluZU1heCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2Fs
V2lkdGhGb3JUZXgKICAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tG
b250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAKLSAgICBjb25zdCBGb250
JiBmb250ID0gbGluZVN0eWxlKCpyZW5kZXJlci0+cGFyZW50KCksIGxpbmVJbmZvKS5mb250KCk7
CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJl
bnQoKSwgbGluZUluZm8pLmZvbnRDYXNjYWRlKCk7CiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgZ2x5
cGggb3ZlcmZsb3cgaWYgdGhlIGJsb2NrJ3MgbGluZS1ib3gtY29udGFpbiB2YWx1ZSBpcyAiZ2x5
cGhzIi4KICAgICBpZiAobGluZUJveC0+Zml0c1RvR2x5cGhzKCkpIHsKICAgICAgICAgLy8gSWYg
d2UgZG9uJ3Qgc3RpY2sgb3V0IG9mIHRoZSByb290IGxpbmUncyBmb250IGJveCwgdGhlbiBkb24n
dCBib3RoZXIgY29tcHV0aW5nIG91ciBnbHlwaCBvdmVyZmxvdy4gVGhpcyBvcHRpbWl6YXRpb24K
QEAgLTUwNSw3ICs1MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9y
VGV4CiAgICAgICAgICAgICAgICAgICAgICZ3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cywg
Jm92ZXJmbG93KTsKICAgICAgICAgICAgICAgICBVQ2hhciBjID0gcmVuZGVyZXItPmNoYXJhY3Rl
ckF0KHdvcmRNZWFzdXJlbWVudC5zdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGkg
PiAwICYmIHdvcmRMZW5ndGggPT0gMSAmJiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKSkKLSAgICAg
ICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0aCArPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
d29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0aCArPSByZW5k
ZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53
aWR0aDsKICAgICAgICAgICAgIGlmICghd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNF
bXB0eSgpKSB7CkBAIC03NDMsMTQgKzc0MywxNCBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVJbmxpbmVECiAgICAgICAgICAgICBpZiAodGV4dEFsaWduID09IEpVU1RJRlkgJiYg
cnVuICE9IHRyYWlsaW5nU3BhY2VSdW4pIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJF
eHBhbnNpb24pCiAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpy
dW4tPmJveCgpKS5zZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBGb250OjpleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldyhydW4tPm1fc3RhcnQsIHJ1bi0+bV9zdG9w
KSwgcnVuLT5ib3goKS0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnRDYXNjYWRlOjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldyhydW4tPm1fc3RhcnQsIHJ1
bi0+bV9zdG9wKSwgcnVuLT5ib3goKS0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwog
ICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMuYXBwZW5kKG9wcG9ydHVuaXRp
ZXNJblJ1bik7CiAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBv
cHBvcnR1bml0aWVzSW5SdW47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpbnQg
bGVuZ3RoID0gcmVuZGVyVGV4dC50ZXh0TGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IXJ1bi0+bV9zdGFydCAmJiBuZWVkc1dvcmRTcGFjaW5nICYmIGlzU3BhY2VPck5ld2xpbmUocmVu
ZGVyVGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3RhcnQpKSkKLSAgICAgICAgICAgICAgICAgICAg
dG90YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5l
SW5mbykuZm9udCgpLndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsTG9n
aWNhbFdpZHRoICs9IGxpbmVTdHlsZSgqcmVuZGVyVGV4dC5wYXJlbnQoKSwgbGluZUluZm8pLmZv
bnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFj
aW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3Rv
cCAtIDEpKSAmJiBydW4tPm1fc3RvcCA9PSBsZW5ndGg7CiAgICAgICAgICAgICB9CiAKQEAgLTc2
OCw3ICs3NjgsNyBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmxlYWZD
aGlsZCkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24odHJ1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmNvdW50ZXJlZEp1c3RpZmllZFJ1YnkgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGxlYWZDaGls
ZC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1
bml0aWVzSW5SdW4gPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQu
c3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigpLCBpc0FmdGVyRXhwYW5zaW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZv
bnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmll
dygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigpLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMuYXBwZW5kKG9wcG9ydHVuaXRp
ZXNJblJ1bik7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTkw
Nyw5ICsxOTA3LDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrTGluZXNGb3JUZXh0Twog
ewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGVsbGlwc2lzIHVzaW5nIHRoZSBj
dXJyZW50IGZvbnQuCiAgICAgLy8gRklYTUU6IENTUzMgc2F5cyB0aGlzIGlzIGNvbmZpZ3VyYWJs
ZSwgYWxzbyBuZWVkIHRvIHVzZSAweDAwMkUgKEZVTEwgU1RPUCkgaWYgaG9yaXpvbnRhbCBlbGxp
cHNpcyBpcyAibm90IHJlbmRlcmFibGUiCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCku
Zm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVs
bGlwc2lzU3RyLCAoJmhvcml6b250YWxFbGxpcHNpcywgMSkpOwotICAgIGNvbnN0IEZvbnQmIGZp
cnN0TGluZUZvbnQgPSBmaXJzdExpbmVTdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAg
ICBmbG9hdCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5lRm9udC53aWR0aChjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZpcnN0TGluZUZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEs
IGZpcnN0TGluZVN0eWxlKCkpKTsKICAgICBmbG9hdCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0g
Zmlyc3RMaW5lRm9udCkgPyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRl
eHQuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQg
UmVuZGVyQ29tYmluZVRleHQ6OnNldFJlbmRlcmVkVGV4dCgKICAgICBtX25lZWRzRm9udFVwZGF0
ZSA9IHRydWU7CiB9CiAKLWZsb2F0IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3NpdGlvbiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRo
KHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIGlmICht
X2lzQ29tYmluZWQpCiAgICAgICAgIHJldHVybiBmb250LnNpemUoKTsKQEAgLTEwOCw3ICsxMDgs
NyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgZmxvYXQgY29t
YmluZWRUZXh0V2lkdGggPSB3aWR0aCgwLCB0ZXh0TGVuZ3RoKCksIG9yaWdpbmFsRm9udCgpLCAw
LCBudWxscHRyLCAmZ2x5cGhPdmVyZmxvdyk7CiAgICAgbV9pc0NvbWJpbmVkID0gY29tYmluZWRU
ZXh0V2lkdGggPD0gZW1XaWR0aDsKICAgICAKLSAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
ciA9IHN0eWxlKCkuZm9udCgpLmZvbnRTZWxlY3RvcigpOworICAgIEZvbnRTZWxlY3RvciogZm9u
dFNlbGVjdG9yID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogCiAgICAg
aWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgc2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZv
bnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsgLy8gTmVlZCB0byBjaGFu
Z2UgZm9udCBvcmllbnRhdGlvbiB0byBob3Jpem9udGFsLgpAQCAtMTE3LDcgKzExNyw4IEBAIHZv
aWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICAgICAgc3RhdGljIGNvbnN0
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50c1tdID0geyBIYWxmV2lkdGgsIFRoaXJkV2lk
dGgsIFF1YXJ0ZXJXaWR0aCB9OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBXVEZf
QVJSQVlfTEVOR1RIKHdpZHRoVmFyaWFudHMpIDsgKytpKSB7CiAgICAgICAgICAgICBkZXNjcmlw
dGlvbi5zZXRXaWR0aFZhcmlhbnQod2lkdGhWYXJpYW50c1tpXSk7Ci0gICAgICAgICAgICBGb250
IGNvbXByZXNzZWRGb250ID0gRm9udChkZXNjcmlwdGlvbiwgc3R5bGUoKS5mb250KCkubGV0dGVy
U3BhY2luZygpLCBzdHlsZSgpLmZvbnQoKS53b3JkU3BhY2luZygpKTsKKworICAgICAgICAgICAg
Rm9udENhc2NhZGUgY29tcHJlc3NlZEZvbnQoZGVzY3JpcHRpb24sIHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5sZXR0ZXJTcGFjaW5nKCksIHN0eWxlKCkuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygp
KTsKICAgICAgICAgICAgIGNvbXByZXNzZWRGb250LnVwZGF0ZShmb250U2VsZWN0b3IpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmbG9hdCBydW5XaWR0aCA9IFJlbmRlclRleHQ6OndpZHRo
KDAsIHRleHRMZW5ndGgoKSwgY29tcHJlc3NlZEZvbnQsIDAsIG51bGxwdHIsICZnbHlwaE92ZXJm
bG93KTsKQEAgLTEzNiw3ICsxMzcsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5l
VGV4dCgpCiAgICAgICAgIHNob3VsZFVwZGF0ZUZvbnQgPSBtX2NvbWJpbmVGb250U3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihvcmlnaW5hbEZvbnQoKS5mb250RGVzY3JpcHRpb24oKSk7CiAKICAg
ICBpZiAoc2hvdWxkVXBkYXRlRm9udCkKLSAgICAgICAgbV9jb21iaW5lRm9udFN0eWxlLT5mb250
KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgICAgIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9u
dENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKIAogICAgIGlmIChtX2lzQ29tYmluZWQp
IHsKICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXJTdHJpbmcsICgmb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIs
IDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4
dC5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q29tYmluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBS
ZW5kZXJDb21iaW5lVGV4dF9oCiAjZGVmaW5lIFJlbmRlckNvbWJpbmVUZXh0X2gKIAotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlckVs
ZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAt
MzgsMTUgKzM4LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkanVzdFRleHRPcmlnaW4oRmxvYXRQ
b2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KSBjb25zdDsKICAgICB2
b2lkIGdldFN0cmluZ1RvUmVuZGVyKGludCwgU3RyaW5nJiwgaW50JiBsZW5ndGgpIGNvbnN0Owog
ICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21iaW5lZDsgfQotICAg
IGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJu
IGZvbnQuc2l6ZSgpOyB9Ci0gICAgY29uc3QgRm9udCYgb3JpZ2luYWxGb250KCkgY29uc3QgeyBy
ZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9udCgpOyB9Ci0gICAgY29uc3QgRm9udCYgdGV4dENv
bWJpbmVGb250KCkgY29uc3QgeyByZXR1cm4gbV9jb21iaW5lRm9udFN0eWxlLT5mb250KCk7IH0K
KyAgICBmbG9hdCBjb21iaW5lZFRleHRXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkgY29u
c3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgb3JpZ2lu
YWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9udENhc2NhZGUoKTsg
fQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiB0ZXh0Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnRDYXNjYWRlKCk7IH0KIAogcHJpdmF0ZToKICAgICB2
b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVU
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQg
d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250JiwgZmxvYXQg
eFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMg
PSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxv
YXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
UmVuZGVyQ29tYmluZVRleHQiOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTk5Nyw3ICs5OTcsNyBA
QCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6YXBwbHlMCiAgICAgICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzQW5kU3BhY2VT
dHIsIChlbGxpcHNpc0FuZFNwYWNlLCAyKSk7CiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzU3RyLCAoJmhvcml6b250YWxFbGxpcHNp
cywgMSkpOwogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gbnVtVmlzaWJs
ZUxpbmVzID09IDEgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKLSAgICAgICAgY29uc3Qg
Rm9udCYgZm9udCA9IGxpbmVTdHlsZS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAKICAgICAgICAgLy8gR2V0IGVsbGlw
c2lzIHdpZHRoLCBhbmQgaWYgdGhlIGxhc3QgY2hpbGQgaXMgYW4gYW5jaG9yLCBpdCB3aWxsIGdv
IGFmdGVyIHRoZSBlbGxpcHNpcywgc28gYWRkIGluIGEgc3BhY2UgYW5kIHRoZSBhbmNob3Igd2lk
dGggdG9vCiAgICAgICAgIExheW91dFVuaXQgdG90YWxXaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpw
YWludFJlcGxhY2VkCiAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0
IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRSZWN0IGFycm93UmVjdDsKLSAgICBGb250
IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBUZXh0UnVuIHJ1bigiIik7CiAgICAg
ZmxvYXQgdGV4dFdpZHRoOwogICAgIGlmICghZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkocGFp
bnRPZmZzZXQsIGNvbnRlbnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0
LCBhcnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKQEAgLTM0OSw3ICszNDksNyBAQCB2
b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRVbmF2YWlsYWJsCiAgICAgcmVwYWludCgpOwog
fQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRy
eShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVu
dFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRl
eHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBm
bG9hdCYgdGV4dFdpZHRoKSBjb25zdAorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVw
bGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0
UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNj
YWRlJiBmb250LCBUZXh0UnVuJiBydW4sIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0CiB7CiAgICAg
Ym9vbCBpbmNsdWRlc0Fycm93ID0gc2hvdWxkVW5hdmFpbGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0
b24oZG9jdW1lbnQoKSwgbV9wbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbik7CiAKQEAgLTM2MSw3
ICszNjEsNyBAQCBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Qm9sZCk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFJlbmRlcmluZ01vZGUoZnJhbWUoKS5zZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdN
b2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoMTIpOwotICAgIGZv
bnQgPSBGb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAgZm9udCA9IEZvbnRDYXNjYWRl
KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgZm9udC51cGRhdGUoMCk7CiAKICAgICBydW4g
PSBUZXh0UnVuKG1fdW5hdmFpbGFibGVQbHVnaW5SZXBsYWNlbWVudFRleHQpOwpAQCAtMzkxLDcg
KzM5MSw3IEBAIExheW91dFJlY3QgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnVuYXZhaWwKICAgICBG
bG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVj
dDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0OwotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIiLCAwKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7
CiAgICAgaWYgKGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGFjY3VtdWxhdGVkT2Zmc2V0LCBj
b250ZW50UmVjdCwgaW5kaWNhdG9yUmVjdCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0
LCBmb250LCBydW4sIHRleHRXaWR0aCkpCkBAIC01ODIsNyArNTgyLDcgQEAgYm9vbCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6aXNJblVuYXZhaWxhYgogICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0
OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJv
d1JlY3Q7Ci0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1
biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsKICAgICByZXR1cm4gZ2V0UmVwbGFjZW1l
bnRUZXh0R2VvbWV0cnkoSW50UG9pbnQoKSwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJl
cGxhY2VtZW50VGV4dFJlY3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAko
cmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGJvb2wpOwogICAg
IGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IE1vdXNlRXZlbnQmKSBj
b25zdDsKICAgICBib29sIGlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3Qs
IEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0
LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRo
KSBjb25zdDsKKyAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRS
ZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0
UmVjdCYgYXJyb3dSZWN0LCBGb250Q2FzY2FkZSYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRo
KSBjb25zdDsKICAgICBMYXlvdXRSZWN0IHVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yQm91bmRz
KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNo
aWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDE3
ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oIgogCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFp
bnRPYmplYwogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewogICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXllZEZpbGVuYW1lID0gZmlsZVRleHRW
YWx1ZSgpOwotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAg
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAg
ICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIGRpc3Bs
YXllZEZpbGVuYW1lLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBS
ZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKTsKICAgICAgICAgdGV4
dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29tcHV0ZUludAogICAgIC8vICh1c2luZyAiMCIgYXMg
dGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KICAgICBjb25zdCBVQ2hhciBjaGFyYWN0ZXIgPSAnMCc7
CiAgICAgY29uc3QgU3RyaW5nIGNoYXJhY3RlckFzU3RyaW5nID0gU3RyaW5nKCZjaGFyYWN0ZXIs
IDEpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZSBuZWVkIGZvciB0aGlzIGNvbnN0X2Nhc3QgYnkgbWFraW5nIGNvbnN0cnVjdFRl
eHRSdW4gdGFrZSBhIGNvbnN0IFJlbmRlck9iamVjdCouCiAgICAgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wqIHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KHRo
aXMpOwogICAgIGZsb2F0IG1pbkRlZmF1bHRMYWJlbFdpZHRoID0gZGVmYXVsdFdpZHRoTnVtQ2hh
cnMgKiBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGNoYXJhY3Rl
ckFzU3RyaW5nLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CkBA
IC0yNzEsOSArMjcxLDkgQEAgU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4
dAogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQoKS5maWxlcygpKTsKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgaWYgKGlucHV0RWxlbWVudCgpLmZpbGVzKCktPmxlbmd0aCgpKQotICAgICAgICByZXR1
cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlT
dHJpbmcoKSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBzdHlsZSgpLmZvbnQoKSwgU3RyaW5nVHJ1bmNh
dG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRUcnVuY2F0ZShpbnB1dEVsZW1lbnQoKS5kaXNwbGF5U3RyaW5nKCksIG1heEZpbGVu
YW1lV2lkdGgoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJs
ZVJvdW5kaW5nSGFja3MpOwogI2VuZGlmCi0gICAgcmV0dXJuIHRoZW1lKCkuZmlsZUxpc3ROYW1l
Rm9yV2lkdGgoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSwgc3R5bGUoKS5mb250KCksIG1heEZpbGVu
YW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCkubXVsdGlwbGUoKSk7CisgICAgcmV0dXJuIHRoZW1l
KCkuZmlsZUxpc3ROYW1lRm9yV2lkdGgoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSwgc3R5bGUoKS5m
b250Q2FzY2FkZSgpLCBtYXhGaWxlbmFtZVdpZHRoKCksIGlucHV0RWxlbWVudCgpLm11bHRpcGxl
KCkpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTc4NDE4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gUmVuZGVyRmxvd1RocmVh
ZDo6Y3JlYXQKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7CiAg
ICAgbmV3U3R5bGUuZ2V0KCkuc2V0V2lkdGgoTGVuZ3RoKDEwMCwgUGVyY2VudCkpOwogICAgIG5l
d1N0eWxlLmdldCgpLnNldEhlaWdodChMZW5ndGgoMTAwLCBQZXJjZW50KSk7Ci0gICAgbmV3U3R5
bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShudWxscHRyKTsKICAgICByZXR1cm4gbmV3U3R5bGU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9u
IDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgUmVmPFJlbmRlclN0eWxl
PiBjcmVhdGVGdWxsU2NyZWVuCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldFpJbmRleChJ
TlRfTUFYKTsKIAogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24o
Rm9udERlc2NyaXB0aW9uKCkpOwotICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5mb250KCkudXBk
YXRlKDApOworICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShu
dWxscHRyKTsKIAogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXREaXNwbGF5KEZMRVgpOwog
ICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRKdXN0aWZ5Q29udGVudChKdXN0aWZ5Q2VudGVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNp
b24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgpAQCAtMTkyLDcgKzE5Miw3IEBAIGJvb2wgUmVuZGVySW1hZ2U6OnNldEltYWdlU2l6
ZUZvckFsdFRleHQKIAogICAgIC8vIHdlIGhhdmUgYW4gYWx0IGFuZCB0aGUgdXNlciBtZWFudCBp
dCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50ZWQpCiAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
ICAgIEludFNpemUgcGFkZGVkVGV4dFNpemUocGFkZGluZ1dpZHRoICsgc3RkOjptaW4oY2VpbGYo
Zm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX2Fs
dFRleHQsIHN0eWxlKCkpKSksIG1heEFsdFRleHRXaWR0aCksIHBhZGRpbmdIZWlnaHQgKyBzdGQ6
Om1pbihmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCksIG1heEFsdFRleHRIZWlnaHQpKTsKICAg
ICAgICAgaW1hZ2VTaXplID0gaW1hZ2VTaXplLmV4cGFuZGVkVG8ocGFkZGVkVGV4dFNpemUpOwog
ICAgIH0KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2Vk
KFBhaW50SW5mCiAgICAgICAgICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRvY3VtZW50KCkuZGlzcGxheVN0cmluZ01vZGlmaWVk
QnlFbmNvZGluZyhtX2FsdFRleHQpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxD
b2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5
bGUoKS5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBz
dHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgICAgICBjb25zdCBGb250TWV0cmlj
cyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKICAgICAgICAgICAgICAgICBM
YXlvdXRQb2ludCBhbHRUZXh0T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNiw3ICsyMTYsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGlu
CiAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJJbmxpbmUgJiYgcGFyZW50U3R5bGUtPnZlcnRpY2Fs
QWxpZ24oKSAhPSBCQVNFTElORSkKICAgICAgICAgfHwgc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkg
IT0gQkFTRUxJTkUKICAgICAgICAgfHwgc3R5bGUoKS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4
dEVtcGhhc2lzTWFya05vbmUKLSAgICAgICAgfHwgKGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHls
ZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVH
YXAoc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgfHwgKGNoZWNrRm9udHMg
JiYgKCFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNh
bEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKHN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpKQogICAgICAgICB8fCBwYXJlbnRTdHlsZS0+bGluZUhlaWdodCgpICE9IHN0eWxlKCkubGlu
ZUhlaWdodCgpKSkKICAgICAgICAgfHwgKGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQoKSk7IC8vIEZJWE1FOiBFbmFibGUgdGhlIG9wdGltaXphdGlvbiBv
bmNlIHdlIG1ha2Ugb3ZlcmZsb3cgY29tcHV0YXRpb24gZm9yIGN1bGxlZCBpbmxpbmVzIGluIHJl
Z2lvbnMuCiAKQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3
YXlzQ3JlYXRlTGluCiAgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5
bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0
eWxlKCk7CiAgICAgICAgIFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUo
KTsKLSAgICAgICAgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250KCku
Zm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0
eWxlLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMg
PSAhcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxB
c2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJp
Y3MoKSkKICAgICAgICAgICAgIHx8IGNoaWxkU3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VM
SU5FCiAgICAgICAgICAgICB8fCBwYXJlbnRTdHlsZS0+bGluZUhlaWdodCgpICE9IGNoaWxkU3R5
bGUubGluZUhlaWdodCgpOwogICAgIH0KQEAgLTU3NCw4ICs1NzQsOCBAQCB2b2lkIFJlbmRlcklu
bGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAgICAgICAgICBpZiAocmVuZGVyQm94Lmlu
bGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gm
IHJvb3RCb3ggPSByZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAg
ICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0Zp
cnN0TGluZSgpID8gY29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHls
ZSgpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9w
KCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAt
IGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0
cmljcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJv
eC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29u
dGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAg
ICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
YWRkUmVjdChGbG9hdFJlY3QocmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gcmVu
ZGVyQm94Lm1hcmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgcmVuZGVyQm94LndpZHRoKCkgKyByZW5k
ZXJCb3guaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQpAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5l
cmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNo
aWxkTGluZSA9IHJlbmRlcklubGluZS5maXJzdExpbmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExp
bmUgPSBjaGlsZExpbmUtPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGNoaWxkTGluZS0+cm9vdCgpOwogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94Lmlz
Rmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0
eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dp
Y2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSAr
IChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUu
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpv
bnRhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVj
dChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKQEAgLTYx
MCw4ICs2MTAsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAg
ICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LmZpcnN0
VGV4dEJveCgpOyBjaGlsZFRleHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3go
KSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGls
ZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFp
bmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0
eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxU
b3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFp
bmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxl
LmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChjaGlsZFRleHQtPngoKSwg
bG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwog
ICAgICAgICAgICAgICAgIGVsc2UKQEAgLTYyMiw3ICs2MjIsNyBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
Y291bGQgdXNlIGEgaGVscGVyIHRvIHNoYXJlIHRoZXNlIHdpdGggdGV4dCBwYXRoLgogICAgICAg
ICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBpbmxpbmVCb3gtPnJvb3Qo
KTsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSBy
b290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250
YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94
LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkg
KyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9u
dE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KGlubGluZUJveC0+
eCgpLCBsb2dpY2FsVG9wLCBpbmxpbmVCb3gtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxNCArMTEyLDE0IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNb
aV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQg
PSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5
bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50
PigqZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAg
ICAgICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVt
ZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBk
ID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgZC5zZXRXZWln
aHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250KGQs
IGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAg
ICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFj
aW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAgICAgICAgICAgIGl0ZW1Gb250
LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7
CiAgICAgICAgICAgICB9CiAKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnBhaW50U2Nyb2xsYmFyKFBhaW50CiAgICAgfQogfQogCi1zdGF0aWMgTGF5b3V0U2l6ZSBpdGVt
T2Zmc2V0Rm9yQWxpZ25tZW50KFRleHRSdW4gdGV4dFJ1biwgUmVuZGVyU3R5bGUqIGl0ZW1TdHls
ZSwgRm9udCBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlv
dXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHls
ZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGlu
Z0JveCkKIHsKICAgICBFVGV4dEFsaWduIGFjdHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4
dEFsaWduKCk7CiAgICAgLy8gRklYTUU6IEZpcmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlku
IFNob3VsZCB3ZT8KQEAgLTQwMCwxNCArNDAwLDE0IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFp
bnRJdGVtRm9yZWdyb3VuZCgKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKHRl
eHRDb2xvciwgY29sb3JTcGFjZSk7CiAKICAgICBUZXh0UnVuIHRleHRSdW4oaXRlbVRleHQsIDAs
IDAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24sIGl0ZW1TdHlsZS0+ZGlyZWN0aW9u
KCksIGlzT3ZlcnJpZGUoaXRlbVN0eWxlLT51bmljb2RlQmlkaSgpKSwgdHJ1ZSwgVGV4dFJ1bjo6
Tm9Sb3VuZGluZyk7Ci0gICAgRm9udCBpdGVtRm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIEZv
bnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIExheW91dFJl
Y3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJbmRleCk7CiAgICAg
ci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1biwgaXRlbVN0eWxlLCBpdGVtRm9u
dCwgcikpOwogCiAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1l
bnQpKSB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwotICAgICAgICBp
dGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3Jk
U3BhY2luZygpKTsKKyAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5s
ZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAgICBpdGVtRm9u
dC51cGRhdGUoZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkp
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtl
cjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRS
dW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1f
dGV4dCwgc3R5bGUoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQsIGZhbHNlKTsKQEAgLTE1MjksNyArMTUyOSw3IEBAIHZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKIAogICAgIExheW91dFVuaXQgbG9naWNh
bFdpZHRoID0gMDsKICAgICBFTGlzdFN0eWxlVHlwZSB0eXBlID0gc3R5bGUoKS5saXN0U3R5bGVU
eXBlKCk7CkBAIC0xNzU3LDcgKzE3NTcsNyBAQCBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6Omdl
dFJlbGF0aXZlTWFyCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgQXN0ZXJpc2tz
OgogICAgICAgICBjYXNlIEZvb3Rub3RlczogewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4
dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBh
bnNpb24sIERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgcmVsYXRpdmVSZWN0ID0g
SW50UmVjdCgwLCAwLCBmb250LndpZHRoKHJ1biksIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQo
KSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NTEsNyArMTg1MSw3IEBAIEludFJlY3QgUmVu
ZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAgICAgICAgY2FzZSBVcmR1OgogICAgICAg
ICAgICAgaWYgKG1fdGV4dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgp
OwogICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bih0aGlzLCBmb250LCBtX3RleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBh
bnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZs
YWdzKTsKICAgICAgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRoKHJ1bik7CiAgICAg
ICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBt
X2xpc3RJdGVtLnZhbHVlKCkpLCAnICcgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcg
KzE5Niw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWwKICAgICBp
ZiAobV9pbm5lckJsb2NrKSAvLyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9u
eW1vdXMgYmxvY2sncyBzdHlsZS4KICAgICAgICAgYWRqdXN0SW5uZXJTdHlsZSgpOwogCi0gICAg
Ym9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8fCBvbGRTdHlsZS0+Zm9udCgpICE9IHN0eWxl
KCkuZm9udCgpOworICAgIGJvb2wgZm9udENoYW5nZWQgPSAhb2xkU3R5bGUgfHwgb2xkU3R5bGUt
PmZvbnRDYXNjYWRlKCkgIT0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIGlmIChmb250Q2hh
bmdlZCkgewogICAgICAgICB1cGRhdGVPcHRpb25zV2lkdGgoKTsKICAgICAgICAgbV9uZWVkc09w
dGlvbnNXaWR0aFVwZGF0ZSA9IGZhbHNlOwpAQCAtMjIyLDEzICsyMjIsMTMgQEAgdm9pZCBSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAgICAgICAgICAgaWYgKFJlbmRlclN0
eWxlKiBvcHRpb25TdHlsZSA9IGVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgICAg
ICAgICBvcHRpb25XaWR0aCArPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgob3B0aW9uU3R5bGUtPnRl
eHRJbmRlbnQoKSwgMCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAg
ICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwog
ICAgICAgICAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4odGhpcywgZm9udCwgdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFu
c2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRUZXh0UnVuRmxh
Z3MpOwogICAgICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IGZvbnQud2lkdGgocnVuKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1heE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0
aW9uV2lkdGgsIG9wdGlvbldpZHRoKTsKICAgICAgICAgfSBlbHNlIGlmICghdGV4dC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgp
OwogICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFn
cyk7CiAgICAgICAgICAgICBtYXhPcHRpb25XaWR0aCA9IHN0ZDo6bWF4KG1heE9wdGlvbldpZHRo
LCBmb250LndpZHRoKHJ1bikpOwogICAgICAgICB9CkBAIC01MjMsNyArNTIzLDcgQEAgUG9wdXBN
ZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZQogICAgIGdldEl0ZW1CYWNrZ3JvdW5k
Q29sb3IobGlzdEluZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dy
b3VuZENvbG9yKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgp
OwotICAgIHJldHVybiBzdHlsZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5m
b250KCksIHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKKyAgICByZXR1cm4gc3R5bGUg
PyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBpdGVtQmFja2dyb3VuZENvbG9yLCBzdHlsZS0+Zm9udENhc2NhZGUoKSwgc3R5bGUt
PnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS0+ZGlzcGxheSgpID09IE5P
TkUsIHRydWUsIHN0eWxlLT50ZXh0SW5kZW50KCksIHN0eWxlLT5kaXJlY3Rpb24oKSwgaXNPdmVy
cmlkZShzdHlsZS0+dW5pY29kZUJpZGkoKSksCiAgICAgICAgIGl0ZW1IYXNDdXN0b21CYWNrZ3Jv
dW5kQ29sb3IgPyBQb3B1cE1lbnVTdHlsZTo6Q3VzdG9tQmFja2dyb3VuZENvbG9yIDogUG9wdXBN
ZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IpIDogbWVudVN0eWxlKCk7CiB9CkBAIC01
NjQsNyArNTY0LDcgQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gbV9pbm5lckJsb2NrID8gbV9pbm5l
ckJsb2NrLT5zdHlsZSgpIDogc3R5bGUoKTsKICAgICBJbnRSZWN0IGFic0JvdW5kcyA9IGFic29s
dXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAgICAgcmV0dXJuIFBvcHVw
TWVudVN0eWxlKHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciksCi0gICAgICAgIHN0eWxlVG9Vc2UuZm9udCgpLCBzdHlsZVRvVXNlLnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRpc3BsYXkoKSA9PSBOT05FLAorICAgICAgICBz
dHlsZVRvVXNlLmZvbnRDYXNjYWRlKCksIHN0eWxlVG9Vc2UudmlzaWJpbGl0eSgpID09IFZJU0lC
TEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsCiAgICAgICAgIHN0eWxlKCkuaGFzQXBw
ZWFyYW5jZSgpICYmIHN0eWxlKCkuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCwgc3R5bGVU
b1VzZS50ZXh0SW5kZW50KCksCiAgICAgICAgIHN0eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJp
ZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSwgUG9wdXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3Jv
dW5kQ29sb3IsCiAgICAgICAgIFBvcHVwTWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5w
b3B1cE1lbnVTaXplKHN0eWxlVG9Vc2UsIGFic0JvdW5kcykpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjpsYXlvdXQoKQogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHJ0LT5zdHlsZSgpLnJ1YnlQb3NpdGlvbigpID09
IFJ1YnlQb3NpdGlvbkludGVyQ2hhcmFjdGVyKSB7CiAgICAgICAgIC8vIEJvcG9tb2ZvLiBXZSBu
ZWVkIHRvIG1vdmUgdGhlIFJlbmRlclJ1YnlUZXh0IG92ZXIgdG8gdGhlIHJpZ2h0IHNpZGUgYW5k
IGNlbnRlciBpdAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IHJlbGF0aXZlIHRvIHRoZSBiYXNlLgot
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7Ci0gICAgICAgIGZsb2F0
IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9udC5sZXR0ZXJTcGFjaW5nKCksIDIuMGYgKiBy
dC0+c3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOworICAgICAgICBmbG9h
dCBkaXN0YW5jZUJldHdlZW5CYXNlID0gbWF4KGZvbnQubGV0dGVyU3BhY2luZygpLCAyLjBmICog
cnQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhlaWdodCgpKTsKICAgICAg
ICAgc2V0V2lkdGgod2lkdGgoKSArIGRpc3RhbmNlQmV0d2VlbkJhc2UgLSBmb250LmxldHRlclNw
YWNpbmcoKSk7CiAgICAgICAgIGlmIChSZW5kZXJSdWJ5QmFzZSogcmIgPSBydWJ5QmFzZSgpKSB7
CiAgICAgICAgICAgICBMYXlvdXRVbml0IGZpcnN0TGluZVRvcCA9IDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE3
ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJT
ZWFyY2hGaWVsZDo6aXRlbVN0CiAKIFBvcHVwTWVudVN0eWxlIFJlbmRlclNlYXJjaEZpZWxkOjpt
ZW51U3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLmZvbnQoKSwg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKKyAgICByZXR1cm4gUG9wdXBNZW51U3R5
bGUoc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5
bGUoKS5mb250Q2FzY2FkZSgpLCBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAg
ICAgICBzdHlsZSgpLmRpc3BsYXkoKSA9PSBOT05FLCB0cnVlLCBzdHlsZSgpLnRleHRJbmRlbnQo
KSwgc3R5bGUoKS5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkp
LCBQb3B1cE1lbnVTdHlsZTo6Q3VzdG9tQmFja2dyb3VuZENvbG9yKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjksOCArMjI5LDggQEAgYm9vbCBSZW5kZXJUZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0
CiBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0
CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnQoKS5mb250
RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoc3R5bGUuZm9udCgpLnVzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKCkpCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChzdHlsZS5mb250Q2Fz
Y2FkZSgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmCiAgICAgaWYgKCFvbGRTdHlsZSkgewogICAgICAgICBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCk7CiAgICAgICAg
IG5lZWRzUmVzZXRUZXh0ID0gbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICB9IGVsc2Ug
aWYgKG9sZFN0eWxlLT5mb250KCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSAhPSBuZXdTdHls
ZS5mb250KCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkgeworICAgIH0gZWxzZSBpZiAob2xk
U3R5bGUtPmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSAhPSBuZXdTdHls
ZS5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkpIHsKICAgICAgICAgbV91
c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgp
OwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IHRydWU7CiAgICAgfQpAQCAtNDUxLDcgKzQ1MSw3
IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4g
Ym94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxlZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhU
b0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhG
cm9tQ2FjaGUoY29uc3QgRm9udCYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKK0FMV0FZ
U19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2Nh
ZGUmIGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLmhhc1Rl
eHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKSkgewogICAgICAgICBj
b25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRleHQgPSBkb3duY2FzdDxSZW5kZXJDb21i
aW5lVGV4dD4oKnRoaXMpOwpAQCAtNTQ0LDcgKzU0NCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJp
bW1lZFByZWZXaWR0aHMoZmxvYXQKICAgICBBU1NFUlQobV90ZXh0KTsKICAgICBTdHJpbmdJbXBs
JiB0ZXh0ID0gKm1fdGV4dC5pbXBsKCk7CiAgICAgaWYgKHRleHRbMF0gPT0gJyAnIHx8ICh0ZXh0
WzBdID09ICdcbicgJiYgIXN0eWxlLnByZXNlcnZlTmV3bGluZSgpKSB8fCB0ZXh0WzBdID09ICdc
dCcpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6
IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGlu
ZS4KICAgICAgICAgaWYgKHN0cmlwRnJvbnRTcGFjZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFVD
aGFyIHNwYWNlID0gJyAnOwogICAgICAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lk
dGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJnNwYWNlLCAxLCBz
dHlsZSkpOwpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZX
aWR0aHMoZmxvYXQKIAogICAgIC8vIENvbXB1dGUgb3VyIG1heCB3aWR0aHMgYnkgc2Nhbm5pbmcg
dGhlIHN0cmluZyBmb3IgbmV3bGluZXMuCiAgICAgaWYgKGhhc0JyZWFrKSB7Ci0gICAgICAgIGNv
bnN0IEZvbnQmIGYgPSBzdHlsZS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3Qt
bGluZS4KKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGYgPSBzdHlsZS5mb250Q2FzY2FkZSgp
OyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCiAgICAgICAgIGJvb2wgZmlyc3RM
aW5lID0gdHJ1ZTsKICAgICAgICAgYmVnaW5NYXhXID0gbWF4VzsKICAgICAgICAgZW5kTWF4VyA9
IG1heFc7CkBAIC02MzcsMTMgKzYzNywxMyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsCiAgICAgICAgIG1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFj
a0ZvbnRzID0gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5k
ZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
aHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
KQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwog
ICAgIHJldHVybiBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRl
cmVyLCBmb250LCBzdHlsZS5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpKTsKIH0KIAot
c3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIFN0cmluZ1ZpZXcgd29y
ZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIHVuc2lnbmVkIG1pbmltdW1TdWZmaXhMZW5ndGgs
IGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKK3N0YXRpYyBmbG9hdCBtYXhX
b3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWlu
aW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZm
aXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQogewogICAgIHN1ZmZpeFN0YXJ0ID0gMDsKICAg
ICBpZiAod29yZC5sZW5ndGgoKSA8PSBtaW5pbXVtU3VmZml4TGVuZ3RoKQpAQCAtNzAxLDcgKzcw
MSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICBtX2hh
c0VuZFdTID0gZmFsc2U7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5z
dHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS5mb250KCk7IC8vIEZJWE1FOiBU
aGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0
eWxlLmZvbnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAg
ICBmbG9hdCB3b3JkU3BhY2luZyA9IGZvbnQud29yZFNwYWNpbmcoKTsKICAgICBpbnQgbGVuID0g
dGV4dExlbmd0aCgpOwogICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKG1f
dGV4dCwgc3R5bGUubG9jYWxlKCksIG1hcExpbmVCcmVha1RvSXRlcmF0b3JNb2RlKHN0eWxlLmxp
bmVCcmVhaygpKSk7CkBAIC0xMjE1LDEwICsxMjE1LDEwIEBAIGZsb2F0IFJlbmRlclRleHQ6Ondp
ZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICAgICAgbGVuID0gdGV4dExlbmd0aCgpIC0gZnJvbTsK
IAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExp
bmVTdHlsZSgpIDogc3R5bGUoKTsKLSAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5
bGUuZm9udCgpLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICByZXR1
cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKSwgeFBvcywgZmFsbGJh
Y2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udCYgZiwgZmxvYXQgeFBvcywgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VSVChmcm9tICsgbGVuIDw9IHRleHRM
ZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkpCkBAIC0xMjI2LDcgKzEyMjYsNyBAQCBm
bG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1CiAKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIGZsb2F0IHc7Ci0gICAgaWYgKCZm
ID09ICZzdHlsZS5mb250KCkpIHsKKyAgICBpZiAoJmYgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkp
IHsKICAgICAgICAgaWYgKCFzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiAhZnJvbSAmJiBsZW4g
PT0gdGV4dExlbmd0aCgpICYmICghZ2x5cGhPdmVyZmxvdyB8fCAhZ2x5cGhPdmVyZmxvdy0+Y29t
cHV0ZUJvdW5kcykpIHsKICAgICAgICAgICAgIGlmIChmYWxsYmFja0ZvbnRzKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGdseXBoT3ZlcmZsb3cpOwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAgYm9v
bCBSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxlRm9udAogewogICAgIGlmIChpc0FsbEFT
Q0lJKCkgfHwgbV90ZXh0LmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkp
ID09IEZvbnQ6OlNpbXBsZTsKKyAgICByZXR1cm4gRm9udENhc2NhZGU6OmNoYXJhY3RlclJhbmdl
Q29kZVBhdGgoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKSA9PSBGb250Q2FzY2FkZTo6U2ltcGxl
OwogfQogCiB2b2lkIFJlbmRlclRleHQ6Om1vbWVudGFyaWx5UmV2ZWFsTGFzdFR5cGVkQ2hhcmFj
dGVyKHVuc2lnbmVkIG9mZnNldEFmdGVyTGFzdFR5cGVkQ2hhcmFjdGVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0LmltcGwoKS0+bGVuZ3RoKCk7IH0gLy8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24g
b2YgbGVuZ3RoKCkKICAgICB2b2lkIHBvc2l0aW9uTGluZUJveChJbmxpbmVUZXh0Qm94Jik7CiAK
LSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29u
c3QgRm9udCYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBm
bG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRl
JiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IHdp
ZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywgYm9vbCBmaXJzdExp
bmUgPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
ID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKIAogICAgIGZsb2F0IG1pbkxvZ2ljYWxX
aWR0aCgpIGNvbnN0OwpAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikg
b3ZlcnJpZGUgZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0
YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0
OworICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0
LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0Owog
ICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQogICAg
IGJvb2wgY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3Q7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNp
b24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEyICsxNzQsMTIgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6aGl0SW5uZXJUZXh0RWxlbQogZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2
ZXJhZ2VDaGFyV2lkdGgoKQogewogICAgIGZsb2F0IHdpZHRoOwotICAgIGlmIChzdHlsZSgpLmZv
bnQoKS5mYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKHdpZHRoKSkKKyAgICBpZiAoc3R5
bGUoKS5mb250Q2FzY2FkZSgpLmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgp
KQogICAgICAgICByZXR1cm4gd2lkdGg7CiAKICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKICAg
ICBjb25zdCBTdHJpbmcgc3RyID0gU3RyaW5nKCZjaCwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4o
dGhpcywgZm9udCwgc3RyLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9u
KTsKICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgcmV0dXJuIGZvbnQu
d2lkdGgodGV4dFJ1bik7CkBAIC0xODksNyArMTg5LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRy
b2w6OnNjYWxlRW1Ub1VuaXRzKAogewogICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgdW5pdHNQZXJF
bSB2YWx1ZSBmb3IgTVMgU2hlbGwgRGxnIGFuZCBDb3VyaWVyIE5ldyBmcm9tIHRoZSAiaGVhZCIg
Zm9udCB0YWJsZS4KICAgICBmbG9hdCB1bml0c1BlckVtID0gMjA0OC4wZjsKLSAgICByZXR1cm4g
cm91bmRmKHN0eWxlKCkuZm9udCgpLnNpemUoKSAqIHggLyB1bml0c1BlckVtKTsKKyAgICByZXR1
cm4gcm91bmRmKHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgKiB4IC8gdW5pdHNQZXJFbSk7
CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lk
dGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdp
ZHRoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lOjpnZXRBdmUKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZv
bnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKICAgICAvLyBvZiBDb3VyaWVyIE5l
dywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIElFLCBGaXJlZm94IGFuZCBTYWZh
cmkgV2luLgogICAgIC8vIDEyMjkgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1Mv
MiB0YWJsZSBmb3IgQ291cmllciBOZXcuCi0gICAgaWYgKHN0eWxlKCkuZm9udCgpLmZpcnN0RmFt
aWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCku
Zmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAgIHJldHVybiBzY2FsZUVt
VG9Vbml0cygxMjI5KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCBmbG9hdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2CiAgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0
aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQK
ICAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlz
IGVuY29kaW5nIHNwZWNpZmljKS4KICAgICAvLyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1
ZSBpbiB0aGUgT1MvMiB0YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgotICAgIGlmIChzdHlsZSgpLmZv
bnQoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKKyAgICBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBy
ZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKICNlbmRpZgogCkBAIC0zMzgsMTUgKzMzOCwxNSBA
QCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6CiAgICAgZmxvYXQgbWF4
Q2hhcldpZHRoID0gMC5mOwogCiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCk7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHko
KTsKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdh
bnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKICAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBk
ZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAogICAg
IC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5j
b2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDQwMjcgaXMgdGhlICh4TWF4IC0geE1pbikgdmFsdWUg
aW4gdGhlICJoZWFkIiBmb250IHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCiAgICAgaWYgKGZhbWls
eSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAgIG1heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1Vu
aXRzKDQwMjcpOwotICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udCgpLmhhc1ZhbGlkQXZlcmFnZUNo
YXJXaWR0aCgpKQotICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOworICAgIGVsc2UgaWYgKHN0eWxlKCku
Zm9udENhc2NhZGUoKS5oYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSkKKyAgICAgICAgbWF4Q2hh
cldpZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5t
YXhDaGFyV2lkdGgoKSk7CiAjZW5kaWYKIAogICAgIC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRk
cyBzb21lIGV4dHJhIHdpZHRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2UgQnV0dG9uUGFydDog
ewogICAgICAgICAvLyBCb3JkZXIKICAgICAgICAgTGVuZ3RoQm94IGJvcmRlckJveChzdHlsZS5i
b3JkZXJUb3BXaWR0aCgpLCBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLmJvcmRlckJv
dHRvbVdpZHRoKCksIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpKTsKLSAgICAgICAgYm9yZGVyQm94
ID0gbV90aGVtZS0+Y29udHJvbEJvcmRlcihwYXJ0LCBzdHlsZS5mb250KCksIGJvcmRlckJveCwg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgYm9yZGVyQm94ID0gbV90aGVtZS0+Y29u
dHJvbEJvcmRlcihwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBib3JkZXJCb3gsIHN0eWxlLmVm
ZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUoKSAhPSBz
dGF0aWNfY2FzdDxpbnQ+KHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpKSB7CiAgICAgICAgICAgICBp
ZiAoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgc3R5bGUuc2V0Qm9y
ZGVyVG9wV2lkdGgoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkpOwpAQCAtMTQzLDcgKzE0Myw3IEBA
IHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFBhZGRpbmcKLSAgICAgICAgTGVuZ3RoQm94IHBhZGRpbmdCb3ggPSBtX3RoZW1l
LT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxlLnBhZGRpbmdCb3goKSwg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoQm94IHBhZGRpbmdCb3ggPSBt
X3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5w
YWRkaW5nQm94KCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChwYWRkaW5n
Qm94ICE9IHN0eWxlLnBhZGRpbmdCb3goKSkKICAgICAgICAgICAgIHN0eWxlLnNldFBhZGRpbmdC
b3gocGFkZGluZ0JveCk7CiAKQEAgLTE1NCwyNSArMTU0LDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICAgICAgLy8gV2lkdGggLyBIZWlnaHQKICAgICAg
ICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgaGVyZSBhcmUgYWZmZWN0ZWQgYnkgdGhlIHpvb20u
CiAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFr
ZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KLSAgICAgICAgTGVuZ3RoU2l6ZSBj
b250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnQoKSwgTGVu
Z3RoU2l6ZShzdHlsZS53aWR0aCgpLCBzdHlsZS5oZWlnaHQoKSksIHN0eWxlLmVmZmVjdGl2ZVpv
b20oKSk7CisgICAgICAgIExlbmd0aFNpemUgY29udHJvbFNpemUgPSBtX3RoZW1lLT5jb250cm9s
U2l6ZShwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCks
IHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGNv
bnRyb2xTaXplLndpZHRoKCkgIT0gc3R5bGUud2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNl
dFdpZHRoKGNvbnRyb2xTaXplLndpZHRoKCkpOwogICAgICAgICBpZiAoY29udHJvbFNpemUuaGVp
Z2h0KCkgIT0gc3R5bGUuaGVpZ2h0KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRIZWlnaHQoY29u
dHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBNaW4tV2lk
dGggLyBNaW4tSGVpZ2h0Ci0gICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUgPSBtX3Ro
ZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udCgpLCBzdHlsZS5lZmZlY3Rp
dmVab29tKCkpOworICAgICAgICBMZW5ndGhTaXplIG1pbkNvbnRyb2xTaXplID0gbV90aGVtZS0+
bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChtaW5Db250cm9sU2l6ZS53aWR0aCgpICE9IHN0eWxl
Lm1pbldpZHRoKCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNaW5XaWR0aChtaW5Db250cm9sU2l6
ZS53aWR0aCgpKTsKICAgICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLmhlaWdodCgpICE9IHN0eWxl
Lm1pbkhlaWdodCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0TWluSGVpZ2h0KG1pbkNvbnRyb2xT
aXplLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgLy8gRm9udAotICAgICAg
ICBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0
LCBzdHlsZS5mb250KCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgICAgIGlmIChjb250
cm9sRm9udCAhPSBzdHlsZS5mb250KCkuZm9udERlc2NyaXB0aW9uKCkpIHsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGNvbnRyb2xGb250ID0gbV90aGVtZS0+Y29udHJvbEZvbnQocGFydCwgc3R5
bGUuZm9udENhc2NhZGUoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgaWYgKGNv
bnRyb2xGb250ICE9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCkpIHsKICAg
ICAgICAgICAgIC8vIE5vdyB1cGRhdGUgb3VyIGZvbnQuCiAgICAgICAgICAgICBpZiAoc3R5bGUu
c2V0Rm9udERlc2NyaXB0aW9uKGNvbnRyb2xGb250KSkKLSAgICAgICAgICAgICAgICBzdHlsZS5m
b250KCkudXBkYXRlKDApOworICAgICAgICAgICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBk
YXRlKDApOwogICAgICAgICB9CiAgICAgICAgIC8vIFJlc2V0IG91ciBsaW5lLWhlaWdodAogICAg
ICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKQEAgLTEyNTcsNyArMTI1Nyw3IEBAIFN0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3REZWZh
dWx0TGFiZWwKICAgICByZXR1cm4gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKIH0K
IAotU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlz
dCogZmlsZUxpc3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZp
bGVzQWxsb3dlZCkgY29uc3QKK1N0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3ROYW1lRm9yV2lk
dGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50
IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAogewogICAgIGlmICh3aWR0
aCA8PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0RGVmYXVs
dExhYmVsKGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3Ry
aW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGlu
dCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7CisgICAgdmlydHVhbCBT
dHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7CiAKICAg
ICBlbnVtIEZpbGVVcGxvYWREZWNvcmF0aW9ucyB7IFNpbmdsZUZpbGUsIE11bHRpcGxlRmlsZXMg
fTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYgLyppbnB1dFJlbmRlcmVyKi8sIGNvbnN0IFJlbmRlck9iamVjdCYgLypi
dXR0b25SZW5kZXJlciovLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbios
IEZpbGVVcGxvYWREZWNvcmF0aW9ucykgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw4ICszNCw4IEBACiAjaW1wb3J0ICJEYXRlQ29tcG9uZW50cy5oIgogI2ltcG9ydCAi
RG9jdW1lbnQuaCIKICNpbXBvcnQgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQu
aCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBv
cnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkdyYWRpZW50Lmgi
CkBAIC01NDUsNyArNTQ1LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0U2VsZWN0TGlzdEJ1dHRvblN0
eWxlKAogICAgIAogY2xhc3MgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudCA6IHB1YmxpYyBN
ZWFzdXJlVGV4dENsaWVudCB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENs
aWVudChjb25zdCBGb250JiBmb250LCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQorICAgIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgICAgIDogbV9mb250KGZvbnQpCiAgICAgICAgICwgbV9y
ZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KQogICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCkBAIC01
NTcsNyArNTU3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9mb250LndpZHRoKHJ1bik7
CiAgICAgfQogcHJpdmF0ZToKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9u
dENhc2NhZGUmIG1fZm9udDsKICAgICBSZW5kZXJPYmplY3QmIG1fcmVuZGVyT2JqZWN0OwogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBtX3N0eWxlOwogfTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGF0
aWMgdm9pZCBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEVuZm9yY2UgdGhlIHdpZHRoIGFuZCBzZXQgdGhlIGJveC1zaXppbmcgdG8gY29udGVu
dC1ib3ggdG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIHBhZGRpbmcuCi0gICAgRm9udCBmb250ID0g
c3R5bGUuZm9udCgpOworICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
OwogICAgIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVy
ZXIoKTsKICAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVu
ZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAko
cmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxl
TGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRo
KGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQgd2lkdGgsIGJvb2wgbXVs
dGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgRmxvYXRSZWN0IGNvbnZl
cnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0
IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgxNyw3ICs4MTcs
NyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAgICAgc3R5bGUu
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAKICAgICBp
ZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0
eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRl
KDApOwogfQogCiBOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5
c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdApAQCAtMTk5Nyw3ICsxOTk3LDcgQEAg
TlNUZXh0RmllbGRDZWxsKiBSZW5kZXJUaGVtZU1hYzo6dGV4dEZpZQogICAgIHJldHVybiBtX3Rl
eHRGaWVsZC5nZXQoKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lTWFjOjpmaWxlTGlzdE5hbWVG
b3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3
aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKK1N0cmluZyBSZW5kZXJUaGVt
ZU1hYzo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2Vk
KSBjb25zdAogewogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZp
c2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6
OmFzY2VudEFuZERlc2NlbnRGb3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0
eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+
aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5p
c05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFw
cGVuZCgmYm94TGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKSk7CisgICAgICAgIHVz
ZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNl
ZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFz
Y2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUoKSk7CkBAIC0xMDE3LDcgKzEw
MTcsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OnZlcnRpY2FsUG9zaXRpCiAgICAgCiAg
ICAgaWYgKHZlcnRpY2FsQWxpZ24gIT0gQkFTRUxJTkUpIHsKICAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHBhcmVudExpbmVTdHlsZSA9IGZpcnN0TGluZSA/IHBhcmVudC0+Zmlyc3RMaW5lU3R5
bGUoKSA6IHBhcmVudC0+c3R5bGUoKTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHBhcmVu
dExpbmVTdHlsZS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcGFy
ZW50TGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3MoKTsKICAgICAgICAgaW50IGZvbnRTaXplID0g
Zm9udC5waXhlbFNpemUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTcg
KzE4NCwxNyBAQCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRo
ZSBwcmltYXJ5IGZvbnQuCi0gICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpOworICAgIGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5p
c0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYg
dGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAg
ICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVUZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291
bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1b3RlKCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZy
YWdtZW50KCkKICAgICAgICAgICAgIHx8IHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0eWxlLmZvbnQoKS5jb2Rl
UGF0aChUZXh0UnVuKHRleHRSZW5kZXJlci50ZXh0KCkpKSAhPSBGb250OjpTaW1wbGUpCisgICAg
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVy
LnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250
RGF0YSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3Bw
CShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dEZsb3dDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewogCiBGbG93
Q29udGVudHM6OlN0eWxlOjpTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBm
b250KHN0eWxlLmZvbnQoKSkKKyAgICA6IGZvbnQoc3R5bGUuZm9udENhc2NhZGUoKSkKICAgICAs
IHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24oKSkKICAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShz
dHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKICAgICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5w
cmVzZXJ2ZU5ld2xpbmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAkocmV2aXNpb24gMTc4NDE4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBTaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzX2gKICNkZWZpbmUgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c19o
CiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiYnJlYWtfbGluZXMuaCIKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBT
dHlsZSB7CiAgICAgICAgIGV4cGxpY2l0IFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKLSAg
ICAgICAgY29uc3QgRm9udCYgZm9udDsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQ7
CiAgICAgICAgIEVUZXh0QWxpZ24gdGV4dEFsaWduOwogICAgICAgICBib29sIGNvbGxhcHNlV2hp
dGVzcGFjZTsKICAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3Bw
CShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9p
ZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbAogICAgIGJvb2wgZGVidWdCb3Jk
ZXJzRW5hYmxlZCA9IGZsb3cuZnJhbWUoKS5zZXR0aW5ncygpLnNpbXBsZUxpbmVMYXlvdXREZWJ1
Z0JvcmRlcnNFbmFibGVkKCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSAqcGFp
bnRJbmZvLmNvbnRleHQ7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4
dFBhaW50U3R5bGUgdGV4dFBhaW50U3R5bGUgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUoZmxvdy5m
cmFtZSgpLCBzdHlsZSwgcGFpbnRJbmZvKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCwgdGV4dFBhaW50U3R5bGUuc3Ryb2tlV2lkdGggPiAwKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
OCArMTIwLDggQEAgUnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsbwogICAg
ICwgbV9saW5lSGVpZ2h0KGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSkKICAgICAsIG1fYmFzZWxp
bmUoYmFzZWxpbmVGcm9tRmxvdyhmbG93KSkKICAgICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9y
ZShmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSkKLSAgICAsIG1fYXNjZW50KGZsb3cuc3R5
bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkKLSAgICAsIG1fZGVzY2VudChmbG93
LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpKQorICAgICwgbV9hc2NlbnQo
Zmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkKKyAgICAs
IG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmRlc2Nl
bnQoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9T
aXppbmcuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9v
bCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3ROb2RlU2l6ZQogICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoYXZlcmFnZVNpemUpOwog
ICAgICAgICAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwot
ICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50
KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0
eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1
cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgdGV4dC0+cGFy
ZW50KCktPnNldFN0eWxlKHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBwYXJlbnRSZW5kZXJlciA9IHRleHQtPnBhcmVudCgp
OwpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9k
ZVNpemUKICAgICAgICAgICAgIGlmIChsaXN0TWFya2VyUmVuZGVyZXItPmlzTGlzdE1hcmtlcigp
KSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVu
ZGVyU3R5bGVXaXRoU3RhdGUobGlzdE1hcmtlclJlbmRlcmVyLT5zdHlsZSgpKTsKICAgICAgICAg
ICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAg
ICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50
KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAg
ICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCku
ZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPigqbGlzdE1hcmtlclJlbmRlcmVyKS5zZXRTdHlsZShz
dHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MTk2LDcgKzE5Niw3IEBAIGJvb2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUK
ICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgobGlu
ZUhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0U3Bl
Y2lmaWVkTGluZUhlaWdodChsaW5lSGVpZ2h0TGVuZ3RoKTsKICAgICAgICAgICAgICAgICBuZXdQ
YXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAg
ICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRv
Y3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAg
ICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05v
ZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAg
ICAgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+c2V0U3R5bGUobmV3UGFyZW50U3R5bGUucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMCw3ICsyMjAs
NyBAQCB2b2lkIFRleHRBdXRvU2l6aW5nVmFsdWU6OnJlc2V0KCkKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUob3JpZ2luYWxTaXplKTsKICAgICAgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHRleHQt
PnN0eWxlKCkpOwogICAgICAgICAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwotICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05v
ZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9j
dW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAg
ICAgdGV4dC0+cGFyZW50KCktPnNldFN0eWxlKHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
ICAgICB9CiAgICAgICAgIC8vIFJlc2V0IHRoZSBsaW5lIGhlaWdodCBvZiB0aGUgcGFyZW50LgpA
QCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAg
ICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdQYXJlbnRTdHlsZSA9IGNsb25lUmVuZGVy
U3R5bGVXaXRoU3RhdGUocGFyZW50U3R5bGUpOwogICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUt
PnNldExpbmVIZWlnaHQob3JpZ2luYWxMaW5lSGVpZ2h0KTsKICAgICAgICAgICAgIG5ld1BhcmVu
dFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAg
IG5ld1BhcmVudFN0eWxlLT5mb250KCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgp
LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBuZXdQ
YXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50
KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIHBh
cmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQYXJlbnRTdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRU
ZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udCYgZm9udCwKK1RleHRQYWludGVyOjpUZXh0UGFpbnRl
cihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBi
b29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
CiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRleHRSdW4sIGludCBlbmRQb3NpdGlvbkluVGV4dEJv
eFN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIFJl
bmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQsIFRleHRSdW4mIHRleHRSdW4sCiAgICAgRmxv
YXRSZWN0JiBib3hSZWN0LCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJr
T2Zmc2V0LCBjb25zdCBTaGFkb3dEYXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBz
ZWxlY3Rpb25TaGFkb3csCiAgICAgYm9vbCB0ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRT
dHlsZSYgdGV4dFBhaW50U3R5bGUsIFRleHRQYWludFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxl
KQpAQCAtNTYsNyArNTYsNyBAQCBUZXh0UGFpbnRlcjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250
ZXh0CiB7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1
biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssCitzdGF0aWMgdm9pZCBkcmF3VGV4
dE9yRW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVt
cGhhc2lzTWFyaywKICAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgaW50IGZyb20sIGNvbnN0IGludCB0bykKIHsKICAgICBpZiAoZW1waGFz
aXNNYXJrLmlzRW1wdHkoKSkKQEAgLTExMyw3ICsxMTMsNyBAQCBTaGFkb3dBcHBsaWVyOjp+U2hh
ZG93QXBwbGllcigpCiAgICAgICAgIG1fY29udGV4dC5jbGVhclNoYWRvdygpOwogfQogCi1zdGF0
aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZW1waGFzaXNNYXJrLAorc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1
biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssCiAgICAgaW50IGVt
cGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1
bmNhdGlvblBvaW50LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJl
Y3QmIGJveFJlY3QsCiAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBib29sIHN0cm9rZWQs
IGJvb2wgaG9yaXpvbnRhbCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5l
IEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjCiAKIGNsYXNzIFRleHRQYWludGVyIHsKIHB1Ymxp
YzoKLSAgICBUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmLCBib29sIHBhaW50U2VsZWN0ZWRU
ZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0IEZvbnQmLAor
ICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRP
bmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udENhc2NhZGUm
LAogICAgIGludCBzdGFydFBvc2l0aW9uSW5UZXh0UnVuLCBpbnQgZW5kUG9zaXRpb25JblRleHRC
b3hTdHJpbmcsIGludCBsZW5ndGgsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBS
ZW5kZXJDb21iaW5lVGV4dCosCiAgICAgVGV4dFJ1biYsIEZsb2F0UmVjdCYgYm94UmVjdCwgRmxv
YXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGVtcGhhc2lzTWFya09mZnNldCwgY29uc3QgU2hhZG93
RGF0YSogdGV4dFNoYWRvdywgY29uc3QgU2hhZG93RGF0YSogc2VsZWN0aW9uU2hhZG93LAogICAg
IGJvb2wgdGV4dEJveElzSG9yaXpvbnRhbCwgVGV4dFBhaW50U3R5bGUmIG5vblNlbGVjdGlvblBh
aW50U3R5bGUsIFRleHRQYWludFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxlKTsKQEAgLTYxLDcg
KzYxLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTaGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRv
dzsKICAgICBib29sIG1fcGFpbnRTZWxlY3RlZFRleHRPbmx5OwogICAgIGJvb2wgbV9wYWludFNl
bGVjdGVkVGV4dFNlcGFyYXRlbHk7Ci0gICAgY29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgaW50IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsK
ICAgICBpbnQgbV9lbmRQb3NpdGlvbkluVGV4dFJ1bjsKICAgICBpbnQgbV9sZW5ndGg7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtp
bmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4NiwxMyArNDg2LDEzIEBAIGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJ
Zk5lZWRlZChSZW5kZXIKICAgICBkb3duY2FzdDxSZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51
cGRhdGVDb3VudGVyKCk7CiB9CiAKLWlubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVu
ZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnQmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApCitpbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhl
bldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKIHsKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4g
Zm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwg
c3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBvcywgYm9v
bCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCitB
TFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zLCBi
b29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkK
IHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogCkBAIC01
MDEsNyArNTAxLDcgQEAgQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dAog
ICAgICAgICByZXR1cm4gdGV4dC0+d2lkdGgoZnJvbSwgbGVuLCBmb250LCB4UG9zLCAmZmFsbGJh
Y2tGb250cywgJmdseXBoT3ZlcmZsb3cpOwogCiAgICAgaWYgKGxheW91dCkKLSAgICAgICAgcmV0
dXJuIEZvbnQ6OndpZHRoKCpsYXlvdXQsIGZyb20sIGxlbiwgJmZhbGxiYWNrRm9udHMpOworICAg
ICAgICByZXR1cm4gRm9udENhc2NhZGU6OndpZHRoKCpsYXlvdXQsIGZyb20sIGxlbiwgJmZhbGxi
YWNrRm9udHMpOwogCiAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bih0ZXh0LCBmb250LCB0ZXh0LCBmcm9tLCBsZW4sIHN0eWxlKTsKICAgICBydW4uc2V0Q2hh
cmFjdGVyc0xlbmd0aCh0ZXh0LT50ZXh0TGVuZ3RoKCkgLSBmcm9tKTsKQEAgLTUyMSw3ICs1MjEs
NyBAQCBpbmxpbmUgdm9pZCBlbnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJveChMCiAgICAgbGluZU1p
ZHBvaW50U3RhdGUuc3RvcElnbm9yaW5nU3BhY2VzKElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJh
Z3JhcGhTZXBhcmF0b3IucmVuZGVyZXIoKSwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQo
KSkpOwogfQogCi1pbmxpbmUgdm9pZCB0cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBj
b25zdCBGb250JiBmb250LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCBpbnQgY29uc2VjdXRpdmVIeXBoZW5h
dGVkTGluZXNMaW1pdCwgaW50IG1pbmltdW1QcmVmaXhMaW1pdCwgaW50IG1pbmltdW1TdWZmaXhM
aW1pdCwgdW5zaWduZWQgbGFzdFNwYWNlLCB1bnNpZ25lZCBwb3MsIGZsb2F0IHhQb3MsIGludCBh
dmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNl
LCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGlu
dCBuZXh0QnJlYWthYmxlLCBib29sJiBoeXBoZW5hdGVkKQoraW5saW5lIHZvaWQgdHJ5SHlwaGVu
YXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5h
dGVkTGluZXMsIGludCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11
bVByZWZpeExpbWl0LCBpbnQgbWluaW11bVN1ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2Us
IHVuc2lnbmVkIHBvcywgZmxvYXQgeFBvcywgaW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4
ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2lu
ZywgSW5saW5lSXRlcmF0b3ImIGxpbmVCcmVhaywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5
cGhlbmF0ZWQpCiB7CiAgICAgLy8gTWFwICdoeXBoZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06
IGF1dG87JyB0byAyLgogICAgIHVuc2lnbmVkIG1pbmltdW1QcmVmaXhMZW5ndGg7CkBAIC02MTUs
MTIgKzYxNSwxMiBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAg
ICAgfQogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gbGluZVN0eWxlKCpyZW5kZXJU
ZXh0LnBhcmVudCgpLCBtX2xpbmVJbmZvKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUu
Zm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUo
KTsKICAgICBib29sIGlzRml4ZWRQaXRjaCA9IGZvbnQuaXNGaXhlZFBpdGNoKCk7CiAgICAgYm9v
bCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29y
ZTo6Y2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsKIAogICAgIHVuc2lnbmVkIGxhc3RTcGFj
ZSA9IG1fY3VycmVudC5vZmZzZXQoKTsKLSAgICBmbG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVu
dFN0eWxlLT5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICBmbG9hdCB3b3JkU3BhY2luZyA9IG1f
Y3VycmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7CiAgICAgZmxvYXQgbGFz
dFNwYWNlV29yZFNwYWNpbmcgPSAwOwogICAgIGZsb2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1
cmVtZW50ID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJy
ZWFrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5l
QnJlYWtlci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9MaW5lQnJlYWtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVj
dCBSZW5kZXJUZXh0SW5mbyB7CiAgICAgUmVuZGVyVGV4dCogbV90ZXh0OwogICAgIE93blB0cjxU
ZXh0TGF5b3V0PiBtX2xheW91dDsKICAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJl
YWtJdGVyYXRvcjsKLSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUqIG1fZm9udDsKIH07CiAKIGNsYXNzIExpbmVCcmVha2VyIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBpbmxpbmUgYm9vbCByZXF1aXJl
c0xpbmVCb3hGb3JDb250ZW50KGNvCiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSA9IGxpbmVTdHlsZSgqcGFyZW50LCBsaW5lSW5mbyk7CiAgICAgICAgIGlmIChmbG93U3R5
bGUubGluZUhlaWdodCgpICE9IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQoKQogICAgICAgICAgICAg
fHwgZmxvd1N0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkKLSAgICAgICAgICAgIHx8ICFwYXJlbnRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJ
ZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChmbG93U3R5bGUuZm9udCgpLmZvbnRNZXRy
aWNzKCkpKQorICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChmbG93U3R5bGUuZm9u
dENhc2NhZGUoKS5mb250TWV0cmljcygpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29u
c3QgU3RyaW5nJiBzdHIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh1bml0
ID09ICJlbSIpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZv
bnQoKS5zaXplKCk7CisgICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5m
b250Q2FzY2FkZSgpLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlm
ICh1bml0ID09ICJleCIpIHsKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIHBhcnNlTWF0aE1MTmFt
ZWRTcGFjZShjb25zdCBTdHJpbmcmCiAgICAgICAgICAgICBsZW5ndGggPSAtNzsgICAgICAgIAog
ICAgIH0KICAgICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gbGVuZ3RoICog
c3R5bGUtPmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGgg
KiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShyZXZpc2lv
biAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5MSw4ICsxMTkxLDggQEAgdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBtX29wZXJhdG9yRmxh
Z3MgPSBlbnRyeS0+ZmxhZ3M7CiAKICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSBp
cyBzcGVjaWZpZWQgYXMgbXVsdGlwbGUgb2YgMS8xOGVtLgotICAgIG1fbGVhZGluZ1NwYWNlID0g
ZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OwotICAgIG1fdHJhaWxp
bmdTcGFjZSA9IGVudHJ5LT5yc3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAg
ICBtX2xlYWRpbmdTcGFjZSA9IGVudHJ5LT5sc3BhY2UgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCku
c2l6ZSgpIC8gMTg7CisgICAgbV90cmFpbGluZ1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxl
KCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkKQEAgLTEyMjksOSArMTIyOSw5IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHIKICAgICAgICAgbV9vcGVyYXRvckZs
YWdzICY9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UgfCBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OlNlcGFyYXRvcjsgLy8gVGhpcyByZXNldHMgYWxsIGJ1dCB0aGUgRmVuY2UgYW5k
IFNlcGFyYXRvciBwcm9wZXJ0aWVzLgogICAgIGVsc2UKICAgICAgICAgbV9vcGVyYXRvckZsYWdz
ID0gMDsgLy8gVGhpcyByZXNldHMgYWxsIHRoZSBvcGVyYXRvciBwcm9wZXJ0aWVzLgotICAgIG1f
bGVhZGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNl
dHMgbGVhZGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3BhY2UiLgotICAgIG1fdHJhaWxpbmdTcGFj
ZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5n
IHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCi0gICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250
KCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0byAiMWVtIi4KKyAgICBtX2xlYWRpbmdT
cGFjZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7IC8vIFRoaXMgc2V0
cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCisgICAgbV90cmFpbGluZ1NwYWNl
ID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIHRy
YWlsaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCisgICAgbV9taW5TaXplID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnNpemUoKTsgLy8gVGhpcyBzZXRzIG1pbnNpemUgdG8gIjFlbSIuCiAg
ICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0VW5pdDsgLy8gVGhpcyBzZXRzIG1heHNpemUg
dG8gImluZmluaXR5Ii4KIAogICAgIGlmIChtX3RleHRDb250ZW50KSB7CkBAIC0xMzU1LDcgKzEz
NTUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVyCiAgICAgICAg
IFJlbmRlck1hdGhNTFRva2VuOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAg
ICAgICBpZiAoaXNJbnZpc2libGVPcGVyYXRvcigpKSB7CiAgICAgICAgICAgICAvLyBJbiBzb21l
IGZvbnRzLCBnbHlwaHMgZm9yIGludmlzaWJsZSBvcGVyYXRvcnMgaGF2ZSBub256ZXJvIHdpZHRo
LiBDb25zZXF1ZW50bHksIHdlIHN1YnRyYWN0IHRoYXQgd2lkdGggaGVyZSB0byBhdm9pZCB3aWRl
IGdhcHMuCi0gICAgICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
bV90ZXh0Q29udGVudCwgZmFsc2UpOwogICAgICAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IGFk
dmFuY2VGb3JHbHlwaChkYXRhKTsKICAgICAgICAgICAgIEFTU0VSVChnbHlwaFdpZHRoIDw9IG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoIC09IGdseXBoV2lkdGg7CkBAIC0xMzY0LDcgKzEzNjQsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAg
IEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJh
Y3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwog
ICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAg
IGlmICghbV9pc1ZlcnRpY2FsKSB7CiAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0
cmV0Y2hTaXplKCkpCkBAIC0xNTIxLDcgKzE1MjEsNyBAQCBib29sIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpnZXRHbHlwaEFzc2VtCiAgICAgaWYgKCFib3R0b20uZ2x5cGgpCiAgICAgICAgIGJvdHRv
bS5nbHlwaCA9IGV4dGVuc2lvbi5nbHlwaDsKIAotICAgIHRvcC5mb250RGF0YSA9ICZzdHlsZSgp
LmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGV4dGVuc2lvbi5mb250RGF0YSA9
IHRvcC5mb250RGF0YTsKICAgICBib3R0b20uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAg
aWYgKG1pZGRsZS5nbHlwaCkKQEAgLTE1MzgsOCArMTUzOCw4IEBAIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpTdHJldGNoeURhdGEgUmVuZGUKIAogICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNM
YXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5
Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBHbHlwaERh
dGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICBjb25zdCBhdXRv
JiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCk7CisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpOwogICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBo
LmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCiAgICAgICAgIHJldHVybiBkYXRhOwogCkBA
IC0xNTcwLDggKzE1NzAsOCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJl
bmRlCiAgICAgU3RyZXRjaHlEYXRhIGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0
YTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpOwotICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQo
KS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpOworICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBo
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIs
ICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgCiAgICAgaWYgKHByaW1h
cnlGb250RGF0YS5tYXRoRGF0YSgpICYmIGJhc2VHbHlwaC5mb250RGF0YSA9PSAmcHJpbWFyeUZv
bnREYXRhKSB7CiAgICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwpAQCAtMTYxOCwx
MiArMTYxOCwxMiBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAg
ICAgICAgICAgICByZXR1cm4gZGF0YTsKIAogICAgICAgICAvLyBXZSBjb252ZXJ0IHRoZSBsaXN0
IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRvIGEgbGlzdCBvZiBnbHlwaCBkYXRhLgotICAgICAg
ICBHbHlwaERhdGEgdG9wID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0
cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxzZSk7Ci0gICAgICAgIEdseXBoRGF0YSBleHRl
bnNpb24gPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFy
YWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKLSAgICAgICAgR2x5cGhEYXRhIGJvdHRvbSA9
IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+
Ym90dG9tQ2hhciwgZmFsc2UpOworICAgICAgICBHbHlwaERhdGEgdG9wID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hh
ciwgZmFsc2UpOworICAgICAgICBHbHlwaERhdGEgZXh0ZW5zaW9uID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9u
Q2hhciwgZmFsc2UpOworICAgICAgICBHbHlwaERhdGEgYm90dG9tID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hh
ciwgZmFsc2UpOwogICAgICAgICBHbHlwaERhdGEgbWlkZGxlOwogICAgICAgICBpZiAoc3RyZXRj
aHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIpCi0gICAgICAgICAgICBtaWRkbGUgPSBzdHlsZSgpLmZv
bnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIs
IGZhbHNlKTsKKyAgICAgICAgICAgIG1pZGRsZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsK
ICAgICAgICAgYXNzZW1ibHlEYXRhLnNldEdseXBoQXNzZW1ibHlNb2RlKHRvcCwgZXh0ZW5zaW9u
LCBib3R0b20sIG1pZGRsZSk7CiAgICAgfQogCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIG1fc3RyZXRjaHlEYXRh
ID0gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihtX3RleHRDb250ZW50KTsKICAgICBlbHNl
IHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFy
Z2UgZW5vdWdoLgotICAgICAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250KCku
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSk7CisgICAgICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgICAgIGZsb2F0IGJhc2VTaXplID0gbV9p
c1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VGb3JHbHlwaChi
YXNlR2x5cGgpOwogICAgICAgICBpZiAoc3RyZXRjaFNpemUoKSA8PSBiYXNlU2l6ZSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTE4MDIsNyArMTgwMiw3IEBAIExheW91dFJlY3QgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnBhaW50R2wKIAogICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKICAgICBidWZm
ZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udERhdGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7
Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udCgpLCAqZGF0YS5mb250
RGF0YSwgYnVmZmVyLCAwLCAxLCBvcmlnaW4pOworICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBo
cyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9y
aWdpbik7CiAKICAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7CiB9CkBAIC0xODk4LDcgKzE4OTgs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWludEluCiAgICAgICAgIExh
eW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKSk7CiAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJh
dG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlw
aEJvdW5kcy55KCkpOwotICAgICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5m
b250KCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwg
b3BlcmF0b3JPcmlnaW4pOworICAgICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUo
KS5mb250Q2FzY2FkZSgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBidWZm
ZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTk4MCw3ICsxOTgwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJl
bgogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3Io
KQogewotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAoIXByaW1hcnlGb250
RGF0YS5tYXRoRGF0YSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTk4OSw3ICsxOTg5LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbgogICAgIExheW91dFVu
aXQgd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsKIAogICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2Rl
KCkgPT0gRHJhd05vcm1hbCkgewotICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9u
dCgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0Q29udGVudCgpLCAhc3R5bGUoKS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpOworICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5j
ZUZvckdseXBoKGRhdGEpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9p
ZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdo
dEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlm
ICghc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlm
ICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsK
ICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBh
bHdheXMgbWFrZSB0aGUgcmFkaWNhbCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0
LgogICAgICAgICBkZXB0aEJlbG93QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2Vy
OwogICAgIH0KQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0
b3I6OmNvbXB1dAogewogICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7
CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkg
eworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERh
dGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZh
bHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3As
IGNvbXB1dGVkVmFsdWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhE
YXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
Lm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8s
IHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2
aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDE3ICsxOTksMTcgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHlsZSgpCiAKICAgICAvLyBXZSBzZXQgc29tZSBjb25z
dGFudHMgdG8gZHJhdyB0aGUgcmFkaWNhbCwgYXMgZGVmaW5lZCBpbiB0aGUgT3BlblR5cGUgTUFU
SCB0YWJsZXMuCiAKLSAgICBtX3J1bGVUaGlja25lc3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udCgp
LnNpemUoKTsKKyAgICBtX3J1bGVUaGlja25lc3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5zaXplKCk7CiAKICAgICAvLyBGSVhNRTogVGhlIHJlY29tbWVuZGVkIGRlZmF1bHQgZm9y
IG1fdmVydGljYWxHYXAgaW4gZGlzcGxheXN0eWxlIGlzIHJ1bGUgdGhpY2tuZXNzICsgMS80IHgt
aGVpZ2h0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4K
ICAgICBtX3ZlcnRpY2FsR2FwID0gMTEgKiBtX3J1bGVUaGlja25lc3MgLyA0OwogICAgIG1fZXh0
cmFBc2NlbmRlciA9IG1fcnVsZVRoaWNrbmVzczsKLSAgICBMYXlvdXRVbml0IGtlcm5CZWZvcmVE
ZWdyZWUgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0gICAgTGF5b3V0VW5pdCBr
ZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBM
YXlvdXRVbml0IGtlcm5CZWZvcmVEZWdyZWUgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNp
emUoKSAvIDE4OworICAgIExheW91dFVuaXQga2VybkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJj
ZW50ID0gMC42ZjsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCku
Zm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxl
KCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRv
JiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCk7CisgICAgaWYgKGF1dG8qIG1hdGhEYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1fdmVydGljYWxH
YXAgc2hvdWxkIHVzZSBSYWRpY2FsRGlzcGxheVN0eWxlVmVydGljYWwgaW4gZGlzcGxheSBtb2Rl
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICAg
ICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnRE
YXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsVmVydGljYWxHYXApOwogICAgICAgICBtX3J1
bGVUaGlja25lc3MgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlja25lc3MpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJ
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MVG9rZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxUb2tlbjo6dXBkYXRlU3R5bGUoKQogICAgICAgICAvLyBUaGlzIHRyaWVz
IHRvIGVtdWxhdGUgdGhlIGRlZmF1bHQgbWF0aHZhcmlhbnQgdmFsdWUgb24gPG1pPiB1c2luZyB0
aGUgQ1NTIGZvbnQtc3R5bGUgcHJvcGVydHkuCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSByZXZpc2VkIHdoZW4gbWF0aHZhcmlhbnQgaXMgaW1wbGVtZW50ZWQgKGh0dHA6Ly93a2J1
Zy84NTczNSkgYW5kIHdoZW4gZm9udHMgd2l0aCBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5
bWJvbHMgY2hhcmFjdGVycyBhcmUgbW9yZSBwb3B1bGFyLgogICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uKG5ld1N0eWxlLmdldCgpLmZvbnREZXNjcmlwdGlvbigpKTsKLSAg
ICAgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250KCku
Zm9udFNlbGVjdG9yKCk7CisgICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3
U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICAgICAgaWYgKCFt
X2NvbnRhaW5zRWxlbWVudCAmJiBlbGVtZW50KCkudGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3Bh
Y2UoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKS5sZW5ndGgoKSA9PSAxICYmICF0b2tlbkVsZW1lbnQu
aGFzQXR0cmlidXRlKG1hdGh2YXJpYW50QXR0cikpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXRhbGljKHRydWUpOwogICAgICAgICBpZiAobmV3U3R5bGUuZ2V0KCkuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5m
b250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5m
b250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogICAgIH0KIAogICAgIHdyYXBwZXIt
PnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udFNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveFN0eWxlLmgiCiAjaW5jbHVkZSAiUGFn
aW5hdGlvbi5oIgpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmluaGVyaXRl
ZE5vdEVxdWFsKGNvbnMKIH0KIAogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotaW5s
aW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChjb25zdCBGb250JiBmb250KQoraW5saW5lIHVu
c2lnbmVkIGNvbXB1dGVGb250SGFzaChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICB1
bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CiAgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaChm
b250LmZvbnREZXNjcmlwdGlvbigpLmZpcnN0RmFtaWx5KCkuaW1wbCgpKSwKQEAgLTU1MSw3ICs1
NTEsNyBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjCiAjaWYgRU5B
QkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgICAgIHx8IGluaGVyaXRlZC0+c3BlY2lmaWVk
TGluZUhlaWdodCAhPSBvdGhlci5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRp
ZgotICAgICAgICB8fCBpbmhlcml0ZWQtPmZvbnQgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250Cisg
ICAgICAgIHx8IGluaGVyaXRlZC0+Zm9udENhc2NhZGUgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250
Q2FzY2FkZQogICAgICAgICB8fCBpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcg
IT0gb3RoZXIuaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgIHx8
IGluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgIT0gb3RoZXIuaW5oZXJpdGVkLT52
ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWRfZmxhZ3MuX2JveF9k
aXJlY3Rpb24gIT0gb3RoZXIuaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC0xMTg0
LDcgKzExODQsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjpoeXBoZW5TCiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRlcGVuZCBvbiBsb2NhbGUuCiAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuTWludXNTdHJpbmcsICgm
aHlwaGVuTWludXMsIDEpKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBoeXBoZW5TdHJpbmcsICgmaHlwaGVuLCAxKSk7Ci0gICAgcmV0dXJuIGZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3Ry
aW5nIDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5
cGhlbk1pbnVzU3RyaW5nOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjp0
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgY29uc3QKQEAgLTEzNDAsMjAgKzEzNDAsMjAgQEAgY29u
c3QgQW5pbWF0aW9uKiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbgogICAgIHJldHVybiAwOwogfQog
Ci1jb25zdCBGb250JiBSZW5kZXJTdHlsZTo6Zm9udCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRl
ZC0+Zm9udDsgfQotY29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygp
IGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5mb250TWV0cmljcygpOyB9Ci1jb25zdCBG
b250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNj
YWRlJiBSZW5kZXJTdHlsZTo6Zm9udENhc2NhZGUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQt
PmZvbnRDYXNjYWRlOyB9Citjb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250TWV0cmljcygp
OyB9Citjb25zdCBGb250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24o
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
OyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6c3BlY2lmaWVkRm9udFNpemUoKSBjb25zdCB7IHJldHVy
biBmb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxl
Ojpjb21wdXRlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29t
cHV0ZWRTaXplKCk7IH0KLWludCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7IHJldHVy
biBpbmhlcml0ZWQtPmZvbnQucGl4ZWxTaXplKCk7IH0KK2ludCBSZW5kZXJTdHlsZTo6Zm9udFNp
emUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpOyB9
CiAKIGNvbnN0IExlbmd0aCYgUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gcmFyZUluaGVyaXRlZERhdGEtPndvcmRTcGFjaW5nOyB9Ci1mbG9hdCBSZW5kZXJTdHlsZTo6
bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5sZXR0ZXJTcGFj
aW5nKCk7IH0KK2Zsb2F0IFJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCk7IH0KIAogYm9vbCBSZW5k
ZXJTdHlsZTo6c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgdikKIHsK
LSAgICBpZiAoaW5oZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKLSAgICAg
ICAgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250ID0gRm9udCh2LCBpbmhlcml0ZWQtPmZvbnQubGV0
dGVyU3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgaWYgKGlu
aGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgeworICAgICAgICBp
bmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUodiwgaW5oZXJpdGVk
LT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udENhc2NhZGUud29y
ZFNwYWNpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNDA0LDcgKzE0MDQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2lu
ZyhMZW5ndGggCiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUGVyY2VudDoKLSAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFsdWUucGVyY2Vu
dCgpICogZm9udCgpLnNwYWNlV2lkdGgoKSAvIDEwMDsKKyAgICAgICAgZm9udFdvcmRTcGFjaW5n
ID0gdmFsdWUucGVyY2VudCgpICogZm9udENhc2NhZGUoKS5zcGFjZVdpZHRoKCkgLyAxMDA7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9
IHZhbHVlLnZhbHVlKCk7CkBAIC0xNDE3LDExICsxNDE3LDExIEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldFdvcmRTcGFjaW5nKExlbmd0aCAKICAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gMDsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRXb3Jk
U3BhY2luZyhmb250V29yZFNwYWNpbmcpOworICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENh
c2NhZGUuc2V0V29yZFNwYWNpbmcoZm9udFdvcmRTcGFjaW5nKTsKICAgICByYXJlSW5oZXJpdGVk
RGF0YS5hY2Nlc3MoKS0+d29yZFNwYWNpbmcgPSBXVEY6Om1vdmUodmFsdWUpOwogfQogCi12b2lk
IFJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYpIHsgaW5oZXJpdGVkLmFjY2Vz
cygpLT5mb250LnNldExldHRlclNwYWNpbmcodik7IH0KK3ZvaWQgUmVuZGVyU3R5bGU6OnNldExl
dHRlclNwYWNpbmcoZmxvYXQgdikgeyBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNl
dExldHRlclNwYWNpbmcodik7IH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxv
YXQgc2l6ZSkKIHsKQEAgLTE0MzQsNyArMTQzNCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZv
bnRTaXplKGZsb2F0IHNpemUKICAgICBlbHNlCiAgICAgICAgIHNpemUgPSBzdGQ6Om1pbihtYXhp
bXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKIAotICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZv
bnRTZWxlY3RvciA9IGZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICBGb250U2VsZWN0b3IqIGN1
cnJlbnRGb250U2VsZWN0b3IgPSBmb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgIEZv
bnREZXNjcmlwdGlvbiBkZXNjKGZvbnREZXNjcmlwdGlvbigpKTsKICAgICBkZXNjLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7CiAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CkBAIC0xNDQ4
LDcgKzE0NDgsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXplCiAj
ZW5kaWYKIAogICAgIHNldEZvbnREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBmb250KCkudXBkYXRl
KGN1cnJlbnRGb250U2VsZWN0b3IpOworICAgIGZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRG
b250U2VsZWN0b3IpOwogfQogCiB2b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFkb3dFeHRlbnQoY29u
c3QgU2hhZG93RGF0YSogc2hhZG93LCBMYXlvdXRVbml0ICZ0b3AsIExheW91dFVuaXQgJnJpZ2h0
LCBMYXlvdXRVbml0ICZib3R0b20sIExheW91dFVuaXQgJmxlZnQpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTc4
NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBDb250ZW50RGF0YTsKIGNsYXNz
IENvdW50ZXJDb250ZW50OwogY2xhc3MgQ3Vyc29yTGlzdDsKIGNsYXNzIEZpbHRlck9wZXJhdGlv
bnM7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGb250TWV0cmljczsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBNYXNrSW1hZ2VPcGVyYXRpb247CkBAIC02ODksNyArNjg5
LDcgQEAgcHVibGljOgogICAgIEVDbGVhciBjbGVhcigpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVy
aXRlZF9mbGFncy5jbGVhcigpOyB9CiAgICAgRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KCkgY29u
c3QgeyByZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLnRhYmxlTGF5b3V0KCk7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgIGZsb2F0IHNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAkocmV2
aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5o
ZXJpdGVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgaW5saW5lIFN0
eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZQogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQogICAgICwgc3BlY2lmaWVkTGluZUhlaWdodChvLnNwZWNpZmllZExpbmVIZWlnaHQp
CiAjZW5kaWYKLSAgICAsIGZvbnQoby5mb250KQorICAgICwgZm9udENhc2NhZGUoby5mb250Q2Fz
Y2FkZSkKICAgICAsIGNvbG9yKG8uY29sb3IpCiAgICAgLCB2aXNpdGVkTGlua0NvbG9yKG8udmlz
aXRlZExpbmtDb2xvcikKIHsKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBTdHlsZUluaGVyaXRlZERh
dGE6Om9wZXJhdG9yPT0oY29ucwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAg
ICAgICAmJiBzcGVjaWZpZWRMaW5lSGVpZ2h0ID09IG8uc3BlY2lmaWVkTGluZUhlaWdodAogI2Vu
ZGlmCi0gICAgICAgICYmIGZvbnQgPT0gby5mb250CisgICAgICAgICYmIGZvbnRDYXNjYWRlID09
IG8uZm9udENhc2NhZGUKICAgICAgICAgJiYgY29sb3IgPT0gby5jb2xvcgogICAgICAgICAmJiB2
aXNpdGVkTGlua0NvbG9yID09IG8udmlzaXRlZExpbmtDb2xvcgogICAgICAgICAmJiBob3Jpem9u
dGFsX2JvcmRlcl9zcGFjaW5nID09IG8uaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERh
dGEuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW5oZXJpdGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
ZGVmaW5lIFN0eWxlSW5oZXJpdGVkRGF0YV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIExlbmd0aCBzcGVjaWZpZWRMaW5lSGVp
Z2h0OwogI2VuZGlmCiAKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udENhc2Nh
ZGU7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgQ29sb3IgdmlzaXRlZExpbmtDb2xvcjsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTMgKzIy
NSwxMyBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OnVwZGF0ZVNjYWxlZEZvCiAgICAgY29t
cHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSgqdGhpcywgc3R5bGUoKSwgbV9zY2FsaW5nRmFjdG9y
LCBtX3NjYWxlZEZvbnQpOwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVO
ZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udCYgc2NhbGVkRm9u
dCkKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHls
ZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGZsb2F0JiBzY2FsaW5nRmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCkKIHsKICAgICAv
LyBBbHRlciBmb250LXNpemUgdG8gdGhlIHJpZ2h0IG9uLXNjcmVlbiB2YWx1ZSB0byBhdm9pZCBz
Y2FsaW5nIHRoZSBnbHlwaHMgdGhlbXNlbHZlcywgZXhjZXB0IHdoZW4gR2VvbWV0cmljUHJlY2lz
aW9uIGlzIHNwZWNpZmllZAogICAgIHNjYWxpbmdGYWN0b3IgPSBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjYWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IocmVuZGVyZXIpOwogICAgIGlm
IChzY2FsaW5nRmFjdG9yID09IDEgfHwgIXNjYWxpbmdGYWN0b3IgfHwgc3R5bGUuZm9udERlc2Ny
aXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUoKSA9PSBHZW9tZXRyaWNQcmVjaXNpb24pIHsKICAg
ICAgICAgc2NhbGluZ0ZhY3RvciA9IDE7Ci0gICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250
KCk7CisgICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpjb21wdXRlTmV3U2NhbAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJldHRlciBoYW5k
bGUgdGhlIGNhc2Ugd2hlbiB3ZSBjb21wdXRlIHZlcnkgc21hbGwgZm9udHMgYmVsb3cgKGJlbG93
IDFwdCkuCiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0
ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplRm9yU1ZHSW5saW5lVGV4dChmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzY2Fs
aW5nRmFjdG9yLCByZW5kZXJlci5kb2N1bWVudCgpKSk7CiAKLSAgICBzY2FsZWRGb250ID0gRm9u
dChmb250RGVzY3JpcHRpb24sIDAsIDApOworICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShm
b250RGVzY3JpcHRpb24sIDAsIDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHJlbmRlcmVyLmRv
Y3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAj
aWZuZGVmIFJlbmRlclNWR0lubGluZVRleHRfaAogI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVUZXh0
X2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIlRleHQuaCIKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgogICAgIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gJm1fbGF5b3V0QXR0
cmlidXRlczsgfQogCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGluZ0ZhY3RvcjsgfQotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX3NjYWxlZEZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQogICAgIHZvaWQgdXBkYXRlU2NhbGVkRm9u
dCgpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3Rvciwg
Rm9udCYgc2NhbGVkRm9udCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZU5ld1NjYWxlZEZvbnRG
b3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0JiBz
Y2FsaW5nRmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCk7CiAKICAgICAvLyBQcmVzZXJ2
ZXMgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uIGZvciB0aGUgdXNlIGluIERSVC4gSXQga25vd3Mg
aG93IHRvIHJvdW5kIGFuZCBkb2VzIGEgYmV0dGVyIGpvYiB0aGFuIGVuY2xvc2luZ0ludFJlY3Qu
CiAgICAgRmxvYXRSZWN0IGZsb2F0TGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OwpAQCAtNjUsNyAr
NjUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRC
b3g+IGNyZWF0ZVRleHRCb3goKSBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc2NhbGluZ0ZhY3Rv
cjsKLSAgICBGb250IG1fc2NhbGVkRm9udDsKKyAgICBGb250Q2FzY2FkZSBtX3NjYWxlZEZvbnQ7
CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMgbV9sYXlvdXRBdHRyaWJ1dGVzOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAg
RmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlYwogICAgIGZsb2F0IHNjYWxp
bmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGlu
Z0ZhY3Rvcik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2Fs
ZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSByZW5kZXJlcigp
LnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBGb250TWV0cmljcyYgc2NhbGVkRm9udE1ldHJpY3Mg
PSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCk7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZy
YWdtZW50LngsIGZyYWdtZW50LnkpOwogICAgIGlmIChzY2FsaW5nRmFjdG9yICE9IDEpCkBAIC0x
NzIsNyArMTcyLDcgQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgdGV4dFNob3VsZEJlUGFpbnRlZChjb25zdCBSZW5kZXJTVkdJ
bmxpbmVUZXh0JiB0ZXh0UmVuZGVyZXIpCiB7Ci0gICAgLy8gRm9udDo6cGl4ZWxTaXplKCksIHJl
dHVybnMgRm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5z
ICJpbnQoeCArIDAuNSkiLgorICAgIC8vIEZvbnRDYXNjYWRlOjpwaXhlbFNpemUoKSwgcmV0dXJu
cyBGb250RGVzY3JpcHRpb246OmNvbXB1dGVkUGl4ZWxTaXplKCksIHdoaWNoIHJldHVybnMgImlu
dCh4ICsgMC41KSIuCiAgICAgLy8gSWYgdGhlIGFic29sdXRlIGZvbnQgc2l6ZSBvbiBzY3JlZW4g
aXMgYmVsb3cgeD0wLjUsIGRvbid0IHJlbmRlciBhbnl0aGluZy4KICAgICByZXR1cm4gdGV4dFJl
bmRlcmVyLnNjYWxlZEZvbnQoKS5waXhlbFNpemUoKTsKIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBU
ZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAg
LCBkaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+
cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsK
IAotICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQor
ICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQo
KSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZShyZW5kZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFj
a3MoKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHBvc2l0aW9uT2Zm
c2V0Rm9yRGVjCiAgICAgcmV0dXJuIDAuMGY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgdGhp
Y2tuZXNzRm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgY29uc3QgRm9udCYgZm9udCkKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgdGhpY2tuZXNzRm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gRklYTUU6IEZvciBTVkcgRm9udHMg
d2UgbmVlZCB0byB1c2UgdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgPGZvbnQtZmFjZT4g
aWYgc3BlY2lmaWVkLgogICAgIC8vIENvbXBhdGlibGUgd2l0aCBCYXRpay9PcGVyYQpAQCAtNTM1
LDcgKzUzNSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAg
ICBSZW5kZXJTdHlsZSYgZGVjb3JhdGlvblN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxl
KCk7CiAKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICBGb250IHNjYWxlZEZvbnQ7
CisgICAgRm9udENhc2NhZGUgc2NhbGVkRm9udDsKICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpj
b21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlv
blN0eWxlLCBzY2FsaW5nRmFjdG9yLCBzY2FsZWRGb250KTsKICAgICBBU1NFUlQoc2NhbGluZ0Zh
Y3Rvcik7CiAKQEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
VGV4dFdpdGhTaGFkCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGlu
Z0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQm
IHNjYWxlZEZvbnQgPSByZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOwogICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CiAKICAgICBGbG9hdFBvaW50
IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlz
aW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIFNWR1Rl
eHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcodGV4dC0+dGV4dCgpKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
LSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpOwogCiAgICAgU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcgc3BhY2luZ0xheW91dChmb250KTsKICAgICBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUgYmFzZWxpbmVMYXlvdXQoZm9udCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
Y3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIw
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZShjb25zdCBGb250JiBmb250KQorU1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpCiAgICAgOiBtX2ZvbnQoZm9udCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
aAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2Fk
ZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdSZW5k
ZXJTdHlsZTsKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgU1ZHVGV4dE1ldHJpY3M7CiBjbGFzcyBT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZSk7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lKGNvbnN0IEZvbnQmKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUoY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZsb2F0IGNhbGN1bGF0ZUJhc2VsaW5lU2hp
ZnQoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0KSBjb25z
dDsKICAgICBmbG9hdCBjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KGJvb2wgaXNWZXJ0
aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdDsKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBFQWxpZ25tZW50QmFzZWxpbmUgZG9t
aW5hbnRCYXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29u
c3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udCYg
bV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMTc4NDE4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIgogCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3Ro
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlv
dXRFbmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKDAp
CiB7CkBAIC05OCw3ICs5OCw3IEBAIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpj
YWxjdWwKIAogICAgIGZsb2F0IHNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpICsga2Vy
bmluZzsKICAgICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBsYXN0Q2hhcmFjdGVyICYmIG1fZm9u
dC53b3JkU3BhY2luZygpKSB7Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoKmN1cnJl
bnRDaGFyYWN0ZXIpICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQorICAg
ICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYg
IUZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQogICAgICAgICAgICAg
c3BhY2luZyArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nLmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250
Q2FzY2FkZTsKIGNsYXNzIFNWR1JlbmRlclN0eWxlOwogY2xhc3MgU1ZHRWxlbWVudDsKIApAQCAt
MzIsMTMgKzMyLDEzIEBAIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdUZXh0TGF5b3V0RW5n
aW5lU3BhY2luZyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHVGV4dExheW91dEVuZ2lu
ZVNwYWNpbmcpOwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0
IEZvbnQmKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2FzY2Fk
ZSYpOwogCiAgICAgZmxvYXQgY2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0
LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCk7CiAgICAgZmxvYXQg
Y2FsY3VsYXRlQ1NTS2VybmluZ0FuZFNwYWNpbmcoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdF
bGVtZW50KiBsZW5ndGhDb250ZXh0LCBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3Rlcik7CiAK
IHByaXZhdGU6Ci0gICAgY29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBtX2ZvbnQ7CiAgICAgY29uc3QgVUNoYXIqIG1fbGFzdENoYXJhY3RlcjsKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDcgQEAgU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWRwogICAgIGZsb2F0
IHNjYWxpbmdGYWN0b3IgPSB0ZXh0UmVuZGVyZXIuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VS
VChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVu
ZGVyZXIuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0g
dGV4dFJlbmRlcmVyLnNjYWxlZEZvbnQoKTsKICAgICBpbnQgbGVuZ3RoID0gMDsKIAogICAgIC8v
IENhbGN1bGF0ZSB3aWR0aC9oZWlnaHQgdXNpbmcgdGhlIHNjYWxlZCBmb250LCBkaXZpZGUgdGhp
cyByZXN1bHQgYnkgdGhlIHNjYWxpbmdGYWN0b3IgYWZ0ZXJ3YXJkcy4KQEAgLTcwLDcgKzcwLDcg
QEAgVGV4dFJ1biBTVkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bgogICAgICAgICAgICAg
ICAgICwgc3R5bGUuZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGlzT3ZlcnJpZGUoc3R5
bGUudW5pY29kZUJpZGkoKSkgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAo
c3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHls
ZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBy
dW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KHRleHQpKTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtOTEsNyArOTEs
NyBAQCBTVkdUZXh0TWV0cmljcyBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoCiAKIFNWR1RleHRN
ZXRyaWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25l
ZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCwgY29uc3QgU3RyaW5nJiBn
bHlwaE5hbWUpCiB7Ci0gICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0g
dGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7
CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHQuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFT
U0VSVChzY2FsaW5nRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTc4NDE4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsOSArMTAwLDkgQEAgdm9pZCBTVkdUZXh0TWV0cmlj
c0J1aWxkZXI6OmluaXRpYWxpemVNZQogICAgIG1fY29tcGxleFN0YXJ0VG9DdXJyZW50TWV0cmlj
cyA9IFNWR1RleHRNZXRyaWNzKCk7CiAgICAgbV90b3RhbFdpZHRoID0gMDsKIAotICAgIGNvbnN0
IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0LnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgc2NhbGVkRm9udCA9IHRleHQuc2NhbGVkRm9udCgpOwogICAgIG1fcnVuID0gU1ZHVGV4
dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4odGV4dCk7Ci0gICAgbV9pc0NvbXBsZXhUZXh0ID0g
c2NhbGVkRm9udC5jb2RlUGF0aChtX3J1bikgPT0gRm9udDo6Q29tcGxleDsKKyAgICBtX2lzQ29t
cGxleFRleHQgPSBzY2FsZWRGb250LmNvZGVQYXRoKG1fcnVuKSA9PSBGb250Q2FzY2FkZTo6Q29t
cGxleDsKIAogICAgIGlmIChtX2lzQ29tcGxleFRleHQpCiAgICAgICAgIG1fc2ltcGxlV2lkdGhJ
dGVyYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlu
bGluZSBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udAogICAgIHJldHVybiBzdmdGb250RGF0YTsK
IH0KIAotZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NW
R0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29u
c3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAorZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFt
ZSkgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KCZmb250LCBydW4pOwogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAgICB9CiB9CiAKLXN0YXRpYyBHbHlwaERhdGEgbWlz
c2luZ0dseXBoRm9yRm9udChjb25zdCBGb250JiBmb250KQorc3RhdGljIEdseXBoRGF0YSBtaXNz
aW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwog
ICAgIGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQpAQCAtMzAxLDcgKzMwMSw3IEBA
IHN0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb24KICAgICByZXR1cm4gR2x5
cGhEYXRhKGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250RGF0YSk7CiB9
CiAKLUdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMy
IGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYg
YWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCitHbHlw
aERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIg
Y2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkKIHsKICAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCBtaXJyb3IsIEF1dG9WYXJpYW50KTsKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkKQEAg
LTM0Miw3ICszNDIsNyBAQCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6Omds
CiAgICAgLy8gVGhlIGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBGb3Ig
c2ltcGxpY2l0eSB3ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250ZXh0
LXNlbnNpdGl2ZWx5LgogICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9uID0g
Zm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICBmYWxsYmFja0Rlc2NyaXB0aW9uLnNldEZhbWls
aWVzKFZlY3RvcjxBdG9taWNTdHJpbmc+IHsgc2Fuc1NlcmlmRmFtaWx5IH0pOwotICAgIEZvbnQg
ZmFsbGJhY2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBm
b250LndvcmRTcGFjaW5nKCkpOworICAgIEZvbnRDYXNjYWRlIGZhbGxiYWNrRm9udChmYWxsYmFj
a0Rlc2NyaXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygpKTsK
ICAgICBmYWxsYmFja0ZvbnQudXBkYXRlKGZvbnQuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgcmV0
dXJuIGZhbGxiYWNrRm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBtaXJyb3Is
IEF1dG9WYXJpYW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dF9oCiAjZGVmaW5lIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gK
IAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsOSArNDIsOSBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KICAgICB2b2lkIHNldEFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBh
aW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7IH0KIAotICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hh
cmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZh
bmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRD
YXNjYWRlJiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRy
YXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5
cGhOYW1lKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2lu
Z1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0Nv
bnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3Im
LCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJKHJldmlzaW9u
IDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRl
ICJSb290SW5saW5lQm94LmgiCiAKQEAgLTg5LDcgKzg5LDcgQEAgR2x5cGhPdmVyZmxvdyB2aXN1
YWxPdmVyZmxvd0ZvckRlY29yYXRpbwogICAgIGZsb2F0IHdhdnlPZmZzZXQ7CiAgICAgICAgIAog
ICAgIFRleHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlID0gbGluZVN0eWxlLnRleHRE
ZWNvcmF0aW9uU3R5bGUoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUuZm9udCgpLmZv
bnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUu
Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiAgICAgR2x5cGhPdmVy
ZmxvdyBvdmVyZmxvd1Jlc3VsdDsKICAgICAKICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRl
eHREZWNvcmF0aW9uU3R5bGVXYXZ5KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9Jbmxp
bmVUZXh0Qm94U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9Jbmxp
bmVUZXh0Qm94U3R5bGUuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvSW5saW5lVGV4dEJveFN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgSW5saW5lVGV4dEJveFN0eWxlX2gKICNkZWZpbmUgSW5saW5lVGV4dEJveFN0eWxl
X2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9u
IDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFJlZjxSZW5kZXJTdHlsZT4g
cmVzb2x2ZUZvckRvY3VtZW50KGNvbnMKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IgPSBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSA/IGRvY3VtZW50LnN0
eWxlUmVzb2x2ZXJJZkV4aXN0cygpLT5mb250U2VsZWN0b3IoKSA6IG51bGxwdHI7Ci0gICAgZG9j
dW1lbnRTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgZG9jdW1l
bnRTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAg
cmV0dXJuIGRvY3VtZW50U3R5bGU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVUcmVlLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OCw3ICs5NzgsNyBA
QCB2b2lkIHJlc29sdmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhCiAgICAgICAgIGlmIChT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhp
c3RzKCk7CiAgICAgICAgICAgICBpZiAoc2V0dGluZ3MtPmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0
b2dyYXBocygpICYmIHN0eWxlUmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHls
ZS5nZXQoKS5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKHN0
eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0eWxl
OjpDaGFuZ2UgZG9jdW1lbnRDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRTdHlsZS5n
ZXQoKSwgZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4MCw5IEBAIHZvaWQg
Y29tcHV0ZU5vcm1hbGl6ZWRTcGFjZXMoY29uc3QgVGV4dFIKICAgICBpZiAobm9ybWFsaXplZFNw
YWNlc1N0cmluZ0NhY2hlLmxlbmd0aCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihydW4uY2hh
cmFjdGVyc0xlbmd0aCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChydW4uaXM4Qml0KCkp
Ci0gICAgICAgIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhydW4uY2hhcmFjdGVyczgoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAg
IG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFj
ZXMocnVuLmNoYXJhY3RlcnM4KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwogICAgIGVsc2UK
LSAgICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udDo6bm9ybWFsaXplU3Bh
Y2VzKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAg
IG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFj
ZXMocnVuLmNoYXJhY3RlcnMxNigpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBpZiAo
bWlycm9yKQogICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBjcmVhdGVTdHJp
bmdXaXRoTWlycm9yZWRDaGFyYWN0ZXJzKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSEtlcm5F
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0Zv
bnRGYWNlU3JjRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2Niw4IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBAIC00NjMsMTIgKzQ2
MywxMiBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91CiAKIHZvaWQg
V2ViUHJvY2Vzczo6c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCBhbHdheXNV
c2VDb21wbGV4VGV4dCkKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRDb2RlUGF0aChhbHdheXNV
c2VDb21wbGV4VGV4dCA/IFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250OjpB
dXRvKTsKKyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29t
cGxleFRleHQgPyBXZWJDb3JlOjpGb250Q2FzY2FkZTo6Q29tcGxleCA6IFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpBdXRvKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRTaG91bGRVc2VGb250U21v
b3RoaW5nKGJvb2wgdXNlRm9udFNtb290aGluZykKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRT
aG91bGRVc2VTbW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7CisgICAgV2ViQ29yZTo6Rm9udENh
c2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyh1c2VGb250U21vb3RoaW5nKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgbGFuZ3VhZ2VzKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0JKHJldmlzaW9uIDE3ODQxOCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2Fj
aGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL01lbW9yeUNhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeVBy
ZXNzdXJlSGFuZGxlci5oPgpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplV2ViUHIKICAgICBtX2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCA9
IFdURjo6bW92ZShwYXJhbWV0ZXJzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQb3J0KTsKICAgICBt
X3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkID0gcGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlv
blBpZDsKICAgICBtX3Nob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbiA9IHBhcmFtZXRl
cnMuc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOwotICAgIEZvbnQ6OnNldERlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlS2VybmluZ0FuZExp
Z2F0dXJlc0J5RGVmYXVsdCA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKKyAgICBGb250Q2Fz
Y2FkZTo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFi
bGVLZXJuaW5nQW5kTGlnYXR1cmVzQnlEZWZhdWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDAp
OwogCiAgICAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpSZWxpZWZMb2dnZXI6OnNldExvZ2dpbmdF
bmFibGVkKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZMb2dnaW5n
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0
cmFzLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktp
dE5TU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1w
b3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgogCiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFw
aGljc1NQSS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zv
bnRDYXNjYWRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1N0cmluZ0V4
dHJhcy5oPgpAQCAtOTIsNyArOTIsNyBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9pbnQ6KE5TUG9p
bnQpcG9pbnQgCiAgICAgICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwogCi0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9u
dFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3
aW5nVG9TY3JlZW5dLCBmb250U21vb3RoaW5nSXNBbGxvd2VkID8gQXV0b1Ntb290aGluZyA6IEFu
dGlhbGlhc2VkKTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3Jt
RGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3Jl
ZW5dLCBmb250U21vb3RoaW5nSXNBbGxvd2VkID8gQXV0b1Ntb290aGluZyA6IEFudGlhbGlhc2Vk
KTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAg
cnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCAtIChmbG9h
dClfd2ViX3dpZHRoV2l0aEZvbnQ6KE5TRm9udCAqKWZvCiAgICAgW3NlbGYgZ2V0Q2hhcmFjdGVy
czpidWZmZXIuZGF0YSgpXTsKIAogICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBGb250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURh
dGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3Jl
Rm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAg
VGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVS
b3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJldHVybiB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTdHJpbmdUcnVuY2F0b3IubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTdHJpbmdUcnVuY2F0b3IubW0JKHJl
dmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU3RyaW5nVHJ1bmNh
dG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMSArMjksMjEgQEAKICNpbXBvcnQgIldlYlN0
cmluZ1RydW5jYXRvci5oIgogCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbXBv
cnQgPFdlYkNvcmUvRm9udC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Gb250UGxhdGZvcm1EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmlu
Z1RydW5jYXRvci5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAKLXN0YXRpYyBXZWJDb3JlOjpGb250JiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCitz
dGF0aWMgV2ViQ29yZTo6Rm9udENhc2NhZGUmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkK
IHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TRm9udD4+IGN1cnJlbnRO
U0ZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OkZvbnQ+IGN1cnJlbnRG
b250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJDb3JlOjpGb250Q2FzY2FkZT4gY3Vy
cmVudEZvbnQ7CiAgICAgaWYgKFtmb250IGlzRXF1YWw6Y3VycmVudE5TRm9udC5nZXQoKS5nZXQo
KV0pCiAgICAgICAgIHJldHVybiBjdXJyZW50Rm9udDsKICAgICBjdXJyZW50TlNGb250LmdldCgp
ID0gZm9udDsKLSAgICBjdXJyZW50Rm9udC5nZXQoKSA9IFdlYkNvcmU6OkZvbnQoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgY3VycmVudEZv
bnQuZ2V0KCkgPSBXZWJDb3JlOjpGb250Q2FzY2FkZShXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
KGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICByZXR1cm4gY3VycmVudEZvbnQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVN
YWMubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB2b2lk
IFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQogCiAgICAgICAgIFBvcHVwTWVudVN0eWxlIHN0eWxl
ID0gbV9jbGllbnQtPml0ZW1TdHlsZShpKTsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURp
Y3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnQoKSkgeworICAgICAg
ICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnRDYXNjYWRlKCkpIHsKICAgICAgICAgICAgIE5TRm9u
dCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKICAg
ICAgICAgICAgIGlmICghZm9udCkgewogICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0
OTAsNyArMTQ5MCw3IEBAIC0gKEJPT0wpX3ZpZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5kUmUK
IAogKyAodm9pZClfc2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGg6KEJPT0wpZgogewot
ICAgIEZvbnQ6OnNldENvZGVQYXRoKGYgPyBGb250OjpDb21wbGV4IDogRm9udDo6QXV0byk7Cisg
ICAgRm9udENhc2NhZGU6OnNldENvZGVQYXRoKGYgPyBGb250Q2FzY2FkZTo6Q29tcGxleCA6IEZv
bnRDYXNjYWRlOjpBdXRvKTsKIH0KIAogKyAodm9pZClfc2V0QWxsb3dzUm91bmRpbmdIYWNrczoo
Qk9PTClhbGxvd3NSb3VuZGluZ0hhY2tzCkBAIC0zMTY4LDEyICszMTY4LDEyIEBAIC0gKEJPT0wp
X2Rhc2hib2FyZEJlaGF2aW9yOihXZWJEYXNoYm9hcmQKIAogKyAodm9pZClfc2V0U2hvdWxkVXNl
Rm9udFNtb290aGluZzooQk9PTClmCiB7Ci0gICAgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5n
KGYpOworICAgIEZvbnRDYXNjYWRlOjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoZik7CiB9CiAKICsg
KEJPT0wpX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmcKIHsKLSAgICByZXR1cm4gRm9udDo6c2hvdWxk
VXNlU21vb3RoaW5nKCk7CisgICAgcmV0dXJuIEZvbnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhp
bmcoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC00NzEwLDcgKzQ3MTAsNyBAQCArICh2
b2lkKWluaXRpYWxpemUKICAgICBncmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gW2RlZmF1bHRzIGJv
b2xGb3JLZXk6V2ViR3JhbW1hckNoZWNraW5nRW5hYmxlZF07CiAjZW5kaWYKIAotICAgIEZvbnQ6
OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktp
dEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2Vybmlu
ZyB8IExpZ2F0dXJlcyA6IDApOworICAgIEZvbnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRp
bmdGZWF0dXJlcyhbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVz
RW5hYmxlZEJ5RGVmYXVsdERlZmF1bHRzS2V5XSA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsK
IAogI2lmICFQTEFURk9STShJT1MpCiAgICAgYXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFi
bGVkID0gW3NlbGYgX3Nob3VsZEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uQmVFbmFibGVkXTsK
</data>
<flag name="review"
          id="269551"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244653</attachid>
            <date>2015-01-14 15:37:10 -0800</date>
            <delta_ts>2015-01-14 15:46:04 -0800</delta_ts>
            <desc>for bots 2</desc>
            <filename>font-rename-2.patch</filename>
            <type>text/plain</type>
            <size>400387</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNCAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihy
MTc4MzY3KTogW0dTdHJlYW1lcl0gU2V2ZXJhbCBtZWRpYSB0ZXN0cyB0aW1lIG91dCBhZnRlciBy
MTc4MzY3CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4NDE4KQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0
OSw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2Ny
aXB0aW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmVhdHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2Fj
aGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUKIF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29z
ZUZpbGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VG
aWxlc0VSS04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93
RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2Fz
Y2FkZTExc2V0Q29kZVBhdGhFTlMwXzhDb2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2Nh
ZGUxOHNob3VsZFVzZVNtb290aGluZ0V2CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRT
aG91bGRVc2VTbW9vdGhpbmdFYgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVs
dFR5cGVzZXR0aW5nRmVhdHVyZXNFagorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNf
MTZGb250UGxhdGZvcm1EYXRhRWJOU18xN0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3Jl
MTFGb250Q2FzY2FkZUMxRXYKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjExbG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
N0FyY2hpdmVFRUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9f
Wk43V2ViQ29yZTExRnJhbWVMb2FkZXIxMXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0
cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5TXzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlM
b2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU1LDkgKzY2
Miw5IEBAIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2Vi
Q29yZTE1U1FMaXRlU3RhdGVtZW50RDFFdgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQx
N2FsaWduQ2VudGVyQWx3YXlzRQogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWdu
VG9FZGdlSWZOZWVkZWRFCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVu
Y2F0ZUVSS04zV1RGNlN0cmluZ0VmUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktO
M1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQot
X19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180
Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmlu
Z1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNj
YWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5n
VHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNj
YWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5n
VHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRF
bmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTEx
bG9hZFJlcXVlc3RFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9f
Wk43V2ViQ29yZTE1VXNlcklucHV0QnJpZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18x
MUlucHV0U291cmNlRQogX19aTjdXZWJDb3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFn
ZUVOU18xMUlucHV0U291cmNlRQpAQCAtMTEyNiwxMyArMTEzMyw2IEBAIF9fWk43V2ViQ29yZTQw
ZGVmYXVsdFRleHRFbmNvZGluZ05hbWVGb3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVt
U2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0lu
dFNpemVFZgogX19aTjdXZWJDb3JlNDJVUkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVD
b21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxDb21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJp
YnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRl
ZFN0cmluZwotX19aTjdXZWJDb3JlNEZvbnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1f
X1pON1dlYkNvcmU0Rm9udDE4c2hvdWxkVXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250
MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0
Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYK
LV9fWk43V2ViQ29yZTRGb250YVNFUktTMF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9yRmlsZXNFUktOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVy
Zmxvd0VFRQogX19aTjdXZWJDb3JlNEljb25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVy
UmVjdEVQYgpAQCAtMTYxNyw2ICsxNjE3LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNl
bmRFalJpCiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEw
VGltZVJhbmdlczVzdGFydEVqUmkKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYK
K19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hh
c2hTZXRJUEtOU18xNFNpbXBsZUZvbnREYXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hU
cmFpdHNJUzhfRUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2Fz
Y2FkZThkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEw
RmxvYXRQb2ludEVpaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNv
cmUxMUZvbnRDYXNjYWRlZXFFUktTMF8KIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0Nv
bXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05T
XzE1UmVzb3VyY2VSZXF1ZXN0RQogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFz
TG9hZGVkRXYKQEAgLTE2NTMsMTAgKzE2NTYsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJs
YXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5n
Qm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxp
bmdFdgorX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dl
YkNvcmUxMVJlbmRlclN0eWxlMTFmb250TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJT
dHlsZTE1Zm9udERlc2NyaXB0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNp
dGVkRGVwZW5kZW50Q29sb3JFaQotX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBf
X1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxpbmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0MTRlbmNsb3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ0LDkg
KzE5NDcsNiBAQCBfX1pOSzdXZWJDb3JlM1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1
ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJMOHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQ
NU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdI
YXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNo
VHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRy
YXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBv
aW50RWlpTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250
ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3Jl
NE5vZGUxMXRleHRDb250ZW50RWIKIF9fWk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2
CkBAIC0yNjQ5LDE4ICsyNjQ5LDEyIEBAIF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhy
ZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmls
ZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0
ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3ZhbFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJD
b3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJhY2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQ
b2ludEVOUzFfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9h
dFBvaW50RWZiYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2lu
Z0VuYWJsZWRFYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0
ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29yZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9v
bEV2CiBfX1pON1dlYkNvcmUxNUxlZ2FjeVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlF
agogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNl
cnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBfCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEy
bGVmdFRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5k
aW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRU
cnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hh
Y2tzT3JOb3RFUmZiZgotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5j
YXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NP
ck5vdEVSZmJmCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3Jk
RVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5v
dEVSZmJmYgotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFj
dGVyRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NP
ck5vdEVSZmJmCiBfX1pON1dlYkNvcmUxNWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBv
c2l0aW9uRQogX19aTjdXZWJDb3JlMTVzdGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43
V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ0
LDcgKzI3MzgsNiBAQCBfX1pON1dlYkNvcmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBf
X1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVW
aXNpYmxlUG9zaXRpb25FCiBfX1pON1dlYkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNf
MThTZWxlY3Rpb25EaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVj
dGlvblNldHRpbmdzT25TdGFydHVwRXYKLV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQ
bGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43
V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0
Tm9kZTE3aXNDb250ZW50RWRpdGFibGVFTlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9f
Wk43V2ViQ29yZTROb2RlMjNjb21wYXJlRG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9u
IDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTc5NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNp
emUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Rm9udC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xGb250Q2FjaGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBo
cy5jcHAiIC8+CkBAIC0xOTQ2Niw4ICsxOTQ2Niw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNo
ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9u
dENhc2NhZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXEZvbnREZXNjcmlwdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVyaWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzAwLDggKzQ3MDAsOCBAQAogCQlCMkMzREE0
OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RB
NEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
U3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnQuY3BwICovOyB9OwotCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
NEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENh
c2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250Q2FjaGUuY3BwICovOyB9OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2
RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0
YS5jcHAgKi87IH07CkBAIC0xMjA3Myw4ICsxMjA3Myw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEVuY29kaW5nUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENh
c2NhZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2
MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUx
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNDA1LDYgKzIwNDA1LDggQEAKIAkJCQlC
Mjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIw
NTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1
MiAvKiBDb2xvclNwYWNlLmggKi8sCisJCQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLywKKwkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENh
c2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAv
KiBEYXNoQXJyYXkuaCAqLywKQEAgLTIwNDMwLDggKzIwNDMyLDYgQEAKIAkJCQlCMjc1MzUzRTBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggKi8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FD
IC8qIEZsb2F0U2l6ZUhhc2guaCAqLywKLQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5jcHAgKi8sCi0JCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywK
IAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJ
QjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RB
NTIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oICovLApAQCAtMjQyOTksNyArMjQyOTks
NyBAQAogCQkJCTE0OTkzQkU2MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA2MjI4Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZv
Y3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udENhc2NhZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3
RiAvKiBGb250QmFzZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1
QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAg
LTI3ODAwLDcgKzI3ODAwLDcgQEAKIAkJCQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxv
d1RocmVhZENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIx
QzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5
RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzNzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNo
ZU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgi
CiAjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgotI2ltcG9ydCAi
Rm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1w
b3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCkBAIC0xNzU4LDcg
KzE3NTgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0
IGJhc2ljIGZvbnQgaW5mbwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5n
LCBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKKyAg
ICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAg
IAogICAgIGludCBkZWNvciA9IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAg
aWYgKChkZWNvciAmIChUZXh0RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGlu
ZVRocm91Z2gpKSAhPSAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAi
Q29sb3JNYWMuaCIKICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgotI2ltcG9ydCAi
Rm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1w
b3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxNzg0
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2lt
cG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2lt
cG9ydCAiRWRpdG9yLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5o
IgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9u
LmgiCiAjaW1wb3J0ICJIVE1MQW5jaG9yRWxlbWVudC5oIgpAQCAtODQ4LDcgKzg0OCw3IEBAIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMg
Zm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNj
ZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0
clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKICAgICAKICAgICAv
LyBzZXQgYmFzaWMgY29sb3JzCiAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3Ry
aW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9y
KHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQAogI2ltcG9ydCAiRE9NUHJpdmF0ZS5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRHJhZ0ltYWdlLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1w
b3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkhUTUxFbGVt
ZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChOU0Zv
bnQgKilfZm9udAogICAgIGF1dG8gcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRl
cmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5n
ZXROU0ZvbnQoKTsKIH0KICNlbHNlCiAtIChDVEZvbnRSZWYpX2ZvbnQKQEAgLTY3Nyw3ICs2Nzcs
NyBAQCAtIChDVEZvbnRSZWYpX2ZvbnQKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29y
ZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0J
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlL
aXRFeHRlbnNpb25zLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW1wb3J0
ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkZsb2F0UG9pbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRl
LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50
LmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgpAQCAtNzEsNyArNzEsNyBAQAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIHVzaW5nIFdlYkNvcmU6OkZsb2F0UG9pbnQ7Ci11c2luZyBXZWJD
b3JlOjpGb250OwordXNpbmcgV2ViQ29yZTo6Rm9udENhc2NhZGU7CiB1c2luZyBXZWJDb3JlOjpI
VE1MQXJlYUVsZW1lbnQ7CiB1c2luZyBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OwogdXNpbmcg
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTc4NDE4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MDQsOCArMTUwNCw4IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVt
ZW50ZWRQcm9wZXJ0eUlEKEMKIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJv
bVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5mb250KCkuZmFtaWx5Q291bnQoKTsgKytpKQotICAgICAgICBsaXN0LmdldCgpLmFw
cGVuZCh2YWx1ZUZvckZhbWlseShzdHlsZS0+Zm9udCgpLmZhbWlseUF0KGkpKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7
ICsraSkKKyAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQodmFsdWVGb3JGYW1pbHkoc3R5bGUtPmZv
bnRDYXNjYWRlKCkuZmFtaWx5QXQoaSkpKTsKICAgICByZXR1cm4gbGlzdDsKIH0KIApAQCAtMjU0
NSw3ICsyNTQ1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhYwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgogICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53b3JkQnJlYWsoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250KCkud29yZFNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnRDYXNj
YWRlKCkud29yZFNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V29yZFdyYXA6CiAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoc3R5bGUtPm92ZXJmbG93V3JhcCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExpbmVCcmVhazoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkNvbG9y
LmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJHQkNvbG9yLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRMb2FkZXIuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJTdHlsZVBy
b3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC01Myw3ICs1Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmPExvYWRGb250Q2FsbGJhY2s+KG5ldyBM
b2FkRm9udENhbGxiYWNrKG51bUxvYWRpbmcsIGZvbnRMb2FkZXIsIGxvYWRDYWxsYmFjaywgZXJy
b3JDYWxsYmFjaykpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvYWRGb250Q2Fs
bGJhY2s+IGNyZWF0ZUZyb21QYXJhbXMoY29uc3QgRGljdGlvbmFyeSYgcGFyYW1zLCBGb250TG9h
ZGVyJiBmb250TG9hZGVyLCBjb25zdCBGb250JiBmb250KQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExvYWRGb250Q2FsbGJhY2s+IGNyZWF0ZUZyb21QYXJhbXMoY29uc3QgRGljdGlvbmFyeSYgcGFy
YW1zLCBGb250TG9hZGVyJiBmb250TG9hZGVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKICAg
ICB7CiAgICAgICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IG9uc3VjY2VzczsKICAgICAgICAgUmVm
UHRyPFZvaWRDYWxsYmFjaz4gb25lcnJvcjsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIEZvbnRM
b2FkZXI6OmxvYWRGb250KGNvbnN0IERpY3Rpb25hCiAgICAgU3RyaW5nIGZvbnRTdHJpbmc7CiAg
ICAgaWYgKCFwYXJhbXMuZ2V0KCJmb250IiwgZm9udFN0cmluZykpCiAgICAgICAgIHJldHVybjsK
LSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBpZiAoIXJlc29sdmVG
b250U3R5bGUoZm9udFN0cmluZywgZm9udCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8
TG9hZEZvbnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBMb2FkRm9udENhbGxiYWNrOjpjcmVhdGVGcm9t
UGFyYW1zKHBhcmFtcywgKnRoaXMsIGZvbnQpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRm9u
dExvYWRlcjo6bG9hZEZvbnQoY29uc3QgRGljdGlvbmEKIGJvb2wgRm9udExvYWRlcjo6Y2hlY2tG
b250KGNvbnN0IFN0cmluZyYgZm9udFN0cmluZywgY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBG
SVhNRTogVGhlIHNlY29uZCBwYXJhbWV0ZXIgKHRleHQpIGlzIGlnbm9yZWQuCi0gICAgRm9udCBm
b250OworICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZv
bnRTdHJpbmcsIGZvbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZvbnQuZmFtaWx5Q291bnQoKTsgaSsrKSB7CkBAIC0yODEsNyArMjgxLDcg
QEAgc3RhdGljIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKAogICAgIHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShpZCkuZ2V0KCkpOwogfQogCi1ib29sIEZvbnRMb2FkZXI6OnJlc29sdmVG
b250U3R5bGUoY29uc3QgU3RyaW5nJiBmb250U3RyaW5nLCBGb250JiBmb250KQorYm9vbCBGb250
TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYgZm9udFN0cmluZywgRm9udENh
c2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gSW50ZXJwcmV0IGZvbnRTdHJpbmcgaW4gdGhlIHNhbWUg
d2F5IGFzIHRoZSAnZm9udCcgYXR0cmlidXRlIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC4K
ICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VkU3R5bGUgPSBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKQEAgLTMwMiw3ICszMDIsNyBAQCBib29sIEZvbnRM
b2FkZXI6OnJlc29sdmVGb250U3R5bGUoY29uc3QgCiAKICAgICBzdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGRlZmF1bHRGb250RGVzY3JpcHRpb24pOwogCi0gICAgc3R5bGUtPmZvbnQoKS51cGRh
dGUoc3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgc3R5bGUtPmZvbnRDYXNjYWRl
KCkudXBkYXRlKHN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKIAogICAgIC8v
IE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAg
IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LT5lbnN1cmVTdHlsZVJl
c29sdmVyKCk7CkBAIC0zMTksNyArMzE5LDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9u
dFN0eWxlKGNvbnN0IAogICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIGFwcGx5
UHJvcGVydHlUb0N1cnJlbnRTdHlsZShzdHlsZVJlc29sdmVyLCBDU1NQcm9wZXJ0eUxpbmVIZWln
aHQsIHBhcnNlZFN0eWxlKTsKIAotICAgIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGZvbnQg
PSBzdHlsZS0+Zm9udENhc2NhZGUoKTsKICAgICBmb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLmZv
bnRTZWxlY3RvcigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRM
b2FkZXIuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBDU1NGb250RmFjZVNv
dXJjZTsKIGNsYXNzIERpY3Rpb25hcnk7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEV2ZW50Owot
Y2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgTG9hZEZvbnRDYWxsYmFjazsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGVuZGluZ0V2ZW50c1RpbWVyRmlyZWQoKSB7IGZpcmVQZW5kaW5nRXZl
bnRzKCk7IH0KICAgICB2b2lkIHNjaGVkdWxlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAg
IHZvaWQgZmlyZVBlbmRpbmdFdmVudHMoKTsKLSAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29u
c3QgU3RyaW5nJiwgRm9udCYpOworICAgIGJvb2wgcmVzb2x2ZUZvbnRTdHlsZShjb25zdCBTdHJp
bmcmLCBGb250Q2FzY2FkZSYpOwogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgRXZl
bnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZVNoZQogewogICAgIG1fcnVsZVNldHMuYXBw
ZW5kQXV0aG9yU3R5bGVTaGVldHMoZmlyc3ROZXcsIHN0eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQo
KSwgbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzLCB0aGlzKTsKICAgICBpZiAoYXV0byByZW5kZXJW
aWV3ID0gZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXctPnN0eWxl
KCkuZm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIHJlbmRlclZpZXctPnN0
eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogCiAjaWYgRU5BQkxF
KENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIoKS0+cmVz
b2x2ZSgpOwpAQCAtNzQ4LDcgKzc0OCw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3IKICAgICAgICAgaWYgKCFzX3N0eWxlTm90WWV0QXZhaWxhYmxlKSB7CiAgICAg
ICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlID0gJlJlbmRlclN0eWxlOjpjcmVhdGUoKS5s
ZWFrUmVmKCk7CiAgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5
KE5PTkUpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0
ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5m
b250Q2FzY2FkZSgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgICAgIH0KICAgICAgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CiAg
ICAgICAgIHJldHVybiAqc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKQEAgLTEwMzEsOSArMTAzMSw5
IEBAIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFMKICAgICAvLyBNYWtl
IHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0g
ZnJvbSBvdXIgcGFyZW50IHN0eWxlLgogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudFNldHRpbmdzKCkpIHsKICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7
Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7
CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVj
dG9yKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRh
dGUoMCk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udENhc2NhZGUoKS51cGRhdGUobnVs
bHB0cik7CiAKICAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKIH0KQEAgLTE0ODQsNyAr
MTQ4NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiAgICAgY2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNo
ZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVj
a0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKTsKLSAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSht
X2ZvbnRTZWxlY3Rvcik7CisgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKG1fZm9udFNl
bGVjdG9yKTsKICAgICBpZiAobV9zdGF0ZS5mb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSkKICAg
ICAgICAgc3R5bGUtPnNldEhhc1ZpZXdwb3J0VW5pdHModHJ1ZSk7CiAgICAgbV9zdGF0ZS5zZXRG
b250RGlydHkoZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTIx
NzksNyArMjE3OSw3IEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQK
IAogICAgIC8vIENoaW5lc2UgYW5kIEphcGFuZXNlIGxhY2sgd29yZCBib3VuZGFyeSBtYXJrcywg
YW5kIHRoZXJlIGlzIG5vIGNsZWFyIGFncmVlbWVudCBvbiB3aGF0IGNvbnN0aXR1dGVzCiAgICAg
Ly8gYSB3b3JkLCBzbyB0cmVhdCB0aGUgcG9zaXRpb24gYmVmb3JlIGFueSBDSksgY2hhcmFjdGVy
IGFzIGEgd29yZCBzdGFydC4KLSAgICBpZiAoRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChm
aXJzdENoYXJhY3RlcikpCisgICAgaWYgKEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGZpcnN0Q2hhcmFjdGVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzaXplX3Qg
d29yZEJyZWFrU2VhcmNoU3RhcnQgPSBzdGFydCArIGxlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bXBvcnQgIkVsZW1lbnQuaCIKICNpbXBvcnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKLSNpbXBvcnQg
IkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2lt
cG9ydCAiRnJhbWVMb2FkZXIuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCkBAIC0xMTE0LDcg
KzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAg
YXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAjZWxz
ZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIs
NyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAg
ICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJl
ci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0
dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQs
MTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAg
ICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNV
bmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1l
XTsKICAgICAgICAgaWYgKHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVj
b3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5
Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQg
KmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAg
ICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdldE5TRm9udCgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250
IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVs
dEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0
YSgpLnNpemUoKV0gZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgW2F0
dHJzLmdldCgpIHNldE9iamVjdDpbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZv
bnQoKSB0b1NpemU6c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9y
bURhdGEoKS5zaXplKCldIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYg
KHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQog
ICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAog
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJIVE1MQ29udmVydGVyLmgiCkBAIC0yMTMsNyArMjEzLDcg
QEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogCiAgICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUp
Ci0gICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsK
KyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKIAogICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKSB7CiAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjOwpAQCAtMjM1LDcgKzIzNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0
b3I6OmZvbnRGb3JTZWwKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5
cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8K
LSAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVy
LT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAg
ICAgICAgZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0g
JnByaW1hcnlGb250KSB7CkBAIC0yNTcsNyArMjU3LDcgQEAgTlNEaWN0aW9uYXJ5KiBFZGl0b3I6
OmZvbnRBdHRyaWJ1dGVzRm9yUwogCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0ID0g
W05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CiAgICAgCi0gICAgQ1RGb250UmVmIGZv
bnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIENU
Rm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
Q1RGb250KCk7CiAgICAgaWYgKGZvbnQpCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OihpZClm
b250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBACiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCiAjaW1w
b3J0ICJFZGl0b3JDbGllbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbXBvcnQgIkZyYW1lVmlldy5oIgpAQCAtMTE1LDcgKzExNSw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVz
dWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKEFTU0VS
VF9OT19FWENFUFRJT04pOwpAQCAtMTM1LDcgKzEzNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBu
b2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lw
cGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJl
bmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpCiAgICAg
ICAgICAgICAgICAgZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAgICAgICAgIGVsc2UgaWYgKGZv
bnQgIT0gJnByaW1hcnlGb250KSB7CkBAIC0xNjAsOCArMTYwLDggQEAgTlNEaWN0aW9uYXJ5KiBF
ZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9yUwogICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSAh
PSAwKQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKIAotICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlG
b250RGF0YSgpLmdldE5TRm9udCgpKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+
Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKKyAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
Z2V0TlNGb250KCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKIAogICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpICE9IENvbG9yOjpibGFjaykKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnND
b2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JL
ZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
cmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwNSw3ICsyMTA1LDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgICAgICBuZXdTdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRlZmF1bHRGb250RGVzY3JpcHRpb24pOwogICAgIH0KIAot
ICAgIG5ld1N0eWxlLT5mb250KCkudXBkYXRlKG5ld1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9y
KCkpOworICAgIG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udENh
c2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3Bl
cnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyID0gY2FudmFzKCktPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAt
MjEyMiw3ICsyMTIyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQo
YwogICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAK
LSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQgPSBuZXdTdHlsZS0+Zm9udCgpOworICAgIG1v
ZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpOwogICAgIG1v
ZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3Io
KSk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOwogICAgIHN0
eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9yKCktPnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJh
Y2tzKCZtb2RpZmlhYmxlU3RhdGUoKSk7CkBAIC0yMjg3LDcgKzIyODcsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgaWYgKGZpbGwgJiYgZ3JhZGllbnQg
JiYgZ3JhZGllbnQtPmlzWmVyb1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3Qg
Rm9udCYgZm9udCA9IGFjY2Vzc0ZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IGFjY2Vzc0ZvbnQoKTsKICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250
LmZvbnRNZXRyaWNzKCk7CiAKICAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSB0ZXh0OwpAQCAt
MjM3MiwxMCArMjM3MiwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJCiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUobG9jYXRpb24ueCgp
IC0gbWFza1JlY3QueCgpLCBsb2NhdGlvbi55KCkgLSBtYXNrUmVjdC55KCkpOwogICAgICAgICAg
ICAgLy8gV2UgZHJhdyB3aGVuIGZvbnRXaWR0aCBpcyAwIHNvIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bnMgKGVnLCBhICJjb3B5IiBvcCkgc3RpbGwgd29yay4KICAgICAgICAgICAgIG1hc2tJbWFnZUNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgoZm9udFdpZHRoID4gMCA/ICh3aWR0aCAvIGZvbnRXaWR0
aCkgOiAwKSwgMSkpOwotICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0
KGZvbnQsIHRleHRSdW4sIEZsb2F0UG9pbnQoMCwgMCksIEZvbnQ6OlVzZUZhbGxiYWNrSWZGb250
Tm90UmVhZHkpOworICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZv
bnQsIHRleHRSdW4sIEZsb2F0UG9pbnQoMCwgMCksIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lm
Rm9udE5vdFJlYWR5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1hc2tJbWFnZUNv
bnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFza1JlY3QueSgpKTsKLSAgICAgICAg
ICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlv
biwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgICAgICBtYXNrSW1h
Z2VDb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNj
YWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAgICAgfQogCiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqYyk7CkBAIC0yMzk4LDE1ICsyMzk4
LDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKIAogICAgIGlm
IChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpKSB7
CiAgICAgICAgIGJlZ2luQ29tcG9zaXRlTGF5ZXIoKTsKLSAgICAgICAgYy0+ZHJhd0JpZGlUZXh0
KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5
KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250
Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIGVuZENvbXBvc2l0
ZUxheWVyKCk7CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgaWYg
KHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlQ29weSkgewogICAgICAgICBj
bGVhckNhbnZhcygpOwotICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9j
YXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3
QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFj
a0lmRm9udE5vdFJlYWR5KTsKICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwg
Rm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRyYXdCaWRpVGV4
dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250
Tm90UmVhZHkpOwogICAgICAgICBkaWREcmF3KHRleHRSZWN0KTsKICAgICB9CiB9CkBAIC0yNDI2
LDcgKzI0MjYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aW5mbGF0ZVN0CiAg
ICAgcmVjdC5pbmZsYXRlKGRlbHRhKTsKIH0KIAotY29uc3QgRm9udCYgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjphY2Nlc3NGb250KCkKK2NvbnN0IEZvbnRDYXNjYWRlJiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmFjY2Vzc0ZvbnQoKQogewogICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLnVw
ZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtMjcw
LDcgKzI3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIAog
ICAgICAgICBTdHJpbmcgbV91bnBhcnNlZEZvbnQ7Ci0gICAgICAgIEZvbnQgbV9mb250OworICAg
ICAgICBGb250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgICAgIGJvb2wgbV9yZWFsaXplZEZvbnQ7CiAg
ICAgfTsKIApAQCAtMzA4LDcgKzMwOCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdUZXh0
SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGws
IGZsb2F0IG1heFdpZHRoID0gMCwgYm9vbCB1c2VNYXhXaWR0aCA9IGZhbHNlKTsKIAotICAgIGNv
bnN0IEZvbnQmIGFjY2Vzc0ZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgYWNjZXNzRm9u
dCgpOwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIHZvaWQgY2xlYXJQYXRo
Rm9yRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3
ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgU3RyaW5nIE1hdGhNTE1lbmNsb3Nl
RWxlbWVudDo6bG9uZ0RpdkxlZgogICAgIFRleHRSdW4gcnVuKGNsb3NpbmdCcmFjZS5pbXBsKCks
IGNsb3NpbmdCcmFjZS5sZW5ndGgoKSk7CiAgICAgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsK
ICAgICBpZiAobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQgPSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCk7CiAgICAgICAgIHBhZGRpbmcuYXBwZW5kTnVtYmVyKGZvbnQud2lkdGgocnVuKSk7CiAgICAg
ICAgIHBhZGRpbmcuYXBwZW5kTGl0ZXJhbCgicHgiKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJE
T01UaW1lci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJG
b250R2VuZXJpY0ZhbWlsaWVzLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9y
eVByZXNzdXJlSGFuZGxlci5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDggQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjZGVmaW5lIFBvcHVwTWVudVN0eWxlX2gKIAogI2luY2x1ZGUgIkNvbG9y
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgUG9wdXBNZW51U2l6ZU1pbmkKICAgICB9OwogCi0gICAgUG9w
dXBNZW51U3R5bGUoY29uc3QgQ29sb3ImIGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kLCBjb25zdCBGb250JiBmb250LCBib29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwg
Ym9vbCBoYXNEZWZhdWx0QXBwZWFyYW5jZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91
bmRDb2xvclR5cGUgYmFja2dyb3VuZENvbG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3Is
IFBvcHVwTWVudVR5cGUgbWVudVR5cGUgPSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51
U2l6ZSA9IFBvcHVwTWVudVNpemVOb3JtYWwpCisgICAgUG9wdXBNZW51U3R5bGUoY29uc3QgQ29s
b3ImIGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVs
dEFwcGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJh
Y2tncm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBl
IG1lbnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1l
bnVTaXplTm9ybWFsKQogICAgICAgICA6IG1fZm9yZWdyb3VuZENvbG9yKGZvcmVncm91bmQpCiAg
ICAgICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCkKICAgICAgICAgLCBtX2ZvbnQo
Zm9udCkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgQ29sb3ImIGZvcmVn
cm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9yZWdyb3VuZENvbG9yOyB9CiAgICAgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENv
bG9yOyB9Ci0gICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQor
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAg
ICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICBib29s
IGlzRGlzcGxheU5vbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRGlzcGxheU5vbmU7IH0KICAgICBi
b29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0QXBw
ZWFyYW5jZTsgfQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENvbG9y
IG1fZm9yZWdyb3VuZENvbG9yOwogICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotICAgIEZv
bnQgbV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICBib29sIG1fdmlzaWJsZTsK
ICAgICBib29sIG1faXNEaXNwbGF5Tm9uZTsKICAgICBib29sIG1faGFzRGVmYXVsdEFwcGVhcmFu
Y2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MZW5ndGhCb3ggVGhlbWU6OmNv
bnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJv
eCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRl
cihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAg
Y2FzZSBQdXNoQnV0dG9uUGFydDoKQEAgLTQyLDcgKzQyLDcgQEAgTGVuZ3RoQm94IFRoZW1lOjpj
b250cm9sQm9yZGVyKENvbnRyb2xQYQogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1lOjpjb250
cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGlu
ZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAg
Y2FzZSBNZW51bGlzdFBhcnQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgJKHJldmlzaW9u
IDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29u
dHJvbFN0YXRlcy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRl
ICJMZW5ndGhTaXplLmgiCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBD
U1Mgc3lzdGVtIGNvbG9ycyBhbmQgZm9udHMKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9y
KFRoZW1lQ29sb3IpIGNvbnN0IHsgcmV0dXJuIENvbG9yKCk7IH0KLSAgICB2aXJ0dWFsIEZvbnQg
c3lzdGVtRm9udChUaGVtZUZvbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IHsgcmV0dXJuIEZv
bnQoKTsgfQorICAgIHZpcnR1YWwgRm9udENhc2NhZGUgc3lzdGVtRm9udChUaGVtZUZvbnQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0IHsgcmV0dXJuIEZvbnRDYXNjYWRlKCk7IH0KICAgICAKICAg
ICAvLyBIb3cgZmFzdCB0aGUgY2FyZXQgYmxpbmtzIGluIHRleHQgZmllbGRzLgogICAgIHZpcnR1
YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIDAuNTsgfQpAQCAt
ODIsMTcgKzgyLDE3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0IHRo
ZSBSZW5kZXJTdHlsZXMgb2YgY29udHJvbHMuCiAgICAgCiAgICAgLy8gVGhlIGZvbnQgZGVzY3Jp
cHRpb24gcmVzdWx0IHNob3VsZCBoYXZlIGEgem9vbWVkIGZvbnQgc2l6ZS4KLSAgICB2aXJ0dWFs
IEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYgZm9u
dCwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIGZvbnQuZm9udERlc2NyaXB0
aW9uKCk7IH0KKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9s
UGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25z
dCB7IHJldHVybiBmb250LmZvbnREZXNjcmlwdGlvbigpOyB9CiAgICAgCiAgICAgLy8gVGhlIHNp
emUgaGVyZSBpcyBpbiB6b29tZWQgY29vcmRpbmF0ZXMgYWxyZWFkeS4gIElmIGEgbmV3IHNpemUg
aXMgcmV0dXJuZWQsIGl0IGFsc28gbmVlZHMgdG8gYmUgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgot
ICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9u
dCYsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IC8qem9vbUZhY3RvciovKSBj
b25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9CisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRy
b2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRT
aXplOyB9CiAgICAgCiAgICAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBzaXplIGZvciBhIGNvbnRy
b2wgaW4gem9vbWVkIGNvb3JkaW5hdGVzLiAgCi0gICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmlt
dW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IC8qem9vbUZhY3Rv
ciovKSBjb25zdCB7IHJldHVybiBMZW5ndGhTaXplKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgw
LCBGaXhlZCkpOyB9CisgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShD
b250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29u
c3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
KTsgfQogICAgIAogICAgIC8vIEFsbG93cyB0aGUgdGhlbWUgdG8gbW9kaWZ5IHRoZSBleGlzdGlu
ZyBwYWRkaW5nL2JvcmRlci4KLSAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhD
b250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdDsKLSAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVy
KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRk
aW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9v
bWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBj
b250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0
aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAKICAgICAvLyBX
aGV0aGVyIG9yIG5vdCB3aGl0ZXNwYWNlOiBwcmUgc2hvdWxkIGJlIGZvcmNlZCBvbiBhbHdheXMu
CiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBh
cnQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9XaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQu
aAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2Fk
ZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBsYXRm
b3JtTW91c2VFdmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTQyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAg
ICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2lu
Y2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
SGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdURjsKLXVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwotCi1uYW1lc3BhY2UgV1RGIHsK
LQotLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRleHRMYXlvdXQ+IGluIHNvdXJjZSBm
aWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBUZXh0TGF5b3V0IGNsYXNzIGRlZmlu
aXRpb24KLXRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91
dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQotewotICAgIFdlYkNvcmU6OkZvbnQ6OmRlbGV0
ZUxheW91dChwdHIpOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJl
ZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwotCi1jb25zdCB1aW50OF90IEZv
bnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9IHsKLSAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMSAvKnNwYWNl
Ki8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLyotKi8sIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLyo/Ki8sCi0gICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsCi0gICAgMSAvKm5vLWJyZWFrIHNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi19OwotCi1z
dGF0aWMgYm9vbCBpc0RyYXduV2l0aFNWR0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKQotewotICAg
IHJldHVybiBydW4ucmVuZGVyaW5nQ29udGV4dCgpOwotfQotCi1zdGF0aWMgYm9vbCB1c2VCYWNr
c2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0g
ICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdGF0
aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+KiBzZXQ7Ci0gICAgaWYgKCFzZXQpIHsKLSAgICAgICAg
c2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5nPjsKLSAgICAgICAgc2V0LT5hZGQoIk1TIFBH
b3RoaWMiKTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BHb3RoaWNbXSA9IHsweEZGMkQs
IDB4RkYzMywgMHgwMDIwLCAweEZGMzAsIDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07
Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUEdvdGhpYywgV1RG
X0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUEdvdGhpYykpKTsKLQotICAgICAgICBzZXQtPmFk
ZCgiTVMgUE1pbmNobyIpOwotICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUE1pbmNob1tdID0g
ezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHg2NjBFLCAweDY3MUR9OwotICAgICAg
ICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BNaW5jaG8sIFdURl9BUlJBWV9M
RU5HVEgodW5pY29kZU5hbWVNU1BNaW5jaG8pKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIEdv
dGhpYyIpOwotICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TR290aGljW10gPSB7MHhGRjJELCAw
eEZGMzMsIDB4MDAyMCwgMHgzMEI0LCAweDMwQjcsIDB4MzBDMywgMHgzMEFGfTsKLSAgICAgICAg
c2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNHb3RoaWMsIFdURl9BUlJBWV9MRU5H
VEgodW5pY29kZU5hbWVNU0dvdGhpYykpKTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgTWluY2hv
Iik7Ci0gICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYz
MywgMHgwMDIwLCAweDY2MEUsIDB4NjcxRH07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmlu
Zyh1bmljb2RlTmFtZU1TTWluY2hvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNNaW5j
aG8pKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1laXJ5byIpOwotICAgICAgICBVQ2hhciB1bmlj
b2RlTmFtZU1laXJ5b1tdID0gezB4MzBFMSwgMHgzMEE0LCAweDMwRUEsIDB4MzBBQX07Ci0gICAg
ICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1laXJ5bywgV1RGX0FSUkFZX0xF
TkdUSCh1bmljb2RlTmFtZU1laXJ5bykpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldC0+Y29udGFp
bnMoZmFtaWx5KTsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87
Ci0KLVR5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJl
cyA9IDA7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb250
IEltcGxlbWVudGF0aW9uIChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQotRm9udDo6Rm9udCgpCi0gICAgOiBtX2xldHRlclNw
YWNpbmcoMCkKLSAgICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2woZmFsc2UpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoMCkKLXsKLX0KLQot
Rm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5n
LCBmbG9hdCB3b3JkU3BhY2luZykKLSAgICA6IG1fZm9udERlc2NyaXB0aW9uKGZkKQotICAgICwg
bV9sZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpCi0gICAgLCBtX3dvcmRTcGFjaW5nKHdvcmRT
cGFjaW5nKQotICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCh1c2VCYWNrc2xhc2hBc1ll
blNpZ25Gb3JGYW1pbHkoZmQuZmlyc3RGYW1pbHkoKSkpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVh
dHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSkKLXsKLX0KLQotLy8gRklYTUU6IFdl
IHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCi1Gb250
OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZv
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9nbHlwaHMo
Rm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0
dGVyU3BhY2luZygwKQotICAgICwgbV93b3JkU3BhY2luZygwKQotICAgICwgbV91c2VCYWNrc2xh
c2hBc1llblN5bWJvbChmYWxzZSkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpKQotewotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVBy
aW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRT
bW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9u
dCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNp
emUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFs
aWMpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJv
bGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSNlbmRpZgotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxk
IG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNpZiBQTEFURk9S
TShJT1MpCi1Gb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEds
eXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3Bh
Y2luZygwKQotICAgICwgbV93b3JkU3BhY2luZygwKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1
cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgQ1RGb250UmVmIHByaW1h
cnlGb250ID0gZm9udERhdGEuZm9udCgpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9m
b250RGVzY3JpcHRpb24uc2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlG
b250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2Vp
Z2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9udCgpKTsKLSAg
ICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERlc2NyaXB0
aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwotfQotI2VuZGlmCi0KLUZvbnQ6OkZvbnQoY29uc3Qg
Rm9udCYgb3RoZXIpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5tX2ZvbnREZXNjcmlw
dGlvbikKLSAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQotICAgICwgbV9sZXR0ZXJTcGFj
aW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKLSAgICAsIG1fd29yZFNwYWNpbmcob3RoZXIubV93
b3JkU3BhY2luZykKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wob3RoZXIubV91c2VC
YWNrc2xhc2hBc1llblN5bWJvbCkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpKQotewotfQotCi1Gb250JiBGb250OjpvcGVyYXRvcj0oY29u
c3QgRm9udCYgb3RoZXIpCi17Ci0gICAgbV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5tX2ZvbnRE
ZXNjcmlwdGlvbjsKLSAgICBtX2dseXBocyA9IG90aGVyLm1fZ2x5cGhzOwotICAgIG1fbGV0dGVy
U3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKLSAgICBtX3dvcmRTcGFjaW5nID0gb3Ro
ZXIubV93b3JkU3BhY2luZzsKLSAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gb3RoZXIu
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBv
dGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29s
IEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fZm9udERlc2NyaXB0aW9uICE9IG90aGVy
Lm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2luZyAhPSBvdGhlci5tX2xldHRlclNw
YWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dvcmRTcGFjaW5nKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzID09IG90aGVyLm1fZ2x5cGhzKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fZ2x5cGhzIHx8ICFvdGhlci5tX2dseXBocykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgIT0g
b3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVob3cgb2NjdXI/IEFsbCBmb250cyBz
aG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJlY2FsYy4KLSAgICBpZiAobV9nbHlw
aHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVjdG9y
VmVyc2lvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5nZW5l
cmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdHJ1Y3QgRm9udEdseXBoc0NhY2hlS2V5
IHsKLSAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBzaGFyZWQgd2l0aCB0aGUgbG93ZXIg
bGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9iamVjdHMpLgotICAgIEZvbnREZXNj
cmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0aW9uQ2FjaGVLZXk7Ci0gICAgVmVj
dG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7Ci0gICAgdW5zaWduZWQgZm9udFNlbGVjdG9y
SWQ7Ci0gICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKLSAgICB1bnNpZ25lZCBmb250
U2VsZWN0b3JGbGFnczsKLX07Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVFbnRyeSB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRm9udEdseXBoc0NhY2hlRW50
cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRHbHlwaHM+JiYgZykKLSAgICAgICAg
OiBrZXkoV1RGOjptb3ZlKGspKQotICAgICAgICAsIGdseXBocyhXVEY6Om1vdmUoZykpCi0gICAg
eyB9Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBSZWY8Rm9udEdseXBocz4gZ2x5
cGhzOwotfTsKLQotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBGb250R2x5cGhzQ2FjaGU7Ci0KLXN0
YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBhLCBjb25zdCBG
b250R2x5cGhzQ2FjaGVLZXkmIGIpCi17Ci0gICAgaWYgKGEuZm9udERlc2NyaXB0aW9uQ2FjaGVL
ZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwgYS5mb250U2Vs
ZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbiB8fCBhLmZvbnRTZWxlY3RvckZs
YWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5zaXplKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYS5mYW1pbGllcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGEuZmFtaWxpZXNbaV0uaW1w
bCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRm9udEdseXBoc0NhY2hlJiBmb250
R2x5cGhzQ2FjaGUoKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChGb250
R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7Ci0gICAgcmV0dXJuIGNhY2hlOwotfQotCi12b2lkIGlu
dmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQotewotICAgIGZvbnRHbHlwaHNDYWNoZSgpLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgY2xlYXJXaWR0aENhY2hlcygpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0g
Zm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkud2lkdGhD
YWNoZSgpLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBtYWtlRm9udFNlbGVjdG9yRmxh
Z3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlwdCgpKSA8PCAxIHwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKTsKLX0KLQotc3RhdGljIHZvaWQg
bWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2FjaGVLZXkmIGtleSwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCi17
Ci0gICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0gRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleShkZXNjcmlwdGlvbik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
c2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKLSAgICAgICAga2V5LmZhbWlsaWVzLmFwcGVu
ZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7Ci0gICAga2V5LmZvbnRTZWxlY3RvcklkID0gZm9u
dFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgpIDogMDsKLSAgICBrZXkuZm9udFNl
bGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDog
MDsKLSAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250U2VsZWN0b3IgJiYgZm9udFNlbGVj
dG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikgPyBtYWtlRm9udFNlbGVjdG9yRmxh
Z3MoZGVzY3JpcHRpb24pIDogMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVGb250R2x5
cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYga2V5KQotewotICAgIFZlY3Rv
cjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOwotICAgIGhhc2hDb2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKLQotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5LmNvbXB1dGVIYXNoKCkpOwotICAg
IGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvcklkKTsKLSAgICBoYXNo
Q29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0b3JWZXJzaW9uKTsKLSAgICBoYXNo
Q29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0b3JGbGFncyk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgaGFz
aENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNbaV0uaW1wbCgpID8gQ2FzZUZvbGRp
bmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsKLQotICAgIHJldHVybiBTdHJpbmdI
YXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNp
emVvZih1bnNpZ25lZCkpOwotfQotCi12b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21G
b250R2x5cGhzQ2FjaGUoKQotewotICAgIFZlY3Rvcjx1bnNpZ25lZCwgNTA+IHRvUmVtb3ZlOwot
ICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5k
KCk7Ci0gICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZm9udEdseXBoc0Nh
Y2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUt
PmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChp
dC0+a2V5KTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNp
emUoKTsgKytpKQotICAgICAgICBmb250R2x5cGhzQ2FjaGUoKS5yZW1vdmUodG9SZW1vdmVbaV0p
OwotfQotCi1zdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotewotICAgIEZvbnRHbHlwaHNDYWNoZUtleSBrZXk7
Ci0gICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZvbnREZXNjcmlwdGlvbiwgZm9udFNl
bGVjdG9yLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udEdseXBoc0Nh
Y2hlSGFzaChrZXkpOwotICAgIEZvbnRHbHlwaHNDYWNoZTo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0Nh
Y2hlRW50cnk+KCkpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKLSAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250
R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
LSAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udEdseXBoc0NhY2hlRW50cnk+KFdU
Rjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9udFNlbGVjdG9yKSk7Ci0gICAgUmVm
PEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlwaHMuZ2V0KCk7Ci0KLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IHBydW5lQ291bnRlcjsKLSAgICAvLyBSZWZlcmVuY2VkIEZvbnRHbHlwaHMgd291bGQgZXhpc3Qg
YW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgotICAgIGlmICghKCsr
cHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCi0gICAgICAgIHBydW5l
VW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKLSAgICAvLyBQcmV2ZW50
IHBhdGhvbG9naWNhbCBncm93dGguCi0gICAgaWYgKGZvbnRHbHlwaHNDYWNoZSgpLnNpemUoKSA+
IG1heGltdW1FbnRyaWVzKQotICAgICAgICBmb250R2x5cGhzQ2FjaGUoKS5yZW1vdmUoZm9udEds
eXBoc0NhY2hlKCkuYmVnaW4oKSk7Ci0gICAgcmV0dXJuIGdseXBoczsKLX0KLQotdm9pZCBGb250
Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKLXsK
LSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERlc2Ny
aXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1i
b2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1pbHkoKSk7Ci0gICAg
bV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKLX0K
LQotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAot
ewotICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBm
b250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAotICAgIC8vIGV4Y2VwdCBp
ZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBpdCB3
aWxsIHVzZSBhIGZhbGxiYWNrCi0gICAgLy8gZm9udCkuCi0gICAgaWYgKGlzTG9hZGluZ0N1c3Rv
bUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnRO
b3RSZWFkeSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5s
ZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChy
dW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxl
cyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlw
ZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykg
IT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNv
ZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxl
eCkKLSAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZy
b20sIHRvKTsKLQotICAgIHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBwb2lu
dCwgZnJvbSwgdG8pOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAot
ewotICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAodG8gPCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKLQotICAgIENvZGVQYXRo
IGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZh
c3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFu
ZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldp
dGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0gICAg
aWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NG
b3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKLSAgICBl
bHNlCi0gICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVu
LCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotfQotCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBU
ZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAgICBDb2RlUGF0aCBj
b2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBD
b21wbGV4KSB7Ci0gICAgICAgIC8vIFRoZSBjb21wbGV4IHBhdGggaXMgbW9yZSByZXN0cmljdGl2
ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhhbiB0aGUgc2ltcGxlIHBhdGgsIHNv
IHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRoZWlyIGJlaGF2aW9ycyBtYXRjaC4K
LSAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKSkKLSAg
ICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOwotICAgICAgICAvLyBUaGUgc2ltcGxlIHBhdGgg
Y2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92ZXJmbG93IGlzIG5vdCBvYnNlcnZh
YmxlLgotICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxv
dyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcykpCi0g
ICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKLSAgICB9Ci0KLSAgICBib29sIGhhc0tlcm5p
bmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIChLZXJuaW5nIHwgTGlnYXR1
cmVzKTsKLSAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nID0gd29yZFNwYWNp
bmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7Ci0gICAgZmxvYXQqIGNhY2hlRW50cnkgPSBtX2dseXBo
cy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWll
dF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3Bh
Y2luZywgZ2x5cGhPdmVyZmxvdyk7Ci0gICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4o
KmNhY2hlRW50cnkpKQotICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7Ci0KLSAgICBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOwotICAgIGlmICghZmFs
bGJhY2tGb250cykKLSAgICAgICAgZmFsbGJhY2tGb250cyA9ICZsb2NhbEZhbGxiYWNrRm9udHM7
Ci0KLSAgICBmbG9hdCByZXN1bHQ7Ci0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgPT0gQ29tcGxleCkK
LSAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwotCi0g
ICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+aXNFbXB0eSgpKQotICAgICAgICAq
Y2FjaGVFbnRyeSA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mbG9hdCBGb250
Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBn
bHlwaE5hbWUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIHJldHVybiBydW4ucmVuZGVyaW5nQ29udGV4dCgp
LT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4sIGNoYXJzQ29uc3VtZWQsIGdseXBo
TmFtZSk7Ci0jZW5kaWYKLQotICAgIGNoYXJzQ29uc3VtZWQgPSBydW4ubGVuZ3RoKCk7Ci0gICAg
Z2x5cGhOYW1lID0gIiI7Ci0gICAgcmV0dXJuIHdpZHRoKHJ1bik7Ci19Ci0KLUdseXBoRGF0YSBG
b250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Ci17Ci0gICAgaWYgKHZhcmlhbnQgPT0gQXV0b1Zhcmlh
bnQpIHsKLSAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFwcmlt
YXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgewotICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMg
PSB1X3RvdXBwZXIoYyk7Ci0gICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKLSAgICAgICAg
ICAgICAgICBjID0gdXBwZXJDOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBTbWFsbENhcHNW
YXJpYW50OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdmFyaWFudCA9IE5v
cm1hbFZhcmlhbnQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFyaWFudCA9IE5vcm1h
bFZhcmlhbnQ7Ci0gICAgfQotCi0gICAgaWYgKG1pcnJvcikKLSAgICAgICAgYyA9IHVfY2hhck1p
cnJvcihjKTsKLQotICAgIHJldHVybiBtX2dseXBocy0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMs
IG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKLX0KLQotI2lmICFQTEFURk9STShDT0NPQSkK
LVBhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBm
bG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBGb250
OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCi17Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0j
ZW5kaWYKLQotCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBmb250RmFtaWxpZXNXaXRoSW52YWxpZENo
YXJXaWR0aFtdID0gewotICAgICJBbWVyaWNhbiBUeXBld3JpdGVyIiwKLSAgICAiQXJpYWwgSGVi
cmV3IiwKLSAgICAiQ2hhbGtib2FyZCIsCi0gICAgIkNvY2hpbiIsCi0gICAgIkNvcnNpdmEgSGVi
cmV3IiwKLSAgICAiQ291cmllciIsCi0gICAgIkV1cGhlbWlhIFVDQVMiLAotICAgICJHZW5ldmEi
LAotICAgICJHaWxsIFNhbnMiLAotICAgICJIZWkiLAotICAgICJIZWx2ZXRpY2EiLAotICAgICJI
b2VmbGVyIFRleHQiLAotICAgICJJbmFpTWF0aGkiLAotICAgICJLYWkiLAotICAgICJMdWNpZGEg
R3JhbmRlIiwKLSAgICAiTWFya2VyIEZlbHQiLAotICAgICJNb25hY28iLAotICAgICJNc2h0YWth
biIsCi0gICAgIk5ldyBQZW5pbmltIE1UIiwKLSAgICAiT3Nha2EiLAotICAgICJSYWFuYW5hIiwK
LSAgICAiU1RIZWl0aSIsCi0gICAgIlN5bWJvbCIsCi0gICAgIlRpbWVzIiwKLSAgICAiQXBwbGUg
QnJhaWxsZSIsCi0gICAgIkFwcGxlIExpR290aGljIiwKLSAgICAiQXBwbGUgTGlTdW5nIiwKLSAg
ICAiQXBwbGUgU3ltYm9scyIsCi0gICAgIkFwcGxlR290aGljIiwKLSAgICAiQXBwbGVNeXVuZ2pv
IiwKLSAgICAiI0d1bmdTZW8iLAotICAgICIjSGVhZExpbmVBIiwKLSAgICAiI1BDTXl1bmdqbyIs
Ci0gICAgIiNQaWxHaSIsCi19OwotCi0vLyBGb3IgZm9udCBmYW1pbGllcyB3aGVyZSBhbnkgb2Yg
dGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBpbiB0aGUgT1MvMiB0YWJsZQotLy8g
Zm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxlZ2FjeSB3ZWJraXQgYmVoYXZpb3Ig
b2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCi0vLyBmcm9tIHRoZSB3aWR0aCBvZiBhICcwJy4g
VGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBmb250cywK
LS8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBwbGF0Zm9y
bXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCi0vLyBhbGwgcGxhdGZvcm1zLgotYm9vbCBGb250Ojpo
YXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAotewotICAgIEF0b21pY1N0cmluZyBmYW1p
bHkgPSBmaXJzdEZhbWlseSgpOwotICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKLSAgICAv
LyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxzbyBoYXZlIGFuIGludmFsaWQgZW50
cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCi0gICAgaWYgKHByaW1hcnlGb250RGF0
YUlzU3lzdGVtRm9udCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAgIHN0
YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldp
ZHRoTWFwID0gMDsKLQotICAgIGlmICghZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhN
YXApIHsKLSAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSBuZXcg
SGFzaFNldDxBdG9taWNTdHJpbmc+OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
V1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aCk7ICsraSkK
LSAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5hZGQoQXRv
bWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW2ldKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+Y29udGFp
bnMoZmFtaWx5KTsKLX0KLQotYm9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBoYXNWYWxpZEF2
ZXJhZ2VDaGFyV2lkdGgoKTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgd2lkdGggPSByb3Vu
ZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkpOyAvLyBGSVhNRTogcHJpbWFyeUZv
bnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmlyc3RGYW1pbHkoKS4KLSAgICByZXR1
cm4gc3VjY2VzczsKLX0KLQotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Ci17Ci0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7
Ci0KLSAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKLSAgICAvLyBG
SVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5z
IHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAw
NTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgo
KSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICBjb2RlUGF0aFRvVXNlID0g
Q29tcGxleDsKLQotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpCi0gICAgICAgIHJl
dHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHNlbGVjdGlvblJlY3Qs
IGZyb20sIHRvKTsKLQotICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Ci19Ci0KLWludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0g
Q29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8fCBpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkpCi0gICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQocnVu
LCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIFN0cmluZyBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBub3JtYWxpemVkOwotICAgIG5vcm1h
bGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnQ6Om5vcm1h
bGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7Ci0KLSAgICByZXR1cm4gbm9ybWFsaXplZC50b1N0
cmluZygpOwotfQotCi1TdHJpbmcgRm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNl
c0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci19Ci0KLVN0cmluZyBGb250Ojpub3JtYWxp
emVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKLX0K
LQotc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7Ci0KLXZvaWQgRm9u
dDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHNo
b3VsZFVzZVNtb290aGluZzsKLX0KLQotYm9vbCBGb250OjpzaG91bGRVc2VTbW9vdGhpbmcoKQot
ewotICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5nOwotfQotCi12b2lkIEZvbnQ6OnNl
dENvZGVQYXRoKENvZGVQYXRoIHApCi17Ci0gICAgc19jb2RlUGF0aCA9IHA7Ci19Ci0KLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKLXsKLSAgICByZXR1cm4gc19jb2RlUGF0aDsKLX0K
LQotdm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhUeXBlc2V0dGluZ0Zl
YXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCi17Ci0gICAgc19kZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Ci19Ci0KLVR5cGVzZXR0aW5nRmVhdHVyZXMg
Rm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQotewotICAgIHJldHVybiBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250Ojpjb2RlUGF0
aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgaWYgKHNfY29kZVBhdGggIT0gQXV0
bykKLSAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQot
ICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZTsK
LSNlbmRpZgotCi0gICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpICYm
IG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpLT5zaXplKCkgPiAwKQotICAgICAg
ICByZXR1cm4gQ29tcGxleDsKLSAgICAKLSAgICBpZiAocnVuLmxlbmd0aCgpID4gMSAmJiAhV2lk
dGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKCp0aGlzKSkKLSAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICBpZiAoIXJ1bi5jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgo
KSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZTsKLQotICAgIGlmIChydW4uaXM4Qml0KCkpCi0gICAg
ICAgIHJldHVybiBTaW1wbGU7Ci0KLSAgICAvLyBTdGFydCBmcm9tIDAgc2luY2UgZHJhd2luZyBh
bmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hhcmFjdGVycyBiZWZvcmUgcnVuLT5m
cm9tLgotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzMTYo
KSwgcnVuLmxlbmd0aCgpKTsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFu
Z2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQotewotICAg
IC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMg
dXNlZC4gTm90ZSB0aGF0IHdlIAotICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJh
Y3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwotICAgIC8vIGFyZSBu
b3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdvIHRvIHRoZSBjb21wbGV4IHBhdGgu
Ci0gICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdlbGwgY29uc2lkZXIgYmluYXJ5IHNl
YXJjaCBvdmVyIGEgc29ydGVkCi0gICAgLy8gbGlzdCBvZiByYW5nZXMuCi0gICAgQ29kZVBhdGgg
cmVzdWx0ID0gU2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykg
ewotICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgaWYgKGMg
PCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChNb2RpZmllciBMZXR0ZXJzIDogVG9u
ZSBsZXR0ZXJzKSAgCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgy
RTkpIAotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMw
MCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MzZGKQotICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDA1OTEgfHwgYyA9PSAweDA1
QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRpbmcgVSswNUJFIEhlYnJldyBjb21i
aW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNlcSwgU29mIFBhc3VxIGFuZCBOdW4g
SGFmdWtoYQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MDVDRikK
LSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIC8vIFUrMDYwMCB0aHJvdWdo
IFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28sIFNhbWFyaXRhbiwgTWFuZGFpYywK
LSAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3VybXVraGksIEd1amFyYXRpLCBPcml5
YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCi0gICAgICAgIC8vIE1hbGF5YWxhbSwgU2luaGFs
YSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCi0gICAgICAgIGlmIChjIDwgMHgwNjAwKSAK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDEwOUYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICAvLyBVKzExMDAgdGhyb3VnaCBVKzExRkYg
SGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hvdWxkIGJlIGxlZnQgaGVyZSBpZiB5
b3UgcHJlY29tcG9zZTsKLSAgICAgICAgLy8gTW9kZXJuIEtvcmVhbiB3aWxsIGJlIHByZWNvbXBv
c2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKLSAgICAgICAgaWYgKGMgPCAweDExMDApCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxMUZGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDEzNUQpIC8vIFUrMTM1RCB0aHJv
dWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDEzNUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgwIHRocm91Z2ggVSsxOEFGIFRhZ2Fs
b2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwgTW9uZ29saWFuCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOEFGKQotICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDE5MDApIC8vIFUrMTkwMCB0aHJvdWdoIFUr
MTk0RiBMaW1idSAoVW5pY29kZSA0LjApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKGMgPD0gMHgxOTRGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAg
aWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUrMTlERiBOZXcgVGFpIEx1ZQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTlERikKLSAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxQTAwKSAvLyBVKzFBMDAgdGhy
b3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxpbmVzZSwgQmF0YWssIExlcGNoYSwg
VmVkaWMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDFDRkYpCi0g
ICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MURDMCkgLy8g
VSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNyaXRpY2FsIG1hcmsgc3VwcGxlbWVu
dAotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MURGRikKLSAgICAg
ICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIC8vIFUrMUUwMCB0aHJvdWdoIFUrMjAw
MCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3RhY2tlZCBkaWFjcml0aWNzCi0gICAg
ICAgIGlmIChjIDw9IDB4MjAwMCkgewotICAgICAgICAgICAgcmVzdWx0ID0gU2ltcGxlV2l0aEds
eXBoT3ZlcmZsb3c7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBVKzIwRkYgQ29tYmluaW5nIG1hcmtz
IGZvciBzeW1ib2xzCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgy
MEZGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDJD
RUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5pbmcgbWFya3MgZm9yIENvcHRpYwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MkNGMSkKLSAgICAgICAg
ICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgzMDJBKSAvLyBVKzMwMkEg
dGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1bCBUb25lIG1hcmtzCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzMDJGKQotICAgICAgICAgICAgcmV0
dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEE2N0MpIC8vIFUrQTY3QyB0aHJvdWdo
IFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJpbGxpYwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4QTY3RCkKLSAgICAgICAgICAgIHJldHVybiBDb21w
bGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBVK0E2RjAgdGhyb3VnaCBVK0E2RjEg
Q29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKGMgPD0gMHhBNkYxKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAv
LyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZh
bmFnYXJpIEV4dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2Us
IE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKLSAgICAgICAgaWYg
KGMgPCAweEE4MDApIAotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4
QUJGRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhE
N0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3VsIEphbW8gRXh0LiBCCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhEN0ZGKQotICAgICAgICAgICAgcmV0
dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPD0gMHhEQkZGKSB7Ci0gICAgICAgICAgICAv
LyBIaWdoIHN1cnJvZ2F0ZQotCi0gICAgICAgICAgICBpZiAoaSA9PSBsZW4gLSAxKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBVQ2hhciBuZXh0ID0gY2hhcmFjdGVy
c1srK2ldOwotICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJBSUwobmV4dCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyMzIgc3VwcGxlbWVudGFyeUNoYXJh
Y3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0KTsKLQotICAgICAgICAgICAgaWYg
KHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAvLyBVKzFGMUU2IHRocm91Z2ggVSsx
RjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPD0gMHgxRjFGRikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICAgICAgaWYgKHN1cHBsZW1l
bnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAwIHRocm91Z2ggVStFMDFFRiBVbmlj
b2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweEUwMUVGKQotICAgICAgICAg
ICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZm9y
IEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsxMTA4MCBibG9jaykgYW5kIG90aGVy
IGNvbXBsZXggc2NyaXB0cwotICAgICAgICAgICAgLy8gaW4gcGxhbmUgMSBvciBoaWdoZXIuCi0K
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAweEZF
MDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEZFMEYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4RkUyMCkgLy8gVStGRTIw
IHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtzCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRm9udDo6aXNDSktJZGVvZ3Jh
cGgoVUNoYXIzMiBjKQotewotICAgIC8vIFRoZSBiYXNpYyBDSksgVW5pZmllZCBJZGVvZ3JhcGhz
IGJsb2NrLgotICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9IDB4OUZGRikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24g
QS4KLSAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDREQkYpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIAotICAgIC8vIENKSyBSYWRpY2FscyBTdXBwbGVtZW50LgotICAgIGlmIChjID49
IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
Ly8gS2FuZ3hpIFJhZGljYWxzLgotICAgIGlmIChjID49IDB4MkYwMCAmJiBjIDw9IDB4MkZERikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFN0cm9rZXMuCi0gICAgaWYg
KGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzLgotICAgIGlmIChjID49IDB4Rjkw
MCAmJiBjIDw9IDB4RkFGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pL
IFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KLSAgICBpZiAoYyA+PSAweDIwMDAwICYm
IGMgPD0gMHgyQTZERikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgIC8vIENK
SyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCi0gICAgaWYgKGMgPj0gMHgyQTcwMCAm
JiBjIDw9IDB4MkI3M0YpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBV
bmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCi0gICAgaWYgKGMgPj0gMHgyQjc0MCAmJiBj
IDw9IDB4MkI4MUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBDb21w
YXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KLSAgICBpZiAoYyA+PSAweDJGODAwICYm
IGMgPD0gMHgyRkExRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCi17Ci0g
ICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2UgM3JkIFRvbmUKLSAgICAvLyAweDJD
QSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5kYXJpbiBDaGluZXNlIDJuZCBUb25l
Ci0gICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZlIEFjY2VzcywgTWFuZGFyaW4gQ2hp
bmVzZSA0dGggVG9uZSAKLSAgICAvLyAweDJEOSBEb3QgQWJvdmUsIE1hbmRhcmluIENoaW5lc2Ug
NXRoIFRvbmUgCi0gICAgaWYgKChjID09IDB4MkM3KSB8fCAoYyA9PSAweDJDQSkgfHwgKGMgPT0g
MHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
KGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChjID09IDB4MjAzMCkgfHwgKGMgPT0g
MHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCi0gICAgICAgIHx8IChjID09IDB4MjA0MikgfHwgKGMg
PT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09IDB4MjA0OSkgfHwgKGMgPT0gMHgy
MDUxKQotICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChjID09IDB4MjBERSkgfHwgKGMgPT0g
MHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4MjEwNSkKLSAgICAgICAgfHwgKGMg
PT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09IDB4MjExMykgfHwgKGMgPT0gMHgy
MTE2KSB8fCAoYyA9PSAweDIxMjEpCi0gICAgICAgIHx8IChjID09IDB4MjEyQikgfHwgKGMgPT0g
MHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4MjE1MSkgfHwgKGMgPT0gMHgyMTUy
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNTYgJiYgYyA8PSAw
eDIxNUEpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTYwICYmIGMg
PD0gMHgyMTZCKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE3MCAm
JiBjIDw9IDB4MjE3QikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgy
MTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMwNykgfHwgKGMgPT0gMHgyMzEyKSB8
fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0NDKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09IDB4MjQyMykpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNDYwICYmIGMgPD0gMHgyNDkyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjQ5QyAmJiBjIDw9IDB4MjRGRikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNUEwKSB8fCAoYyA9PSAweDI1
QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFBKSB8fCAoYyA9PSAweDI1QUIpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QjEpIHx8IChjID09IDB4
MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1QjYpIHx8IChjID09IDB4MjVCNykg
fHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAKLSAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9PSAweDI1QzEpIHx8IChjID09IDB4
MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1QzkpIHx8IChjID09IDB4MjVDQikg
fHwgKGMgPT0gMHgyNUNDKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAw
eDI1Q0UgJiYgYyA8PSAweDI1RDMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMg
Pj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChjID09IDB4MjVFRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2
MDAgJiYgYyA8PSAweDI2MDMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChjID09
IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAweDI2MEUpIHx8IChjID09IDB4MjYx
NikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDApIHx8IChjID09IDB4MjY0MikpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjYwICYmIGMgPD0gMHgyNjZG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjY3MiAmJiBjIDw9IDB4
MjY3RCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNkEwKSB8fCAo
YyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMgPT0gMHgyNzEzKSB8fCAoYyA9PSAw
eDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgyNzQwKSB8fCAoYyA9PSAweDI3NTYp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4Mjc3NiAmJiBjIDw9IDB4
Mjc3RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA9PSAweDJCMUEpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFj
dGVycy4KLSAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIC8vIENKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiwgZXhjbHVk
aW5nIDB4MzAzMC4KLSAgICBpZiAoYyA+PSAweDMwMDAgJiYgYyA8IDB4MzAzMCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+IDB4MzAzMCAmJiBjIDw9IDB4MzAzRikKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIaXJhZ2FuYQotICAgIGlmIChjID49IDB4MzA0MCAm
JiBjIDw9IDB4MzA5RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBLYXRha2FuYSAK
LSAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gQm9wb21vZm8KLSAgICBpZiAoYyA+PSAweDMxMDAgJiYgYyA8PSAweDMxMkYp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgzMTkwICYmIGMgPD0gMHgz
MTlGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEJvcG9tb2ZvIEV4dGVuZGVkCi0g
ICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAKLSAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzLgotICAgIGlmIChjID49
IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
Ly8gQ0pLIENvbXBhdGliaWxpdHkuCi0gICAgaWYgKGMgPj0gMHgzMzAwICYmIGMgPD0gMHgzM0ZG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4Rjg2MCAmJiBjIDw9IDB4
Rjg2MikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBG
b3Jtcy4KLSAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAweEZFNEYpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4RkUxMCkgfHwgKGMgPT0gMHhGRTExKSB8fCAoYyA9
PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8fCAoYyA9PSAweEZGMUMpIHx8IChj
ID09IDB4RkYxRSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEhhbGZ3aWR0aCBh
bmQgRnVsbHdpZHRoIEZvcm1zCi0gICAgLy8gVXN1YWxseSBvbmx5IHVzZWQgaW4gQ0pLCi0gICAg
aWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIEVtb2ppLgotICAgIGlmIChjID09IDB4MUYxMDApCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4MUYxMjkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBjIDw9IDB4MUYxNDkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjE1MCAmJiBjIDw9IDB4MUYxNjkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjE3MCAmJiBjIDw9IDB4MUYx
ODkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjIwMCAmJiBjIDw9
IDB4MUY2QzUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGlzQ0pLSWRlb2dy
YXBoKGMpOwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50
ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKLSAgICBpZiAoZGlyZWN0aW9uID09IExUUikgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNl
KGNoYXJhY3RlcnNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAg
ICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpIC0gMV0pKSB7Ci0gICAgICAgICAg
ICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXVuc2lnbmVk
IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBo
cyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7Ci0gICAgdW5zaWdu
ZWQgY291bnQgPSAwOwotICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFyMzIgY2hh
cmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hh
cmFjdGVyKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQoY2hhcmFjdGVyKSAmJiBpICsgMSA8
IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tpICsgMV0pKSB7Ci0gICAgICAgICAg
ICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlciwgY2hhcmFj
dGVyc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lvbikK
LSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwot
ICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBj
aGFyYWN0ZXJzW2kgLSAxXTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVy
KSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4
cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJhY3RlcikgJiYgaSA+IDEgJiYgVTE2
X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7Ci0gICAgICAgICAgICAgICAgY2hhcmFjdGVy
ID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbaSAtIDJdLCBjaGFyYWN0ZXIpOwot
ICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChleHBh
bmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkg
ewotICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lvbikKLSAgICAgICAgICAgICAg
ICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKLXsKLSAgICBpZiAoc3Ry
aW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCks
IGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci0gICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3
Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwotfQotCi1ib29sIEZvbnQ6
OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQotewotICAgIGlmIChVX0dFVF9HQ19N
QVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNLIHwgVV9HQ19DQ19NQVNLIHwgVV9H
Q19DRl9NQVNLKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWRkaXRpb25hbCB3
b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBDU1MgVGV4dCBMZXZlbCAzIEVkaXRv
cidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KLSAgICBpZiAoYyA9PSBldGhpb3BpY1dvcmRzcGFj
ZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8IGMgPT0gYWVnZWFuV29yZFNlcGFy
YXRvckRvdAotICAgICAgICB8fCBjID09IHVnYXJpdGljV29yZERpdmlkZXIgfHwgYyA9PSB0aWJl
dGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRpYmV0YW5NYXJrRGVsaW1pdGVyVHNo
ZWdCc3RhcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAotewotICAgIHJldHVybiBt
X2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKLX0KLSAgICAKLUds
eXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVU
eXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgaW50IGluZGV4KQotewotICAgIC8vIEluIGdlbmVyYWwsIHdlIHdhbnQgdG8gc2tpcCBkZXNj
ZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJzIG9uIENKSyBjaGFyYWN0ZXJzIGxl
YWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCi0gICAgLy8gc28gd2Ugd2FudCB0byBkcmF3
IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBiYXNp
cykuCi0gICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwotICAgIHVuc2lnbmVkIG9mZnNldEluU3Ry
aW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5kZXgpOwotCi0gICAgaWYgKG9mZnNl
dEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkgewotICAgICAgICAvLyBXZSBoYXZl
IG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhpcyBnbHlwaC4gQmFpbC4KLSAgICAg
ICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3
T3ZlckdseXBoOwotICAgIH0KLSAgICAKLSAgICBpZiAodGV4dFJ1bi5pczhCaXQoKSkKLSAgICAg
ICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVyczgoKVtvZmZzZXRJblN0cmluZ107
Ci0gICAgZWxzZQotICAgICAgICBVMTZfTkVYVCh0ZXh0UnVuLmNoYXJhY3RlcnMxNigpLCBvZmZz
ZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgCi0gICAg
Ly8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJfSURFT0dSQVBISUMgZG9lc24ndCBy
ZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNvZGVwb2ludHMuCi0gICAgLy8gSW5z
dGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2NhdGlvbiBibG9jayIgZm9yIHRoZSBj
aGFyYWN0ZXIuCi0gICAgVUJsb2NrQ29kZSBibG9ja0NvZGUgPSB1YmxvY2tfZ2V0Q29kZShiYXNl
Q2hhcmFjdGVyKTsKLSAgICBzd2l0Y2ggKGJsb2NrQ29kZSkgewotICAgIGNhc2UgVUJMT0NLX0NK
S19SQURJQ0FMU19TVVBQTEVNRU5UOgotICAgIGNhc2UgVUJMT0NLX0NKS19TWU1CT0xTX0FORF9Q
VU5DVFVBVElPTjoKLSAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9DSktfTEVUVEVSU19BTkRfTU9O
VEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZOgotICAgIGNhc2UgVUJMT0NL
X0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1VOSUZJRURfSURFT0dSQVBIUzoKLSAgICBjYXNlIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9J
REVPR1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0ZPUk1TOgotICAg
IGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0I6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19TVVBQTEVNRU5UOgotICAgIGNh
c2UgVUJMT0NLX0NKS19TVFJPS0VTOgotICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9H
UkFQSFNfRVhURU5TSU9OX0M6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBI
U19FWFRFTlNJT05fRDoKLSAgICBjYXNlIFVCTE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9D
SEFSQUNURVJTOgotICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9CX0lERU9HUkFNUzoKLSAgICBjYXNl
IFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVNRU5UOgotICAgIGNhc2UgVUJMT0NL
X0hJUkFHQU5BOgotICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5BOgotICAgIGNhc2UgVUJMT0NLX0JP
UE9NT0ZPOgotICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VYVEVOREVEOgotICAgIGNhc2UgVUJM
T0NLX0hBTkdVTF9KQU1POgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9DT01QQVRJQklMSVRZX0pB
TU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxFUzoKLSAgICBjYXNlIFVCTE9DS19I
QU5HVUxfSkFNT19FWFRFTkRFRF9BOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VYVEVO
REVEX0I6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJs
aW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OlNraXBEZXNjZW5kZXJzOwot
ICAgIH0KLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIw
MDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIw
MDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYsIDIwMDcsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZu
ZGVmIEZvbnRfaAotI2RlZmluZSBGb250X2gKLQotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgotI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKLSNpbmNs
dWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJUZXh0
RGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotCi0vLyAiWDExL1guaCIgZGVmaW5lcyBDb21wbGV4
IHRvIDAgYW5kIGNvbmZsaWN0cwotLy8gd2l0aCBDb21wbGV4IHZhbHVlIGluIENvZGVQYXRoIGVu
dW0uCi0jaWZkZWYgQ29tcGxleAotI3VuZGVmIENvbXBsZXgKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBG
b250RGF0YTsKLWNsYXNzIEZvbnRNZXRyaWNzOwotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNs
YXNzIEZvbnRTZWxlY3RvcjsKLWNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotY2xhc3MgTGF5b3V0UmVjdDsKLWNsYXNzIFJlbmRlclRleHQ7Ci1jbGFzcyBUZXh0TGF5
b3V0OwotY2xhc3MgVGV4dFJ1bjsKLQotc3RydWN0IEdseXBoRGF0YTsKLQotc3RydWN0IEdseXBo
T3ZlcmZsb3cgewotICAgIEdseXBoT3ZlcmZsb3coKQotICAgICAgICA6IGxlZnQoMCkKLSAgICAg
ICAgLCByaWdodCgwKQotICAgICAgICAsIHRvcCgwKQotICAgICAgICAsIGJvdHRvbSgwKQotICAg
ICAgICAsIGNvbXB1dGVCb3VuZHMoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGlubGluZSBi
b29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFsZWZ0ICYmICFyaWdodCAmJiAh
dG9wICYmICFib3R0b207Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgZXh0ZW5kVG8oY29uc3Qg
R2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVm
dCwgb3RoZXIubGVmdCk7Ci0gICAgICAgIHJpZ2h0ID0gc3RkOjptYXgocmlnaHQsIG90aGVyLnJp
Z2h0KTsKLSAgICAgICAgdG9wID0gc3RkOjptYXgodG9wLCBvdGhlci50b3ApOwotICAgICAgICBi
b3R0b20gPSBzdGQ6Om1heChib3R0b20sIG90aGVyLmJvdHRvbSk7Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGxlZnQgIT0gb3RoZXIubGVmdCB8fCByaWdodCAhPSBvdGhlci5yaWdodCB8fCB0b3Ag
IT0gb3RoZXIudG9wIHx8IGJvdHRvbSAhPSBvdGhlci5ib3R0b207Ci0gICAgfQotCi0gICAgaW50
IGxlZnQ7Ci0gICAgaW50IHJpZ2h0OwotICAgIGludCB0b3A7Ci0gICAgaW50IGJvdHRvbTsKLSAg
ICBib29sIGNvbXB1dGVCb3VuZHM7Ci19OwotCi1jbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3Ig
ewotcHVibGljOgotICAgIGVudW0gY2xhc3MgR2x5cGhVbmRlcmxpbmVUeXBlIHtTa2lwRGVzY2Vu
ZGVycywgU2tpcEdseXBoLCBEcmF3T3ZlckdseXBofTsKLSAgICB2aXJ0dWFsIGJvb2wgY29udGFp
bnNNb3JlUGF0aHMoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXRoIHBhdGgoKSA9IDA7Ci0gICAgdmly
dHVhbCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBleHRlbnRzKCkgPSAwOwotICAgIHZpcnR1YWwg
R2x5cGhVbmRlcmxpbmVUeXBlIHVuZGVybGluZVR5cGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGFkdmFuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB+R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCkgeyB9
Ci19OwotR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVu
ZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGluZGV4
KTsKLQotY2xhc3MgRm9udCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwotICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
aXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZl
IGZvbnQuCi0gICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwotCi0g
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7Ci0jZW5kaWYKLSAgICB+Rm9udCgpOwot
Ci0gICAgRm9udChjb25zdCBGb250Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0
b3I9KGNvbnN0IEZvbnQmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnQm
IG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQotCi0gICAgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbjsgfQotCi0gICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnRE
ZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7IH0KLSAgICBmbG9hdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KLQotICAgIHZv
aWQgdXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPikgY29uc3Q7Ci0KLSAgICBlbnVtIEN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFs
bGJhY2tJZkZvbnROb3RSZWFkeSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQ
YWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBk
cmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dp
dGhSZWN0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGZs
b2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIGZsb2F0
IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdDsKLQotICAgIFBhc3NPd25QdHI8VGV4dExheW91dD4gY3JlYXRlTGF5b3V0KFJl
bmRlclRleHQqLCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7Ci0g
ICAgc3RhdGljIHZvaWQgZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKTsKLSAgICBzdGF0aWMgZmxv
YXQgd2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICBpbnQg
b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RG
b3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJv
bSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKLQotICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQotCi0gICAgZmxvYXQg
d29yZFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3dvcmRTcGFjaW5nOyB9Ci0gICAgZmxvYXQg
bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQotICAgIHZv
aWQgc2V0V29yZFNwYWNpbmcoZmxvYXQgcykgeyBtX3dvcmRTcGFjaW5nID0gczsgfQotICAgIHZv
aWQgc2V0TGV0dGVyU3BhY2luZyhmbG9hdCBzKSB7IG1fbGV0dGVyU3BhY2luZyA9IHM7IH0KLSAg
ICBib29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwotICAgIGJvb2wgaXNQcmludGVyRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnVzZVByaW50ZXJGb250KCk7IH0KLSAgICAK
LSAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpOyB9Ci0KLSAgICBUeXBlc2V0dGluZ0ZlYXR1
cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBl
c2V0dGluZ0ZlYXR1cmVzPihtX3R5cGVzZXR0aW5nRmVhdHVyZXMpOyB9Ci0KLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRp
b24uZmlyc3RGYW1pbHkoKTsgfQotICAgIHVuc2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgfQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3Jp
cHRpb24uZmFtaWx5QXQoaSk7IH0KLQotICAgIEZvbnRJdGFsaWMgaXRhbGljKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uaXRhbGljKCk7IH0KLSAgICBGb250V2VpZ2h0IHdlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndlaWdodCgpOyB9Ci0gICAgRm9u
dFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlw
dGlvbi53aWR0aFZhcmlhbnQoKTsgfQotCi0gICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9Ci0KLSAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEo
KS5mb250TWV0cmljcygpOyB9Ci0gICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHByaW1hcnlGb250RGF0YSgpLnNwYWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQotICAg
IGZsb2F0IHRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgdW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0OwotICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udERh
dGEoKSwgdGFiU2l6ZSwgcG9zaXRpb24pOyB9Ci0gICAgYm9vbCBoYXNWYWxpZEF2ZXJhZ2VDaGFy
V2lkdGgoKSBjb25zdDsKLSAgICBib29sIGZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUo
ZmxvYXQgJndpZHRoKSBjb25zdDsgLy8gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MKLQotICAgIGlu
dCBlbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0gICAgaW50
IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0gICAgaW50
IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLQotICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKLSAgICBjb25zdCBG
b250UmFuZ2VzJiBmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkKSBjb25zdDsKLSAgICBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250RGF0YVZh
cmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7Ci0gICAgCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQpIGNvbnN0
OwotI2VuZGlmCi0KLSAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIpOwotCi0gICAgLy8g
QkVXQVJFOiBJZiBpc0FmdGVyRXhwYW5zaW9uIGlzIHRydWUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBj
YWxsLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZSBpbmNsdWRlcyBhIHRyYWlsaW5nIG9wcG9ydHVu
aXR5Ci0gICAgLy8gd2hpY2ggbWF5IG9yIG1heSBub3QgYWN0dWFsbHkgYmUgcHJlc2VudC4gUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudCgp
IGNvbXBlbnNhdGVzCi0gICAgLy8gZm9yIHRoaXMgYnkgZGVjcmVtZW50aW5nIHRoZSByZXR1cm5l
ZCB2YWx1ZSBpZiBpc0FmdGVyRXhwYW5zaW9uIGlzIHRydWUgYXQgdGhlIGVuZCBvZiBhIGxpbmUu
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3Ry
aW5nVmlldyYsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOwotCi0g
ICAgZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEdseXBo
T3ZlcmZsb3cgfTsKLSAgICBDb2RlUGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7
Ci0gICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIq
LCB1bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9Ci0gICAgc3RhdGljIENvZGVQYXRoIGNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwotCi0gICAgYm9v
bCBwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBl
bnVtIEZvclRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVtcGhhc2lzLCBGb3JUZXh0RW1w
aGFzaXMgfTsKLQotICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2Uu
Ci0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRS
dW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90
ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICBmbG9hdCBkcmF3U2ltcGxlVGV4dChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICB2
b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgR2x5cGhCdWZmZXImLCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFz
aXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZm
ZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAg
ZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0g
MCkgY29uc3Q7Ci0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owot
Ci0gICAgYm9vbCBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiwg
R2x5cGhEYXRhJikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgYm9vbCBjYW5SZXR1cm5GYWxsYmFja0Zv
bnRzRm9yQ29tcGxleFRleHQoKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1z
dHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRl
eHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICBmbG9hdCBk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
VGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBmcmllbmQgc3Ry
dWN0IFdpZHRoSXRlcmF0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OwotCi1wdWJsaWM6Ci0jaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAg
Ym9vbCBlcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmVxdWFsRm9yVGV4dEF1dG9TaXpp
bmcob3RoZXIubV9mb250RGVzY3JpcHRpb24pCi0gICAgICAgICAgICAmJiBtX2xldHRlclNwYWNp
bmcgPT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nCi0gICAgICAgICAgICAmJiBtX3dvcmRTcGFjaW5n
ID09IG90aGVyLm1fd29yZFNwYWNpbmc7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBVc2VmdWwg
Zm9yIGRlYnVnZ2luZyB0aGUgZGlmZmVyZW50IGZvbnQgcmVuZGVyaW5nIGNvZGUgcGF0aHMuCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0Q29kZVBhdGgoQ29kZVBhdGgpOwotICAg
IHN0YXRpYyBDb2RlUGF0aCBjb2RlUGF0aCgpOwotICAgIHN0YXRpYyBDb2RlUGF0aCBzX2NvZGVQ
YXRoOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RGVmYXVsdFR5cGVzZXR0
aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyk7Ci0gICAgc3RhdGljIFR5cGVzZXR0aW5n
RmVhdHVyZXMgZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKLQotICAgIHN0YXRpYyBjb25z
dCB1aW50OF90IHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XTsKLSAgICBzdGF0aWMg
Ym9vbCBpc1JvdW5kaW5nSGFja0NoYXJhY3RlcihVQ2hhcjMyIGMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gIShjICYgfjB4RkYpICYmIHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbY107Ci0g
ICAgfQotCi0gICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKLSAgICBzdGF0
aWMgYm9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAn
XHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09IG5vQnJlYWtTcGFjZTsgfQotICAgIHN0YXRpYyBib29s
IHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVyb1dpZHRo
U3BhY2VJbkNvbXBsZXhTY3JpcHQoYykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIwMGQ7IH0K
LSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoVUNo
YXIgYykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9
PSBzb2Z0SHlwaGVuIHx8IGMgPT0gemVyb1dpZHRoU3BhY2UgfHwgKGMgPj0gMHgyMDBlICYmIGMg
PD0gMHgyMDBmKSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0gemVyb1dp
ZHRoTm9CcmVha1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7IH0KLSAg
ICBzdGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7Ci0KLSAgICBz
dGF0aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCi0gICAg
ewotICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3BhY2U7Ci0KLSAgICAgICAgaWYgKHRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHplcm9XaWR0aFNwYWNlOwotCi0gICAgICAgIHJldHVybiBj
aGFyYWN0ZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29u
c3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXpl
U3BhY2VzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIGJvb2wgdXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdCB7IHJldHVybiBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sOyB9Ci0gICAgRm9udEdseXBocyogZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMu
Z2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29u
c3Q7Ci0KLSAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdN
b2RlID0gbV9mb250RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAgVHlw
ZXNldHRpbmdGZWF0dXJlcyBmZWF0dXJlcyA9IHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7
Ci0KLSAgICAgICAgc3dpdGNoICh0ZXh0UmVuZGVyaW5nTW9kZSkgewotICAgICAgICBjYXNlIEF1
dG9UZXh0UmVuZGVyaW5nOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3B0aW1p
emVTcGVlZDoKLSAgICAgICAgICAgIGZlYXR1cmVzICY9IH4oS2VybmluZyB8IExpZ2F0dXJlcyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZW9tZXRyaWNQcmVjaXNpb246Ci0g
ICAgICAgIGNhc2UgT3B0aW1pemVMZWdpYmlsaXR5OgotICAgICAgICAgICAgZmVhdHVyZXMgfD0g
S2VybmluZyB8IExpZ2F0dXJlczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCkpIHsKLSAgICAgICAgY2Fz
ZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgotICAgICAgICAgICAgZmVhdHVyZXMgJj0g
fktlcm5pbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbEtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2Vybmlu
ZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtX2Zv
bnREZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgRm9u
dERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgZmVhdHVy
ZXMgJj0gfkxpZ2F0dXJlczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgZmVhdHVyZXMg
fD0gTGlnYXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIH0KLQotICAgIHN0YXRpYyBUeXBl
c2V0dGluZ0ZlYXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7Ci0KLSAgICBGb250
RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247Ci0gICAgbXV0YWJsZSBSZWZQdHI8Rm9udEds
eXBocz4gbV9nbHlwaHM7Ci0gICAgZmxvYXQgbV9sZXR0ZXJTcGFjaW5nOwotICAgIGZsb2F0IG1f
d29yZFNwYWNpbmc7Ci0gICAgbXV0YWJsZSBib29sIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7
Ci0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlw
ZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBjb21wdXRlZCBmcm9tIG1fZm9udERlc2Ny
aXB0aW9uLgotfTsKLQotdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7Ci12b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgY2xlYXJX
aWR0aENhY2hlcygpOwotCi1pbmxpbmUgRm9udDo6fkZvbnQoKQotewotfQotCi1pbmxpbmUgY29u
c3QgU2ltcGxlRm9udERhdGEmIEZvbnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250
RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBjb25zdCBGb250UmFuZ2VzJiBG
b250OjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAotewotICAgIEFTU0VS
VChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNB
dChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwotfQotCi1pbmxpbmUgYm9vbCBGb250Ojppc0Zp
eGVkUGl0Y2goKSBjb25zdAotewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1f
Z2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwotfQotCi1pbmxpbmUgRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2ds
eXBocyA/IG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSA6IDA7Ci19Ci0KLWlubGluZSBmbG9hdCBG
b250Ojp0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAotewotICAgIGlmICghdGFiU2l6ZSkKLSAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUg
KiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7Ci0gICAgZmxvYXQgdGFi
RGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsKLSAgICBy
ZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldp
ZHRoIDogdGFiRGVsdGFXaWR0aDsKLX0KLQotfQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpU
ZXh0TGF5b3V0Kik7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENh
c2NhZGU7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3MgRm9udFNlbGVjdG9yOwogY2xh
c3MgT3BlblR5cGVWZXJ0aWNhbERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOjE3ODQxOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0
LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOworCituYW1lc3BhY2UgV1RGIHsKKworLy8gYWxsb3cgY29tcGlsYXRpb24gb2Yg
T3duUHRyPFRleHRMYXlvdXQ+IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNz
IHRvIHRoZSBUZXh0TGF5b3V0IGNsYXNzIGRlZmluaXRpb24KK3RlbXBsYXRlIDw+IHZvaWQgZGVs
ZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRy
KQoreworICAgIFdlYkNvcmU6OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworfQorCit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRk
Q2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4pOworCitjb25zdCB1aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVy
VGFibGVbMjU2XSA9IHsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywg
MSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsCisgICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDEgLyo/Ki8sCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMSAvKm5vLWJy
ZWFrIHNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgYm9vbCBpc0RyYXduV2l0aFNWR0Zv
bnQoY29uc3QgVGV4dFJ1biYgcnVuKQoreworICAgIHJldHVybiBydW4ucmVuZGVyaW5nQ29udGV4
dCgpOworfQorCitzdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+KiBz
ZXQ7CisgICAgaWYgKCFzZXQpIHsKKyAgICAgICAgc2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWljU3Ry
aW5nPjsKKyAgICAgICAgc2V0LT5hZGQoIk1TIFBHb3RoaWMiKTsKKyAgICAgICAgVUNoYXIgdW5p
Y29kZU5hbWVNU1BHb3RoaWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZGMzAsIDB4
MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0
cmluZyh1bmljb2RlTmFtZU1TUEdvdGhpYywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1T
UEdvdGhpYykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTVMgUE1pbmNobyIpOworICAgICAgICBV
Q2hhciB1bmljb2RlTmFtZU1TUE1pbmNob1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4
RkYzMCwgMHg2NjBFLCAweDY3MUR9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5p
Y29kZU5hbWVNU1BNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU1BNaW5jaG8p
KSk7CisKKyAgICAgICAgc2V0LT5hZGQoIk1TIEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmlj
b2RlTmFtZU1TR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHgzMEI0LCAweDMw
QjcsIDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNv
ZGVOYW1lTVNHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU0dvdGhpYykpKTsK
KworICAgICAgICBzZXQtPmFkZCgiTVMgTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDY2MEUsIDB4NjcxRH07
CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TTWluY2hvLCBXVEZf
QVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNNaW5jaG8pKSk7CisKKyAgICAgICAgc2V0LT5hZGQo
Ik1laXJ5byIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1laXJ5b1tdID0gezB4MzBFMSwg
MHgzMEE0LCAweDMwRUEsIDB4MzBBQX07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1
bmljb2RlTmFtZU1laXJ5bywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1laXJ5bykpKTsK
KyAgICB9CisgICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworRm9udDo6Q29k
ZVBhdGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87CisKK1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9u
dDo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7CisKKy8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisvLyBGb250IEltcGxlbWVudGF0aW9uIChDcm9zcy1QbGF0
Zm9ybSBQb3J0aW9uKQorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor
Rm9udDo6Rm9udCgpCisgICAgOiBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNp
bmcoMCkKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCisgICAgLCBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMoMCkKK3sKK30KKworRm9udDo6Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKKyAgICA6
IG1fZm9udERlc2NyaXB0aW9uKGZkKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNp
bmcpCisgICAgLCBtX3dvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKQorICAgICwgbV91c2VCYWNrc2xh
c2hBc1llblN5bWJvbCh1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmQuZmlyc3RGYW1p
bHkoKSkpCisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVh
dHVyZXMoKSkKK3sKK30KKworLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0
b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmdNb2RlKQorICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZv
cm1Gb250KGZvbnREYXRhKSkKKyAgICAsIG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3Jk
U3BhY2luZygwKQorICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwor
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUp
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAg
bV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnRE
YXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9u
LnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKKyNl
bmRpZgorfQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFURk9STShJT1MpCitGb250OjpGb250KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNl
bGVjdG9yKQorICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250
KGZvbnREYXRhKSkKKyAgICAsIG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2lu
ZygwKQorICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1
cmVzKCkpCit7CisgICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOwor
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmlt
YXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRH
ZXRTaXplKHByaW1hcnlGb250KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7
CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9u
dFdlaWdodE5vcm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQo
Zm9udERhdGEuaXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRD
YWNoZWRGb250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwor
fQorI2VuZGlmCisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCisgICAgOiBtX2ZvbnRE
ZXNjcmlwdGlvbihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fZ2x5cGhzKG90aGVy
Lm1fZ2x5cGhzKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykK
KyAgICAsIG1fd29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
fQorCitGb250JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCit7CisgICAgbV9m
b250RGVzY3JpcHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtX2dseXBocyA9
IG90aGVyLm1fZ2x5cGhzOworICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3Bh
Y2luZzsKKyAgICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsK
KyAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9u
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3Ro
ZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fZm9udERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0
dGVyU3BhY2luZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBv
dGhlci5tX3dvcmRTcGFjaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5
cGhzID09IG90aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1f
Z2x5cGhzIHx8ICFvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3Rv
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVh
bGx5IHNvbWVob3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxs
IHN0eWxlIHJlY2FsYy4KKyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAh
PSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMt
PmdlbmVyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdHJ1Y3QgRm9udEdseXBoc0NhY2hlS2V5IHsKKyAgICAvLyBUaGlzIHBhcnQgb2YgdGhl
IGtleSBpcyBzaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZv
bnREYXRhIG9iamVjdHMpLgorICAgIEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9u
dERlc2NyaXB0aW9uQ2FjaGVLZXk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxp
ZXM7CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CisgICAgdW5zaWduZWQgZm9udFNlbGVj
dG9yVmVyc2lvbjsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKK307CisKK3N0cnVj
dCBGb250R2x5cGhzQ2FjaGVFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywg
UmVmPEZvbnRHbHlwaHM+JiYgZykKKyAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQorICAgICAg
ICAsIGdseXBocyhXVEY6Om1vdmUoZykpCisgICAgeyB9CisgICAgRm9udEdseXBoc0NhY2hlS2V5
IGtleTsKKyAgICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworfTsKKwordHlwZWRlZiBIYXNoTWFw
PHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5
SGFzaGVkPiBGb250R2x5cGhzQ2FjaGU7CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udEdseXBoc0NhY2hlS2V5JiBhLCBjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCit7Cisg
ICAgaWYgKGEuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNo
ZUtleSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9
IGIuZm9udFNlbGVjdG9ySWQgfHwgYS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVj
dG9yVmVyc2lvbiB8fCBhLmZvbnRTZWxlY3RvckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5m
YW1pbGllcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYS5mYW1pbGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWVxdWFs
SWdub3JpbmdDYXNlKGEuZmFtaWxpZXNbaV0uaW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgRm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQoreworICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7Cisg
ICAgcmV0dXJuIGNhY2hlOworfQorCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQor
eworICAgIGZvbnRHbHlwaHNDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3ZvaWQgY2xlYXJXaWR0aENh
Y2hlcygpCit7CisgICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwg
ZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
aXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3N0YXRp
YyB1bnNpZ25lZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0
aW9uLnNjcmlwdCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNt
YWxsQ2FwcygpKTsKK30KKworc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250
R2x5cGhzQ2FjaGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCit7CisgICAga2V5LmZvbnREZXNjcmlwdGlvbkNh
Y2hlS2V5ID0gRm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsr
aSkKKyAgICAgICAga2V5LmZhbWlsaWVzLmFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7
CisgICAga2V5LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51
bmlxdWVJZCgpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3Rv
ciA/IGZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yRmxh
Z3MgPSBmb250U2VsZWN0b3IgJiYgZm9udFNlbGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNj
cmlwdGlvbikgPyBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKK30KKwor
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlw
aHNDYWNoZUtleSYga2V5KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOwor
ICAgIGhhc2hDb2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6
ZSgpKTsKKworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlv
bkNhY2hlS2V5LmNvbXB1dGVIYXNoKCkpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQo
a2V5LmZvbnRTZWxlY3RvcklkKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5m
b250U2VsZWN0b3JWZXJzaW9uKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5m
b250U2VsZWN0b3JGbGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1p
bGllcy5zaXplKCk7ICsraSkKKyAgICAgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
ZmFtaWxpZXNbaV0uaW1wbCgpID8gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tp
XSkgOiAwKTsKKworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVz
LmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworfQorCit2b2lk
IHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQoreworICAgIFZl
Y3Rvcjx1bnNpZ25lZCwgNTA+IHRvUmVtb3ZlOworICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0
b3IgZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5kKCk7CisgICAgZm9yIChGb250R2x5cGhzQ2Fj
aGU6Oml0ZXJhdG9yIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkK
KyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBmb250R2x5
cGhzQ2FjaGUoKS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitzdGF0aWMgUmVmPEZvbnRHbHlw
aHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQor
eworICAgIEZvbnRHbHlwaHNDYWNoZUtleSBrZXk7CisgICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtl
eShrZXksIGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgIHVuc2ln
bmVkIGhhc2ggPSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOworICAgIEZvbnRHbHlw
aHNDYWNoZTo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNo
LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOworICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkgJiYgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtl
eSkKKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQo
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5
ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8Rm9udEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpj
cmVhdGUoZm9udFNlbGVjdG9yKSk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0Vu
dHJ5LT5nbHlwaHMuZ2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVu
Y2VkUHJ1bmVJbnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJp
ZXMgPSA0MDA7CisgICAgc3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAvLyBSZWZl
cmVuY2VkIEZvbnRHbHlwaHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZl
cyBsaXR0bGUgbWVtb3J5LgorICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2Vk
UHJ1bmVJbnRlcnZhbCkpCisgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250
R2x5cGhzQ2FjaGUoKTsKKyAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCisgICAg
aWYgKGZvbnRHbHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQorICAgICAgICBm
b250R2x5cGhzQ2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAg
cmV0dXJuIGdseXBoczsKK30KKwordm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2Vs
ZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKK3sKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkp
OworICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25G
b3JGYW1pbHkoZmlyc3RGYW1pbHkoKSk7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29t
cHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKK30KKworZmxvYXQgRm9udDo6ZHJhd1RleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAoreworICAgIC8vIERvbid0IGRyYXcgYW55dGhp
bmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2Vz
cyBvZiBsb2FkaW5nLAorICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBz
ZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCisgICAgLy8g
Zm9udCkuCisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisg
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGRyYXdTaW1w
bGVUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBkcmF3
Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworfQorCit2b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21G
b250cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9
IHJ1bi5sZW5ndGgoKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChy
dW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxl
cyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlw
ZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykg
IT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNv
ZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxl
eCkKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwg
bWFyaywgcG9pbnQsIGZyb20sIHRvKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwor
fQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVy
ZmxvdykgY29uc3QKK3sKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVu
KTsKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CisgICAgICAgIC8vIFRoZSBj
b21wbGV4IHBhdGggaXMgbW9yZSByZXN0cmljdGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sg
Zm9udHMgdGhhbiB0aGUgc2ltcGxlIHBhdGgsIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0
byBtYWtlIHRoZWlyIGJlaGF2aW9ycyBtYXRjaC4KKyAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxs
YmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAw
OworICAgICAgICAvLyBUaGUgc2ltcGxlIHBhdGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJl
IGdseXBoIG92ZXJmbG93IGlzIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5
cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcykpCisgICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0g
MDsKKyAgICB9CisKKyAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5n
RmVhdHVyZXMoKSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFj
aW5nT3JMZXR0ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7Cisg
ICAgZmxvYXQqIGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1
cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAg
aWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1
cm4gKmNhY2hlRW50cnk7CisKKyAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9j
YWxGYWxsYmFja0ZvbnRzOworICAgIGlmICghZmFsbGJhY2tGb250cykKKyAgICAgICAgZmFsbGJh
Y2tGb250cyA9ICZsb2NhbEZhbGxiYWNrRm9udHM7CisKKyAgICBmbG9hdCByZXN1bHQ7CisgICAg
aWYgKGNvZGVQYXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAg
ZWxzZQorICAgICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxi
YWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworCisgICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJh
Y2tGb250cy0+aXNFbXB0eSgpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4s
IGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Cit7CisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAg
IHJldHVybiBydW4ucmVuZGVyaW5nQ29udGV4dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0
aGlzLCBydW4sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisjZW5kaWYKKworICAgIGNoYXJz
Q29uc3VtZWQgPSBydW4ubGVuZ3RoKCk7CisgICAgZ2x5cGhOYW1lID0gIiI7CisgICAgcmV0dXJu
IHdpZHRoKHJ1bik7Cit9CisKK0dseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7
CisgICAgaWYgKHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAgICAgICAgaWYgKG1fZm9udERl
c2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkg
eworICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgICAg
ICBpZiAodXBwZXJDICE9IGMpIHsKKyAgICAgICAgICAgICAgICBjID0gdXBwZXJDOworICAgICAg
ICAgICAgICAgIHZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50OworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgfQorCisgICAgaWYg
KG1pcnJvcikKKyAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKKworICAgIHJldHVybiBtX2ds
eXBocy0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50
KTsKK30KKworI2lmICFQTEFURk9STShDT0NPQSkKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9u
dDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCop
Cit7Cit9CisKK2Zsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyBjb25zdCBj
aGFyKiBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNh
biBUeXBld3JpdGVyIiwKKyAgICAiQXJpYWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisg
ICAgIkNvY2hpbiIsCisgICAgIkNvcnNpdmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAg
IkV1cGhlbWlhIFVDQVMiLAorICAgICJHZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJI
ZWkiLAorICAgICJIZWx2ZXRpY2EiLAorICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0
aGkiLAorICAgICJLYWkiLAorICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQi
LAorICAgICJNb25hY28iLAorICAgICJNc2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwK
KyAgICAiT3Nha2EiLAorICAgICJSYWFuYW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJv
bCIsCisgICAgIlRpbWVzIiwKKyAgICAiQXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290
aGljIiwKKyAgICAiQXBwbGUgTGlTdW5nIiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFw
cGxlR290aGljIiwKKyAgICAiQXBwbGVNeXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIj
SGVhZExpbmVBIiwKKyAgICAiI1BDTXl1bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBG
b3IgZm9udCBmYW1pbGllcyB3aGVyZSBhbnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxp
ZCBlbnRyeSBpbiB0aGUgT1MvMiB0YWJsZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sg
dG8gdGhlIGxlZ2FjeSB3ZWJraXQgYmVoYXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRo
CisvLyBmcm9tIHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRv
IGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBmb250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNp
bWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisv
LyBhbGwgcGxhdGZvcm1zLgorYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
b25zdAoreworICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOworICAgIGlm
IChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKElPUykKKyAgICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFu
ZCBpT1MgYWxzbyBoYXZlIGFuIGludmFsaWQgZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFy
V2lkdGguCisgICAgaWYgKHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4q
IGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gMDsKKworICAgIGlmICghZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVz
V2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aCk7ICsraSkKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dp
dGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5hZGQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJ
bnZhbGlkQ2hhcldpZHRoW2ldKSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNX
aXRoSW52YWxpZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworYm9vbCBGb250
OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK3sK
KyAgICBib29sIHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKKyAgICBpZiAo
c3VjY2VzcykKKyAgICAgICAgd2lkdGggPSByb3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hh
cldpZHRoKCkpOyAvLyBGSVhNRTogcHJpbWFyeUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3Bv
bmQgdG8gZmlyc3RGYW1pbHkoKS4KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBGb250
OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgdG8gPSAo
dG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRv
VXNlID0gY29kZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0
aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVz
LiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAh
PSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChy
dW4pKQorICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0
aFRvVXNlICE9IENvbXBsZXgpCisgICAgICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
U2ltcGxlVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9t
LCB0byk7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBy
dW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVu
cyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAw
MDUwCisgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVh
dHVyZXMoKSB8fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkpCisgICAgICAgIHJldHVybiBvZmZz
ZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7
CisKKyAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CitzdGF0aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgU3RyaW5n
QnVpbGRlciBub3JtYWxpemVkOworICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
IG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7
CisKKyAgICByZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOworfQorCitTdHJpbmcgRm9udDo6
bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0
aCk7Cit9CisKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50
ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9u
dFNtb290aGluZyA9IHRydWU7CisKK3ZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJv
b2wgc2hvdWxkVXNlU21vb3RoaW5nKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKK30KKworYm9v
bCBGb250OjpzaG91bGRVc2VTbW9vdGhpbmcoKQoreworICAgIHJldHVybiBzaG91bGRVc2VGb250
U21vb3RoaW5nOworfQorCit2b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit7Cisg
ICAgc19jb2RlUGF0aCA9IHA7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkK
K3sKKyAgICByZXR1cm4gc19jb2RlUGF0aDsKK30KKwordm9pZCBGb250OjpzZXREZWZhdWx0VHlw
ZXNldHRpbmdGZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMp
Cit7CisgICAgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVy
ZXM7Cit9CisKK1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVh
dHVyZXMoKQoreworICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworfQor
CitGb250OjpDb2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0
Cit7CisgICAgaWYgKHNfY29kZVBhdGggIT0gQXV0bykKKyAgICAgICAgcmV0dXJuIHNfY29kZVBh
dGg7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKyNlbmRpZgorCisgICAgaWYgKG1fZm9udERl
c2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVT
ZXR0aW5ncygpLT5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICAKKyAg
ICBpZiAocnVuLmxlbmd0aCgpID4gMSAmJiAhV2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0
dGluZ0ZlYXR1cmVzKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICBpZiAo
IXJ1bi5jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsK
KworICAgIGlmIChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisKKyAgICAv
LyBTdGFydCBmcm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3Vy
ZSB0aGUgY2hhcmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgorICAgIHJldHVybiBjaGFyYWN0ZXJS
YW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKworRm9u
dDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5p
Y29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90ZSB0aGF0IHdlIAorICAgIC8v
IGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNl
IHNvbWUgY2hhcmFjdGVycworICAgIC8vIGFyZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBu
ZWVkIHRvIGdvIHRvIHRoZSBjb21wbGV4IHBhdGguCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2Ug
bWF5IGFzIHdlbGwgY29uc2lkZXIgYmluYXJ5IHNlYXJjaCBvdmVyIGEgc29ydGVkCisgICAgLy8g
bGlzdCBvZiByYW5nZXMuCisgICAgQ29kZVBhdGggcmVzdWx0ID0gU2ltcGxlOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBVQ2hhciBjID0g
Y2hhcmFjdGVyc1tpXTsKKyAgICAgICAgaWYgKGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2gg
VSswMkU5IChNb2RpZmllciBMZXR0ZXJzIDogVG9uZSBsZXR0ZXJzKSAgCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgyRTkpIAorICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZG
IENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MzZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAg
ICAgaWYgKGMgPCAweDA1OTEgfHwgYyA9PSAweDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVD
RiBleGNsdWRpbmcgVSswNUJFIEhlYnJldyBjb21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVh
dGlvbiBQYXNlcSwgU29mIFBhc3VxIGFuZCBOdW4gSGFmdWtoYQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChjIDw9IDB4MDVDRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4
OworCisgICAgICAgIC8vIFUrMDYwMCB0aHJvdWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhh
YW5hLCBOS28sIFNhbWFyaXRhbiwgTWFuZGFpYywKKyAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVu
Z2FsaSwgR3VybXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwg
CisgICAgICAgIC8vIE1hbGF5YWxhbSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFu
bWFyCisgICAgICAgIGlmIChjIDwgMHgwNjAwKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoYyA8PSAweDEwOUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICAvLyBVKzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBL
b3JlYW4gc2hvdWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJlY29tcG9zZTsKKyAgICAgICAgLy8g
TW9kZXJuIEtvcmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkK
KyAgICAgICAgaWYgKGMgPCAweDExMDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aWYgKGMgPD0gMHgxMUZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAg
aWYgKGMgPCAweDEzNUQpIC8vIFUrMTM1RCB0aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5p
bmcgbWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEzNUYp
CisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTcwMCkg
Ly8gVSsxNzgwIHRocm91Z2ggVSsxOEFGIFRhZ2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53
YSxLaG1lciwgTW9uZ29saWFuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMg
PD0gMHgxOEFGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMg
PCAweDE5MDApIC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOTRGKQorICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0
aHJvdWdoIFUrMTlERiBOZXcgVGFpIEx1ZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChjIDw9IDB4MTlERikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAg
IGlmIChjIDwgMHgxQTAwKSAvLyBVKzFBMDAgdGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBU
aGFtLCBCYWxpbmVzZSwgQmF0YWssIExlcGNoYSwgVmVkaWMKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoYyA8PSAweDFDRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
KworICAgICAgICBpZiAoYyA8IDB4MURDMCkgLy8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWlu
aW5nIGRpYWNyaXRpY2FsIG1hcmsgc3VwcGxlbWVudAorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChjIDw9IDB4MURGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisg
ICAgICAgIC8vIFUrMUUwMCB0aHJvdWdoIFUrMjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGlj
cyBhbmQgc3RhY2tlZCBkaWFjcml0aWNzCisgICAgICAgIGlmIChjIDw9IDB4MjAwMCkgeworICAg
ICAgICAgICAgcmVzdWx0ID0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3c7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAg
dGhyb3VnaCBVKzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQorICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNG
MSBDb21iaW5pbmcgbWFya3MgZm9yIENvcHRpYworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MkNGMSkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIGlmIChjIDwgMHgzMDJBKSAvLyBVKzMwMkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMg
YW5kIEhhbmd1bCBUb25lIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KGMgPD0gMHgzMDJGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYg
KGMgPCAweEE2N0MpIC8vIFUrQTY3QyB0aHJvdWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9y
IG9sZCBDeXJpbGxpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4
QTY3RCkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhB
NkYwKSAvLyBVK0E2RjAgdGhyb3VnaCBVK0E2RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNkYxKQorICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFn
cmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgIC8v
IEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZp
ZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgaWYgKGMgPCAweEE4MDApIAorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QUJGRikKKyAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3
RkYgSGFuZ3VsIEphbW8gRXh0LiBCCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KGMgPD0gMHhEN0ZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYg
KGMgPD0gMHhEQkZGKSB7CisgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZQorCisgICAgICAg
ICAgICBpZiAoaSA9PSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBVQ2hhciBuZXh0ID0gY2hhcmFjdGVyc1srK2ldOworICAgICAgICAgICAgaWYgKCFV
MTZfSVNfVFJBSUwobmV4dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFVDaGFyMzIgc3VwcGxlbWVudGFyeUNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFS
WShjLCBuZXh0KTsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAw
eDFGMUU2KSAvLyBVKzFGMUU2IHRocm91Z2ggVSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3lt
Ym9scworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1l
bnRhcnlDaGFyYWN0ZXIgPD0gMHgxRjFGRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAv
LyBVK0UwMTAwIHRocm91Z2ggVStFMDFFRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNo
YXJhY3RlciA8PSAweEUwMUVGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisg
ICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEth
aXRoaSAoVSsxMTA4MCBibG9jaykgYW5kIG90aGVyIGNvbXBsZXggc2NyaXB0cworICAgICAgICAg
ICAgLy8gaW4gcGxhbmUgMSBvciBoaWdoZXIuCisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGMgPCAweEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUw
RiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoYyA8PSAweEZFMEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICBpZiAoYyA8IDB4RkUyMCkgLy8gVStGRTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBo
YWxmIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTJG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQoreworICAgIC8vIFRo
ZSBiYXNpYyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgorICAgIGlmIChjID49IDB4NEUw
MCAmJiBjIDw9IDB4OUZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pL
IFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQS4KKyAgICBpZiAoYyA+PSAweDM0MDAgJiYg
YyA8PSAweDREQkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBSYWRp
Y2FscyBTdXBwbGVtZW50LgorICAgIGlmIChjID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gS2FuZ3hpIFJhZGljYWxzLgorICAgIGlm
IChjID49IDB4MkYwMCAmJiBjIDw9IDB4MkZERikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgLy8gQ0pLIFN0cm9rZXMuCisgICAgaWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVG
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJ
ZGVvZ3JhcGhzLgorICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNp
b24gQi4KKyAgICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5z
aW9uIEMuCisgICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9u
IEQuCisgICAgaWYgKGMgPj0gMHgyQjc0MCAmJiBjIDw9IDB4MkI4MUYpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxl
bWVudC4KKyAgICBpZiAoYyA+PSAweDJGODAwICYmIGMgPD0gMHgyRkExRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCit7CisgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmlu
IENoaW5lc2UgM3JkIFRvbmUKKyAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNj
ZW50LCBNYW5kYXJpbiBDaGluZXNlIDJuZCBUb25lCisgICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0
dGVyIEdyYXZlIEFjY2VzcywgTWFuZGFyaW4gQ2hpbmVzZSA0dGggVG9uZSAKKyAgICAvLyAweDJE
OSBEb3QgQWJvdmUsIE1hbmRhcmluIENoaW5lc2UgNXRoIFRvbmUgCisgICAgaWYgKChjID09IDB4
MkM3KSB8fCAoYyA9PSAweDJDQSkgfHwgKGMgPT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIw
MjEpIHx8IChjID09IDB4MjAzMCkgfHwgKGMgPT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCisg
ICAgICAgIHx8IChjID09IDB4MjA0MikgfHwgKGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgp
IHx8IChjID09IDB4MjA0OSkgfHwgKGMgPT0gMHgyMDUxKQorICAgICAgICB8fCAoYyA9PSAweDIw
REQpIHx8IChjID09IDB4MjBERSkgfHwgKGMgPT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8
IChjID09IDB4MjEwNSkKKyAgICAgICAgfHwgKGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEp
IHx8IChjID09IDB4MjExMykgfHwgKGMgPT0gMHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCisgICAg
ICAgIHx8IChjID09IDB4MjEyQikgfHwgKGMgPT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8
IChjID09IDB4MjE1MSkgfHwgKGMgPT0gMHgyMTUyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoYyA+PSAweDIxNTYgJiYgYyA8PSAweDIxNUEpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGMgPj0gMHgyMTYwICYmIGMgPD0gMHgyMTZCKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChjID49IDB4MjE3MCAmJiBjIDw9IDB4MjE3QikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChj
ID09IDB4MjMwNykgfHwgKGMgPT0gMHgyMzEyKSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4
MjNCRikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyM0MwICYmIGMg
PD0gMHgyM0NDKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIzQ0Up
IHx8IChjID09IDB4MjQyMykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNDYwICYmIGMgPD0gMHgyNDkyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MjQ5QyAmJiBjIDw9IDB4MjRGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoKGMgPT0gMHgyNUEwKSB8fCAoYyA9PSAweDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMg
PT0gMHgyNUFBKSB8fCAoYyA9PSAweDI1QUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICgoYyA9PSAweDI1QjEpIHx8IChjID09IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAo
YyA9PSAweDI1QjYpIHx8IChjID09IDB4MjVCNykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAw
eDI1QkQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoKGMgPT0gMHgyNUMw
KSB8fCAoYyA9PSAweDI1QzEpIHx8IChjID09IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAo
YyA9PSAweDI1QzkpIHx8IChjID09IDB4MjVDQikgfHwgKGMgPT0gMHgyNUNDKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09IDB4MjVFRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI2MDAgJiYgYyA8PSAweDI2MDMpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8
fCAoYyA9PSAweDI2MEUpIHx8IChjID09IDB4MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9
PSAweDI2NDApIHx8IChjID09IDB4MjY0MikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyNjYwICYmIGMgPD0gMHgyNjZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjY3MiAmJiBjIDw9IDB4MjY3RCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyNkEwKSB8fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZC
RSkgfHwgKGMgPT0gMHgyNzEzKSB8fCAoYyA9PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwg
KGMgPT0gMHgyNzQwKSB8fCAoYyA9PSAweDI3NTYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4Mjc3NiAmJiBjIDw9IDB4Mjc3RikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA9PSAweDJCMUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
SWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycy4KKyAgICBpZiAoYyA+PSAweDJGRjAg
JiYgYyA8PSAweDJGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBT
eW1ib2xzIGFuZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KKyAgICBpZiAoYyA+PSAw
eDMwMDAgJiYgYyA8IDB4MzAzMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+
IDB4MzAzMCAmJiBjIDw9IDB4MzAzRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBI
aXJhZ2FuYQorICAgIGlmIChjID49IDB4MzA0MCAmJiBjIDw9IDB4MzA5RikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBLYXRha2FuYSAKKyAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8
PSAweDMwRkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21vZm8KKyAgICBp
ZiAoYyA+PSAweDMxMDAgJiYgYyA8PSAweDMxMkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKGMgPj0gMHgzMTkwICYmIGMgPD0gMHgzMTlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIEJvcG9tb2ZvIEV4dGVuZGVkCisgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0g
MHgzMUJGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICAvLyBFbmNsb3NlZCBDSksgTGV0
dGVycyBhbmQgTW9udGhzLgorICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCisgICAg
aWYgKGMgPj0gMHgzMzAwICYmIGMgPD0gMHgzM0ZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4Rjg2MCAmJiBjIDw9IDB4Rjg2MikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcy4KKyAgICBpZiAoYyA+PSAweEZFMzAg
JiYgYyA8PSAweEZFNEYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4
RkUxMCkgfHwgKGMgPT0gMHhGRTExKSB8fCAoYyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0g
MHhGRjFCKSB8fCAoYyA9PSAweEZGMUMpIHx8IChjID09IDB4RkYxRSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCisgICAgLy8g
VXN1YWxseSBvbmx5IHVzZWQgaW4gQ0pLCisgICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhG
RkVGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtb2ppLgorICAgIGlmIChjID09
IDB4MUYxMDApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjExMCAm
JiBjIDw9IDB4MUYxMjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgx
RjEzMCAmJiBjIDw9IDB4MUYxNDkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMg
Pj0gMHgxRjE1MCAmJiBjIDw9IDB4MUYxNjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgxRjE3MCAmJiBjIDw9IDB4MUYxODkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKGMgPj0gMHgxRjIwMCAmJiBjIDw9IDB4MUY2QzUpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOworfQorCit1bnNpZ25lZCBGb250
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVy
RXhwYW5zaW9uKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9u
ID09IExUUikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAg
ICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24g
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBsZW5ndGg7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hh
cmFjdGVyc1tpIC0gMV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAg
ICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gY291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgc3Rh
dGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFw
aHNJbkNvbXBsZXhUZXh0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJl
Y3Rpb24gPT0gTFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKKyAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2
X0lTX0xFQUQoY2hhcmFjdGVyKSAmJiBpICsgMSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hh
cmFjdGVyc1tpICsgMV0pKSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9T
VVBQTEVNRU5UQVJZKGNoYXJhY3RlciwgY2hhcmFjdGVyc1tpICsgMV0pOworICAgICAgICAgICAg
ICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVv
Z3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAg
ICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQr
KzsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBh
bnNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgeworICAg
ICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAgICAgICAg
ICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50
Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX1RS
QUlMKGNoYXJhY3RlcikgJiYgaSA+IDEgJiYgVTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0p
KSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNo
YXJhY3RlcnNbaSAtIDJdLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pL
SWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNB
ZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAg
ICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3Vu
dDsKK30KKwordW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBT
dHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNB
ZnRlckV4cGFuc2lvbikKK3sKKyAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnM4KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lv
bik7CisgICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdW
aWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0
ZXJFeHBhbnNpb24pOworfQorCitib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNo
YXIzMiBjKQoreworICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9H
Q19DTl9NQVNLIHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gQWRkaXRpb25hbCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxp
c3RlZCBpbiBDU1MgVGV4dCBMZXZlbCAzIEVkaXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4K
KyAgICBpZiAoYyA9PSBldGhpb3BpY1dvcmRzcGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0
b3JMaW5lIHx8IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckRvdAorICAgICAgICB8fCBjID09IHVn
YXJpdGljV29yZERpdmlkZXIgfHwgYyA9PSB0aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8
fCBjID09IHRpYmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKTsKK30KKyAgICAKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4s
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQoreworICAgIC8vIElu
IGdlbmVyYWwsIHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBk
ZXNjZW5kZXJzIG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmlu
Z3MsCisgICAgLy8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9u
IGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCisgICAgVUNoYXIzMiBiYXNlQ2hhcmFj
dGVyOworICAgIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5T
dHJpbmcoaW5kZXgpOworCisgICAgaWYgKG9mZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpu
b09mZnNldCkgeworICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNw
YXduZWQgdGhpcyBnbHlwaC4gQmFpbC4KKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNs
YXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIH0KKyAgICAKKyAg
ICBpZiAodGV4dFJ1bi5pczhCaXQoKSkKKyAgICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4u
Y2hhcmFjdGVyczgoKVtvZmZzZXRJblN0cmluZ107CisgICAgZWxzZQorICAgICAgICBVMTZfTkVY
VCh0ZXh0UnVuLmNoYXJhY3RlcnMxNigpLCBvZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgo
KSwgYmFzZUNoYXJhY3Rlcik7CisgICAgCisgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdp
dGggVUNIQVJfSURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3Ig
S29yZWFuIGNvZGVwb2ludHMuCisgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNv
ZGUgYWxsb2NhdGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgVUJsb2NrQ29kZSBi
bG9ja0NvZGUgPSB1YmxvY2tfZ2V0Q29kZShiYXNlQ2hhcmFjdGVyKTsKKyAgICBzd2l0Y2ggKGJs
b2NrQ29kZSkgeworICAgIGNhc2UgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgorICAg
IGNhc2UgVUJMT0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKKyAgICBjYXNlIFVCTE9D
S19FTkNMT1NFRF9DSktfTEVUVEVSU19BTkRfTU9OVEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19D
T01QQVRJQklMSVRZOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhU
RU5TSU9OX0E6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUzoKKyAgICBj
YXNlIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NL
X0NKS19DT01QQVRJQklMSVRZX0ZPUk1TOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lE
RU9HUkFQSFNfRVhURU5TSU9OX0I6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlf
SURFT0dSQVBIU19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgorICAg
IGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0M6CisgICAgY2Fz
ZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRDoKKyAgICBjYXNlIFVC
TE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTOgorICAgIGNhc2UgVUJMT0NL
X0xJTkVBUl9CX0lERU9HUkFNUzoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJ
Q19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgorICAgIGNhc2UgVUJMT0NL
X0tBVEFLQU5BOgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPOgorICAgIGNhc2UgVUJMT0NLX0JP
UE9NT0ZPX0VYVEVOREVEOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1POgorICAgIGNhc2Ug
VUJMT0NLX0hBTkdVTF9DT01QQVRJQklMSVRZX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VM
X1NZTExBQkxFUzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgorICAg
IGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0I6CisgICAgICAgIHJldHVybiBHbHlw
aFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVu
ZGVybGluZVR5cGU6OlNraXBEZXNjZW5kZXJzOworICAgIH0KK30KKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC00Myw3ICs0
Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRl
eHRMYXlvdXQ+IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBU
ZXh0TGF5b3V0IGNsYXNzIGRlZmluaXRpb24KIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQ
dHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogewotICAg
IFdlYkNvcmU6OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworICAgIFdlYkNvcmU6OkZvbnRDYXNj
YWRlOjpkZWxldGVMYXlvdXQocHRyKTsKIH0KIAogfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hl
ZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0
b3I+KTsKIAotY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7Citjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJh
Y3RlclRhYmxlWzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0
Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsCkBAIC05OCwxNSArOTgsMTUgQEAgc3RhdGljIGJvb2wgdXNlQmFja3Ns
YXNoQXNZZW5TaWduRm9yRmFtaQogICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7CiB9
CiAKLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOworRm9udENhc2NhZGU6
OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpzX2NvZGVQYXRoID0gQXV0bzsKIAotVHlwZXNldHRpbmdG
ZWF0dXJlcyBGb250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKK1R5cGVzZXR0
aW5nRmVhdHVyZXMgRm9udENhc2NhZGU6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAw
OwogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBs
ZW1lbnRhdGlvbiAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vIEZvbnRDYXNjYWRlIEltcGxl
bWVudGF0aW9uIChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQogLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KIAotRm9udDo6Rm9udCgpCitGb250Q2FzY2FkZTo6Rm9udENhc2Nh
ZGUoKQogICAgIDogbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAg
ICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTE0LDcgKzExNCw3IEBA
IEZvbnQ6OkZvbnQoKQogewogfQogCi1Gb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorRm9udENhc2NhZGU6
OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNp
bmcsIGZsb2F0IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAg
LCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29y
ZFNwYWNpbmcpCkBAIC0xMjQsNyArMTI0LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZkLCBmbAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1
Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYgZm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZ01vZGUpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgZm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZ01vZGUpCiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQ
bGF0Zm9ybUZvbnQoZm9udERhdGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBt
X3dvcmRTcGFjaW5nKDApCkBAIC0xNDMsNyArMTQzLDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250RAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVj
dG9yKQogICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZv
bnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygw
KQpAQCAtMTU5LDcgKzE1OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udEQKIH0KICNlbmRpZgogCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9u
dERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9nbHlwaHMob3Ro
ZXIubV9nbHlwaHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5n
KQpAQCAtMTY5LDcgKzE2OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiB7CiB9
CiAKLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK0ZvbnRDYXNjYWRl
JiBGb250Q2FzY2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKIHsKICAg
ICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwogICAgIG1fZ2x5
cGhzID0gb3RoZXIubV9nbHlwaHM7CkBAIC0xODAsNyArMTgwLDcgQEAgRm9udCYgRm9udDo6b3Bl
cmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBG
b250OjpvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorYm9vbCBGb250Q2FzY2Fk
ZTo6b3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYg
KGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAgc3RhdGljIFJlZjxG
b250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaAogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKLXZv
aWQgRm9udDo6dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNv
bnN0Cit2b2lkIEZvbnRDYXNjYWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKIHsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Zmlyc3RGYW1pbHkoKSk7CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVz
ZXR0aW5nRmVhdHVyZXMoKTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdo
aWxlIHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2Yg
bG9hZGluZywKICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRv
IHRydWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzUxLDcgKzM1
MSw3IEBAIGZsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY28KICAgICByZXR1
cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAot
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRy
YXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygp
KQogICAgICAgICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbgogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQg
Rm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
CitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRo
KHJ1bik7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtNDAzLDcgKzQw
Myw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmlu
ZyYgZ2x5cGhOYW1lKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKGlz
RHJhd25XaXRoU1ZHRm9udChydW4pKQpAQCAtNDE1LDcgKzQxNSw3IEBAIGZsb2F0IEZvbnQ6Ondp
ZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAot
R2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWly
cm9yLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK0dseXBoRGF0YSBGb250Q2FzY2Fk
ZTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRh
VmFyaWFudCB2YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50
KSB7CiAgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFy
eUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKQEAgLTQzNiwxNiArNDM2LDE2IEBAIEdseXBoRGF0
YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUMKIH0KIAogI2lmICFQTEFURk9STShDT0NP
QSkKLVBhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQq
LCBmbG9hdCwgYm9vbCkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6
OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQor
dm9pZCBGb250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQogewogfQogCi1mbG9h
dCBGb250Ojp3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlv
dXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiop
CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC00OTYsNyAr
NDk2LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbAogLy8gZnJv
bSB0aGUgd2lkdGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVk
IG51bWJlciBvZiBNYWMgZm9udHMsCiAvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJl
bmRlcmluZyBhY3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgogLy8gYWxsIHBs
YXRmb3Jtcy4KLWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKK2Jv
b2wgRm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAg
QXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZhbWlseS5pc0Vt
cHR5KCkpCkBAIC01MjAsNyArNTIwLDcgQEAgYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFy
V2lkdGgoKSBjbwogICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhN
YXAtPmNvbnRhaW5zKGZhbWlseSk7CiB9CiAKLWJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lk
dGhJZkF2YWlsYWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpmYXN0
QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKIHsKICAgICBi
b29sIHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKICAgICBpZiAoc3VjY2Vz
cykKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZB
dmFpbGFiCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25S
ZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8g
cnVuLmxlbmd0aCgpIDogdG8pOwogCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBGb250OjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjbwogICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CiB9CiAKLWludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocykgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNl
IGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUg
aHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21w
bGV4ICYmICghdHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4p
KSkKQEAgLTU1OSw1NSArNTU5LDU1IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNw
YWNlc0ludGUKICAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBub3JtYWxpemVk
LmFwcGVuZChGb250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICBu
b3JtYWxpemVkLmFwcGVuZChGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNb
aV0pKTsKIAogICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBG
b250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKK1N0cmluZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNl
c0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3JtYWxp
emVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmlu
ZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNo
YXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhp
bmcgPSB0cnVlOwogCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3Vs
ZFVzZVNtb290aGluZykKK3ZvaWQgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhi
b29sIHNob3VsZFVzZVNtb290aGluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7CiB9CiAKLWJv
b2wgRm9udDo6c2hvdWxkVXNlU21vb3RoaW5nKCkKK2Jvb2wgRm9udENhc2NhZGU6OnNob3VsZFVz
ZVNtb290aGluZygpCiB7CiAgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAK
LXZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3ZvaWQgRm9udENhc2NhZGU6OnNl
dENvZGVQYXRoKENvZGVQYXRoIHApCiB7CiAgICAgc19jb2RlUGF0aCA9IHA7CiB9CiAKLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2Fz
Y2FkZTo6Y29kZVBhdGgoKQogewogICAgIHJldHVybiBzX2NvZGVQYXRoOwogfQogCi12b2lkIEZv
bnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlw
ZXNldHRpbmdGZWF0dXJlcykKK3ZvaWQgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGlu
Z0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKIHsKICAg
ICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKIH0K
IAotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygp
CitUeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0
dXJlcygpCiB7CiAgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAK
LUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QK
K0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1
biYgcnVuKSBjb25zdAogewogICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCiAgICAgICAgIHJl
dHVybiBzX2NvZGVQYXRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6
OmNvZGVQYXRoKGNvbnN0IFRleHQKICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChy
dW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiB9CiAKLUZvbnQ6OkNvZGVQYXRoIEZv
bnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbikKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFu
Z2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQogewogICAg
IC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMg
dXNlZC4gTm90ZSB0aGF0IHdlIAogICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJh
Y3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwpAQCAtNzM0LDggKzcz
NCw4IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAKICAgICAgICAg
aWYgKGMgPD0gMHhBNkYxKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAKLSAgICAgICAv
LyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZh
bmFnYXJpIEV4dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2Us
IE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgLy8g
VStBODAwIHRocm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5h
Z2FyaSBFeHRlbmRlZCwKKyAgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwg
TXlhbm1hciBFeHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAogICAgICAgICBpZiAo
YyA8IDB4QTgwMCkgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHhB
QkZGKQpAQCAtNzg3LDcgKzc4Nyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJh
bmdlQ29kZVAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dy
YXBoKFVDaGFyMzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIg
YykKIHsKICAgICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KICAg
ICBpZiAoYyA+PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCkBAIC04MTIsMTEgKzgxMiwxMSBAQCBi
b29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICAvLyBDSksgQ29tcGF0aWJp
bGl0eSBJZGVvZ3JhcGhzLgogICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhz
IEV4dGVuc2lvbiBCLgogICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3Jh
cGhzIEV4dGVuc2lvbiBDLgogICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pL
SWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NK
S0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFu
ZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0
ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTk0MCw3ICs5NDAsNyBAQCBi
b29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gQm9wb21vZm8g
RXh0ZW5kZWQKICAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotIAorCiAgICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocy4K
ICAgICBpZiAoYyA+PSAweDMyMDAgJiYgYyA8PSAweDMyRkYpCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtOTg5LDcgKzk4OSw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChV
Q2hhcjMKICAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJF
eHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dEludGVybmFsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKQEAgLTEwMTIsNyArMTAx
Miw3IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1
cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2Fz
Y2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNB
ZnRlckV4cGFuc2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhz
ID0gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CkBAIC0xMDYyLDE0ICsxMDYyLDE0IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZv
bnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmll
dywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNp
Z25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdW
aWV3JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4
cGFuc2lvbikKIHsKICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJu
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4
KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiAg
ICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNo
YXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBh
bnNpb24pOwogfQogCi1ib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBj
KQorYm9vbCBGb250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiB7
CiAgICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sg
fCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDgyLDcgKzEwODIsNyBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNo
YXIzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9u
dHMoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAogewogICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9u
dHMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkocmV2aXNpb24gMTc4NDE4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Lmg6MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAg
ICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCisKKyNpbmNsdWRlICJEYXNo
QXJyYXkuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250R2x5
cGhzLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworLy8gIlgxMS9YLmgiIGRl
ZmluZXMgQ29tcGxleCB0byAwIGFuZCBjb25mbGljdHMKKy8vIHdpdGggQ29tcGxleCB2YWx1ZSBp
biBDb2RlUGF0aCBlbnVtLgorI2lmZGVmIENvbXBsZXgKKyN1bmRlZiBDb21wbGV4CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRS
ZWN0OworY2xhc3MgRm9udERhdGE7CitjbGFzcyBGb250TWV0cmljczsKK2NsYXNzIEZvbnRQbGF0
Zm9ybURhdGE7CitjbGFzcyBGb250U2VsZWN0b3I7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIExheW91dFJlY3Q7CitjbGFzcyBSZW5kZXJUZXh0Owor
Y2xhc3MgVGV4dExheW91dDsKK2NsYXNzIFRleHRSdW47CisKK3N0cnVjdCBHbHlwaERhdGE7CisK
K3N0cnVjdCBHbHlwaE92ZXJmbG93IHsKKyAgICBHbHlwaE92ZXJmbG93KCkKKyAgICAgICAgOiBs
ZWZ0KDApCisgICAgICAgICwgcmlnaHQoMCkKKyAgICAgICAgLCB0b3AoMCkKKyAgICAgICAgLCBi
b3R0b20oMCkKKyAgICAgICAgLCBjb21wdXRlQm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisK
KyAgICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhbGVmdCAm
JiAhcmlnaHQgJiYgIXRvcCAmJiAhYm90dG9tOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGV4
dGVuZFRvKGNvbnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgbGVmdCA9
IHN0ZDo6bWF4KGxlZnQsIG90aGVyLmxlZnQpOworICAgICAgICByaWdodCA9IHN0ZDo6bWF4KHJp
Z2h0LCBvdGhlci5yaWdodCk7CisgICAgICAgIHRvcCA9IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9w
KTsKKyAgICAgICAgYm90dG9tID0gc3RkOjptYXgoYm90dG9tLCBvdGhlci5ib3R0b20pOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBsZWZ0ICE9IG90aGVyLmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIu
cmlnaHQgfHwgdG9wICE9IG90aGVyLnRvcCB8fCBib3R0b20gIT0gb3RoZXIuYm90dG9tOworICAg
IH0KKworICAgIGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGlu
dCBib3R0b207CisgICAgYm9vbCBjb21wdXRlQm91bmRzOworfTsKKworY2xhc3MgR2x5cGhUb1Bh
dGhUcmFuc2xhdG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEdseXBoVW5kZXJsaW5lVHlw
ZSB7U2tpcERlc2NlbmRlcnMsIFNraXBHbHlwaCwgRHJhd092ZXJHbHlwaH07CisgICAgdmlydHVh
bCBib29sIGNvbnRhaW5zTW9yZVBhdGhzKCkgPSAwOworICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkg
PSAwOworICAgIHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZXh0ZW50cygpID0gMDsK
KyAgICB2aXJ0dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1bmRlcmxpbmVUeXBlKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOworICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJh
bnNsYXRvcigpIHsgfQorfTsKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBpbmRleCk7CisKK2NsYXNzIEZvbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEZvbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICAvLyBUaGlz
IGNvbnN0cnVjdG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQg
d2l0aCBhIG5hdGl2ZSBmb250LgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21v
b3RoaW5nKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9y
IHBsYXRmb3JtLWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworI2VuZGlmCisg
ICAgfkZvbnQoKTsKKworICAgIEZvbnQoY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnQmIG9wZXJhdG9yPShjb25zdCBGb250Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IG9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBGb250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
KworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb247IH0KKworICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7
IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CisgICAgZmxv
YXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgp
OyB9CisKKyAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0Owor
CisgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90
UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBm
bG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhC
dWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworCisgICAgRGFzaEFycmF5IGRhc2hlc0Zvcklu
dGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4
dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25z
dDsKKyAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBT
dHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNy
ZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3Bh
Y2UpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Cisg
ICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAp
OworCisgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3Np
dGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisKKyAgICBib29sIGlzU21h
bGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0K
KworICAgIGZsb2F0IHdvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV93b3JkU3BhY2luZzsg
fQorICAgIGZsb2F0IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNp
bmc7IH0KKyAgICB2b2lkIHNldFdvcmRTcGFjaW5nKGZsb2F0IHMpIHsgbV93b3JkU3BhY2luZyA9
IHM7IH0KKyAgICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNwYWNp
bmcgPSBzOyB9CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzUHJp
bnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9u
dCgpOyB9CisgICAgCisgICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKTsgfQorCisgICAgVHlw
ZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VHlwZXNldHRpbmdGZWF0dXJlcz4obV90eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQor
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0KKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CisKKyAgICBGb250SXRhbGljIGl0YWxp
YygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CisgICAgRm9u
dFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQo
KTsgfQorICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KKworICAgIGJvb2wgaXNQbGF0Zm9y
bUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQor
CisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gcHJp
bWFyeUZvbnREYXRhKCkuZm9udE1ldHJpY3MoKTsgfQorICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNw
YWNpbmc7IH0KKyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYsIHVuc2ln
bmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1
bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgo
cHJpbWFyeUZvbnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQorICAgIGJvb2wgaGFzVmFs
aWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0
aElmQXZhaWxhYmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNj
ZXNzCisKKyAgICBpbnQgZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OworICAgIGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OworICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3Q7CisKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7
CisgICAgY29uc3QgRm9udFJhbmdlcyYgZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7
CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJv
ciwgRm9udERhdGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OworICAgIAorI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFW
YXJpYW50KSBjb25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgo
VUNoYXIzMik7CisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMy
KTsKKworICAgIC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRo
aXMgZnVuY3Rpb24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFp
bGluZyBvcHBvcnR1bml0eQorICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJl
IHByZXNlbnQuIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvclNlZ21lbnQoKSBjb21wZW5zYXRlcworICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGlu
ZyB0aGUgcmV0dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBl
bmQgb2YgYSBsaW5lLgorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KGNvbnN0IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5z
aW9uKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290
aGluZyhib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9v
dGhpbmcoKTsKKworICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNp
bXBsZVdpdGhHbHlwaE92ZXJmbG93IH07CisgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4
dFJ1biYpIGNvbnN0OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRo
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQorICAgIHN0YXRpYyBD
b2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVu
KTsKKworICAgIGJvb2wgcHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNp
cywgRm9yVGV4dEVtcGhhc2lzIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0
cmVhbSBhZHZhbmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0
RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJh
d1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlw
aE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKKworICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0
b21pY1N0cmluZyYsIEdseXBoRGF0YSYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2FuUmV0
dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKworICAgIC8vIFJldHVybnMgdGhl
IGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhC
dWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7
CisgICAgZmxvYXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisgICAgc3RhdGljIHVu
c2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHNp
emVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisg
ICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDsKKworcHVibGljOgorI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQorICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZv
clRleHRBdXRvU2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgJiYg
bV9sZXR0ZXJTcGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZworICAgICAgICAgICAgJiYg
bV93b3JkU3BhY2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIH0KKyNlbmRpZgorCisg
ICAgLy8gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRpZmZlcmVudCBmb250IHJlbmRlcmluZyBj
b2RlIHBhdGhzLgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvZGVQYXRoKENv
ZGVQYXRoKTsKKyAgICBzdGF0aWMgQ29kZVBhdGggY29kZVBhdGgoKTsKKyAgICBzdGF0aWMgQ29k
ZVBhdGggc19jb2RlUGF0aDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldERl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgIHN0YXRp
YyBUeXBlc2V0dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisKKyAg
ICBzdGF0aWMgY29uc3QgdWludDhfdCBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl07
CisgICAgc3RhdGljIGJvb2wgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoVUNoYXIzMiBjKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoYyAmIH4weEZGKSAmJiBzX3JvdW5kaW5nSGFja0NoYXJhY3Rl
clRhYmxlW2NdOworICAgIH0KKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29u
c3Q7CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0g
JyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KKyAg
ICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJl
YXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMg
PT0gMHgyMDBkOyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21w
bGV4U2NyaXB0KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8
IDB4QTApIHx8IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49
IDB4MjAwZSAmJiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8
fCBjID09IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hh
cmFjdGVyOyB9CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMy
IGMpOworCisgICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hh
cmFjdGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHNwYWNlOworCisgICAgICAgIGlmICh0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2UoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIHJldHVybiB6ZXJvV2lkdGhTcGFjZTsKKworICAg
ICAgICByZXR1cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFs
aXplU3BhY2VzKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAg
ICBib29sIHVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbDsgfQorICAgIEZvbnRHbHlwaHMqIGdseXBocygpIGNvbnN0IHsgcmV0
dXJuIG1fZ2x5cGhzLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvYWRpbmdDdXN0
b21Gb250cygpIGNvbnN0OworCisgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBjb21wdXRlVHlwZXNl
dHRpbmdGZWF0dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0
ZXh0UmVuZGVyaW5nTW9kZSA9IG1fZm9udERlc2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7
CisgICAgICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVhdHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0
dGluZ0ZlYXR1cmVzOworCisgICAgICAgIHN3aXRjaCAodGV4dFJlbmRlcmluZ01vZGUpIHsKKyAg
ICAgICAgY2FzZSBBdXRvVGV4dFJlbmRlcmluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE9wdGltaXplU3BlZWQ6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcg
fCBMaWdhdHVyZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2VvbWV0cmlj
UHJlY2lzaW9uOgorICAgICAgICBjYXNlIE9wdGltaXplTGVnaWJpbGl0eToKKyAgICAgICAgICAg
IGZlYXR1cmVzIHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7
CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgICAg
IGZlYXR1cmVzICY9IH5LZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Rm9udERlc2NyaXB0aW9uOjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0g
S2VybmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6QXV0b0tlcm5pbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgeworICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAg
ICAgICAgIGZlYXR1cmVzICY9IH5MaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAg
ICAgIGZlYXR1cmVzIHw9IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
OworCisgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIG11dGFibGUg
UmVmUHRyPEZvbnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsK
KyAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOworICAgIG11dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sOworICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVz
IDogMjsgLy8gKFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJv
bSBtX2ZvbnREZXNjcmlwdGlvbi4KK307CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNo
ZSgpOwordm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7
Cit2b2lkIGNsZWFyV2lkdGhDYWNoZXMoKTsKKworaW5saW5lIEZvbnQ6On5Gb250KCkKK3sKK30K
KworaW5saW5lIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmlt
YXJ5U2ltcGxlRm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgY29uc3Qg
Rm9udFJhbmdlcyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGJv
b2wgRm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOwor
ICAgIHJldHVybiBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKK30K
KworaW5saW5lIEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCitp
bmxpbmUgZmxvYXQgRm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRh
LCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXRh
YlNpemUpCisgICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lk
dGggPSB0YWJTaXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOwor
ICAgIGZsb2F0IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJX
aWR0aCk7CisgICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3BhY2VXaWR0aCgp
IC8gMikgPyB0YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7Cit9CisKK30KKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91
dD4oV2ViQ29yZTo6VGV4dExheW91dCopOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udF9oCi0j
ZGVmaW5lIEZvbnRfaAorI2lmbmRlZiBGb250Q2FzY2FkZV9oCisjZGVmaW5lIEZvbnRDYXNjYWRl
X2gKIAogI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgpAQCAtMTA2LDI0ICsxMDYsMjQgQEAgcHVibGljOgogfTsKIEdseXBoVG9QYXRoVHJhbnNsYXRv
cjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4m
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CiAKLWNsYXNzIEZvbnQgeworY2xhc3Mg
Rm9udENhc2NhZGUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNw
YWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2Fk
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlz
IGNvbnN0cnVjdG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQg
d2l0aCBhIG5hdGl2ZSBmb250LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21v
b3RoaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiwgYm9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhp
bmcpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxh
dGZvcm0taW5kZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2Nh
ZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAj
ZW5kaWYKLSAgICB+Rm9udCgpOworICAgIH5Gb250Q2FzY2FkZSgpOwogCi0gICAgRm9udChjb25z
dCBGb250Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQm
KTsKKyAgICBGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIEZvbnRDYXNjYWRlJiBvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAK
ICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCBwcml2YXRlOgog
CiBwdWJsaWM6CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBlcXVh
bEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIGJvb2wgZXF1
YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1Npemlu
ZyhvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKICAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2lu
ZyA9PSBvdGhlci5tX2xldHRlclNwYWNpbmcKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8
IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0
aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1pl
cm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgy
MDBkOyB9CiAgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2Ny
aXB0KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTAp
IHx8IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAw
ZSAmJiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09
IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVy
OyB9Ci0gICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOwor
ICAgIHN0YXRpYyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMik7CiAKICAgICBz
dGF0aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCiAgICAg
ewpAQCAtMzQ3LDM0ICszNDcsMzQgQEAgdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7
CiB2b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIHZv
aWQgY2xlYXJXaWR0aENhY2hlcygpOwogCi1pbmxpbmUgRm9udDo6fkZvbnQoKQoraW5saW5lIEZv
bnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9u
dERhdGEmIEZvbnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU2ltcGxl
Rm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAogewogICAgIEFT
U0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERh
dGEobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9u
dDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBG
b250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAotaW5s
aW5lIGJvb2wgRm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNj
YWRlOjppc0ZpeGVkUGl0Y2goKSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAg
cmV0dXJuIG1fZ2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1p
bmxpbmUgRm9udFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoraW5saW5lIEZv
bnRTZWxlY3RvciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fZ2x5cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAotaW5saW5l
IGZsb2F0IEZvbnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5z
aWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENh
c2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQg
dGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCF0YWJTaXplKQogICAg
ICAgICByZXR1cm4gbGV0dGVyU3BhY2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29y
ayBpZiB0aGUgZW1waGFzaXMgbWFyayB1c2VzIGEgY29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9m
IHRoZQogLy8gc3RhbmRhcmQgZW1waGFzaXMgbWFya3MgZG8gc28uCi1ib29sIEZvbnQ6OmdldEVt
cGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYg
Z2x5cGhEYXRhKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhE
YXRhKGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0
CiB7CiAgICAgaWYgKG1hcmsuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02
Niw3ICs2Niw3IEBAIGJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Fz
Y2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1h
cmtHbHlwaERhdGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFy
a0dseXBoRGF0YSkpCkBAIC04MCw3ICs4MCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtBc2Nl
bnQoY29uc3QgQXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmFz
Y2VudCgpOwogfQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5
cGhEYXRhOwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlw
aERhdGEpKQpAQCAtOTQsNyArOTQsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChj
b25zdCBBdG9tCiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50
KCk7CiB9CiAKLWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRh
OwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEp
KQpAQCAtMTA4LDcgKzEwOCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3Qg
QXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwog
fQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFs
QWR2YW5jZTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFk
dmFuY2VzRm9yU2ltcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZv
bnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
K2Zsb2F0IEZvbnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGds
eXBocythZHZhbmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIg
Z2x5cGhCdWZmZXI7CkBAIC0xNTQsNyArMTU0LDcgQEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZQogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0K
IAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleAogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQs
IHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFk
dmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKIHsKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVu
KTsKQEAgLTIzMSw3ICsyMzEsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxl
T2ZHbHlwCiAgICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250
RGF0YUF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFy
a0dseXBoRGF0YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJr
R2x5cGhEYXRhKSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29uCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1
ZmZlciwgc3RhcnRQb2ludCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQg
Rm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywg
cnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlw
aEJ1ZmZlcjsKQEAgLTI3Niw3ICsyNzYsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dChjb25zCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotdm9pZCBG
b250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBp
dCh0aGlzLCBydW4pOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvclNpbXBsZVQKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGgg
LSBiZWZvcmVXaWR0aCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KSBjb25zdAogewogICAgIGZsb2F0IGRlbHRhID0geDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRm9udEdseXBocy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI2NCw3ICsyNjQsNyBAQCBHbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRh
KQogICAgICAgICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tG
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lz
dGVtRmFsbGJhY2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lk
ZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0Zv
bnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsK
IAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBH
bHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgICAgIGZhbGxiYWNr
R2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogCiAgICAgaWYgKHZh
cmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YSkgewot
ICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tH
bHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpCisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRP
cmllbnRhdGlvbkZhbGxiYWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGds
eXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0
aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0K
IApAQCAtMzIyLDcgKzMyMiw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JO
b3JtYWwKICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoYyk7CiAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0
YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAh
ZGF0YS5mb250RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICAgICAg
ICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhP
cmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEp
OwogCiAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBo
cygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzMCw3ICs0MzAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgp
CiAvLyB0aGUgd2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4n
dCBub3RpY2VhYmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KICNpZiAhUExBVEZPUk0oSU9TKQog
I2lmICFVU0UoV0lOR0RJKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBmcm9tLCBpbnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGV4dChjb25zdCBGb24KIH0KICNlbmRpZgogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK2Zsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAg
ZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZm
ZXImIGJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXIm
IGJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1
Niw3ICs0NTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGCiAg
ICAgZm9udC5kcmF3R2x5cGhzKHRoaXMsICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlw
aHMsIHBvaW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKIH0KIAogLy8gRklYTUU6IEJldHRlciBt
ZXJnZSB0aGUgaU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtl
IHRoaXMgbWV0aG9kIHVzZSB0aGUKLS8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0
LCBGb250OjpkcmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQg
dGhlcmUKKy8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Q2FzY2FkZTo6
ZHJhd1RleHQoKSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCiAv
LyBhcmVuJ3Qgbm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hh
bmdlLgogI2lmICFQTEFURk9STShJT1MpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlU
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikKICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25z
dCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
LCBCaWRpU3RhdHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50
IGxlbmd0aCkKICNlbmRpZgogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC01MTUs
NyArNTE1LDcgQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29ucwogICAg
ICAgICBmb250LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgp
OwotICAgICAgICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRo
IG9mIHdoYXQgaXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJl
LgorICAgICAgICAvLyBGSVhNRTogSGF2ZSBGb250Q2FzY2FkZTo6ZHJhd1RleHQgcmV0dXJuIHRo
ZSB3aWR0aCBvZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1
cmUgaGVyZS4KICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92
ZShmb250LndpZHRoKHN1YnJ1biksIDApOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFkaWVu
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpA
QCAtMzU2LDE2ICszNTYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAg
IAogI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CisgICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwog
I2Vsc2UKLSAgICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAg
IGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAgICAg
ICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29u
c3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBU
ZXh0UnVuJiAsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAw
LCBpbnQgdG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJl
YWR5KTsKKyAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKICNl
bHNlCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMq
ID0gMCwgaW50IGxlbmd0aCA9IC0xKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJh
d0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2Nh
ZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3Ro
ID0gLTEpOwogI2VuZGlmCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAg
IFJvdW5kQWxsU2lkZXMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDggKzMzLDggQEAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogI2luY2x1ZGUgIkNv
cmVUZXh0U1BJLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhE
YXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KQEAgLTQxOSw3ICs0MTksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpzCiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50
IGNvZGVVbml0c0xlbmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAg
ICAgICAgICAgIGNvZGVVbml0c1swXSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIp
OworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNl
cyhjaGFyYWN0ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmlu
Z1RydW5jYXRvci5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3Iu
aCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxl
ZnRUcnVuY2F0ZVRvQnVmZmVyKGNvbgogICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0
SW5kZXg7CiB9CiAKLXN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJl
ciwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxl
Um91bmRpbmdIYWNrcykKK3N0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250Q2FzY2Fk
ZSYgcmVuZGVyZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJv
b2wgZGlzYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywg
bGVuZ3RoKTsKICAgICBpZiAoZGlzYWJsZVJvdW5kaW5nSGFja3MpCkBAIC0yMDAsNyArMjAwLDcg
QEAgc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbgogICAgIHJldHVybiBy
ZW5kZXJlci53aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1
bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFj
a3MsIGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMgPSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wg
YWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgVHJ1bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMgPSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAs
IGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKQEAgLTI5NSw0MiArMjk1LDQyIEBAIHN0YXRpYyBT
dHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gU3RyaW5nKHN0cmlu
Z0J1ZmZlciwgdHJ1bmNhdGVkTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cykKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJv
dW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVu
Y2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVy
LCAhZW5hYmxlUm91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJp
Z2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykK
K1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRl
U3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlciwgIWVu
YWJsZVJvdW5kaW5nSGFja3MpOwogfQogCi1mbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK2Zsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3Vu
ZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gc3RyaW5n
V2lkdGgoZm9udCwgU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBz
dHJpbmcubGVuZ3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmlu
Z1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1h
eFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxl
Um91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlw
c2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1Ry
dW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVU
b0J1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3Ry
aW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBt
YXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJs
ZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxp
cHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdU
cnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRv
QnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJp
bmdUcnVuY2F0b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVS
b3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1
bmNhdG9yOjpsZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJs
ZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxp
cHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4g
dHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZm
ZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlw
c2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1Ry
dW5jYXRvcjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVs
bGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmlu
Z1RydW5jYXRvcjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNr
c09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91
bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsK
ICAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRD
bGlwVG9DaGFyYWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgs
IHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0K
IAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgs
IGJvb2wgYWx3YXlzVHJ1bmNhdGUpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBU
b1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCiB7CiAgICAg
cmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRv
V29yZEJ1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5z
ZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0
cmluZ1RydW5jYXRvci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMg
KzMzLDIzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBGb250Owot
ICAgIAotICAgIGNsYXNzIFN0cmluZ1RydW5jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBl
bnVtIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFi
bGVSb3VuZGluZ0hhY2tzIH07Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmlu
ZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0
cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgs
IGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0
aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRp
b25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmlu
ZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250
JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hv
dWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdp
ZHRoID0gMCk7Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5j
YXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91
bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0g
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIo
Y29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5j
YXRlID0gZmFsc2UpOworY2xhc3MgRm9udENhc2NhZGU7CisKK2NsYXNzIFN0cmluZ1RydW5jYXRv
ciB7CitwdWJsaWM6CisgICAgZW51bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxl
Um91bmRpbmdIYWNrcywgRW5hYmxlUm91bmRpbmdIYWNrcyB9OworCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNh
YmxlUm91bmRpbmdIYWNrcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdo
dFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2Fk
ZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5v
dCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lk
dGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYg
cmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0
V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKIAot
ICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwg
Y29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hh
Y2tzKTsKLSAgICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25z
dCBTdHJpbmcmLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9
IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJl
dmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRS
dW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGb250OworY2xh
c3MgRm9udENhc2NhZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZl
cjsKIGNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvcjsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29s
IG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBT
dHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgPSAwOworICAgICAgICB2aXJ0dWFs
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0
aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENo
YXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNl
c1N0cmluZ0NhY2hlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwotICAgICAg
ICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9
IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYg
Z2x5cGhOYW1lKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5p
bmcoY29uc3QgU2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBp
bnQgZnJvbSkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlw
aFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1w
bGVGb250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgogI2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29u
c3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29s
IGZvclRleHRFbXBoYXNpcykKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9u
dENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9v
bCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikK
ICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJh
dG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bw
b3J0dW5pdHkgPSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24g
PSBtX2lzQWZ0ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwg
bV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNp
Z25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNB
ZnRlckV4cGFuc2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5h
bGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudC0tOwogCkBAIC0yMjksOSArMjI5LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVy
U3BhY2luZygpKQogICAgICAgICAgICAgICAgIHdpZHRoICs9IG1fZm9udC0+bGV0dGVyU3BhY2lu
ZygpOwogCi0gICAgICAgICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0g
Rm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICAgICAg
ICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYm
IEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAg
IHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2FzY2FkZTo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250
Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgewogICAgICAgICAg
ICAgICAgIC8vIERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3Zl
ciBhbGwgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAg
ICBpZiAobV9leHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNF
eHBhbnNpb24gPSBtX2V4cGFuc2lvbjsKQEAgLTI2OCw5ICsyNjgsMTAgQEAgaW5saW5lIHVuc2ln
bmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1faXNBZnRlckV4
cGFuc2lvbiA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9u
dFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFj
dGVyKSkKKyAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1
ZmZlciAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAg
ICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhC
dWZmZXItPnNpemUoKSwKICAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFj
dGVyVHJlYXRlZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/
IGdseXBoQnVmZmVyLT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpLndpZHRoKCkg
OiAwLCB3aWR0aCkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlw
aEJvdW5kcykgewogICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKQEAgLTI3OCw3ICsyNzksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6
Om1heDxmbG9hdD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1f
Zm9yVGV4dEVtcGhhc2lzICYmICFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoYXJhY3Rl
cikpCisgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAhRm9udENhc2NhZGU6OmNhblJl
Y2VpdmVUZXh0RW1waGFzaXMoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIGdseXBoID0gMDsKIAog
ICAgICAgICAvLyBBZHZhbmNlIHBhc3QgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IGRlYWx0IHdpdGgu
CkBAIC0yODgsNyArMjg5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbgogCiAgICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRl
cm1pbmUgd29yZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgICAgICAvLyB0
byBiZSBpbnRlZ2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBp
bnRlZ2VyIGJvdW5kYXJ5LgotICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAm
JiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGlm
IChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFj
a0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRo
KTsKIAogICAgICAgICAgICAgLy8gU2luY2Ugd2lkdGhTaW5jZUxhc3RSb3VuZGluZyBjYW4gbG9z
ZSBwcmVjaXNpb24gaWYgd2UgaW5jbHVkZSBtZWFzdXJlbWVudHMgZm9yCkBAIC0zMDEsNyArMzAy
LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3Rl
ciBpcyBhICJyb3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QKICAgICAgICAg
ICAgIC8vIHdpZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGlu
dGVnZXIgYm91bmRhcnkuCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5n
KCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVy
KCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0
ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpKSkpCisgICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5
V29yZFJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJy
ZW50Q2hhcmFjdGVyKCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKCoodGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQogICAgICAgICAg
ICAgICAgIHx8IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpID49IG1fcnVuLmxlbmd0aCgpKSkg
ewogICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdFJvdW5k
aW5nICsgd2lkdGg7CiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyA9IGNl
aWxmKHRvdGFsV2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw3ICsyMiw3IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3JfaAogI2RlZmluZSBXaWR0aEl0ZXJh
dG9yX2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIlNWR0dseXBoLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBT
aW1wbGVGb250RGF0YTsKIGNsYXNzIFRleHRSdW47CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBH
bHlwaERhdGE7CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4
dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAs
IGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
ID0gZmFsc2UpOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBU
ZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFz
aXMgPSBmYWxzZSk7CiAKICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIq
KTsKICAgICBib29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZl
ciYpOwpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFi
aWNGb3JtPiYgYXJhYmljRm9ybXMoKSB7IHJldHVybiBtX2FyYWJpY0Zvcm1zOyB9CiAjZW5kaWYK
IAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250
JiBmb250KQorICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25z
dCBGb250Q2FzY2FkZSYgZm9udCkKICAgICB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICAgICAg
ICAgaWYgKCFmb250LmlzUHJpbnRlckZvbnQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgfQogCi0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNvbnN0IEZvbnRD
YXNjYWRlKiBtX2ZvbnQ7CiAKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9T
Lm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRm9udENhY2hlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAK
ICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKLSNp
bXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJSZW5kZXJU
aGVtZUlPUy5oIgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
U2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1Mu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKIAogI2ltcG9ydCAiQmxvY2tFeGNl
cHRpb25zLmgiCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIK
ICNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiRm9udFNlcnZpY2VzSU9TLmgiCiAjaW1wb3J0
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJGbG9h
dFNpemUuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgpAQCAtNDMsMTMgKzQzLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgVGV4dExheW91dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgaXNO
ZWVkZWQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgYm9v
bCBpc05lZWRlZChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKICAg
ICB7CiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
dGV4dCwgZm9udCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7Ci0gICAgICAgIHJldHVybiBmb250LmNv
ZGVQYXRoKHJ1bikgPT0gRm9udDo6Q29tcGxleDsKKyAgICAgICAgcmV0dXJuIGZvbnQuY29kZVBh
dGgocnVuKSA9PSBGb250Q2FzY2FkZTo6Q29tcGxleDsKICAgICB9CiAKLSAgICBUZXh0TGF5b3V0
KFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgVGV4
dExheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQg
eFBvcykKICAgICAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAgICAgLCBtX3J1bihjb25zdHJ1Y3RU
ZXh0UnVuKHRleHQsIGZvbnQsIHhQb3MpKQogICAgICAgICAsIG1fY29udHJvbGxlcihzdGQ6Om1h
a2VfdW5pcXVlPENvbXBsZXhUZXh0Q29udHJvbGxlcj4oJm1fZm9udCwgbV9ydW4sIHRydWUpKQpA
QCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2NvbnRyb2xsZXItPmFk
dmFuY2UoZnJvbSwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIGZs
b2F0IGJlZm9yZVdpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAg
IGlmIChtX2ZvbnQud29yZFNwYWNpbmcoKSAmJiBmcm9tICYmIEZvbnQ6OnRyZWF0QXNTcGFjZSht
X3J1bltmcm9tXSkpCisgICAgICAgIGlmIChtX2ZvbnQud29yZFNwYWNpbmcoKSAmJiBmcm9tICYm
IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQogICAgICAgICAgICAgYmVm
b3JlV2lkdGggKz0gbV9mb250LndvcmRTcGFjaW5nKCk7CiAgICAgICAgIG1fY29udHJvbGxlci0+
YWR2YW5jZShmcm9tICsgbGVuLCAwLCBCeVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAg
ICAgICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhTb0ZhcigpOwpA
QCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgZmxvYXQgeFBvcykKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
clRleHQqIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zKQogICAgIHsK
ICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0
LCBmb250LCB0ZXh0LCB0ZXh0LT5zdHlsZSgpKTsKICAgICAgICAgcnVuLnNldENoYXJhY3RlcnNM
ZW5ndGgodGV4dC0+dGV4dExlbmd0aCgpKTsKQEAgLTc4LDI1ICs3OCwyNSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gcnVuOwogICAgIH0KIAotICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxl
ciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBGb250IGFuZCBUZXh0UnVuIHNvIHRoZXkgbXVz
dCBiZSBrZXB0IGFsaXZlIGhlcmUuCi0gICAgRm9udCBtX2ZvbnQ7CisgICAgLy8gQ29tcGxleFRl
eHRDb250cm9sbGVyIGhhcyBvbmx5IHJlZmVyZW5jZXMgdG8gaXRzIEZvbnRDYXNjYWRlIGFuZCBU
ZXh0UnVuIHNvIHRoZXkgbXVzdCBiZSBrZXB0IGFsaXZlIGhlcmUuCisgICAgRm9udENhc2NhZGUg
bV9mb250OwogICAgIFRleHRSdW4gbV9ydW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBsZXhU
ZXh0Q29udHJvbGxlcj4gbV9jb250cm9sbGVyOwogfTsKIAotUGFzc093blB0cjxUZXh0TGF5b3V0
PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgZmxvYXQgeFBvcywgYm9vbCBj
b2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0CitQYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnRDYXNj
YWRlOjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgZmxvYXQgeFBvcywgYm9vbCBjb2xs
YXBzZVdoaXRlU3BhY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlU3BhY2UgfHwg
IVRleHRMYXlvdXQ6OmlzTmVlZGVkKHRleHQsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0TGF5b3V0KHRleHQsICp0aGlzLCB4UG9z
KSk7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqIGxheW91dCkKK3Zv
aWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KiBsYXlvdXQpCiB7CiAgICAg
ZGVsZXRlIGxheW91dDsKIH0KIAotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cykKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0
JiBsYXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQogewogICAgIHJldHVybiBsYXlvdXQud2lkdGgo
ZnJvbSwgbGVuLCBmYWxsYmFja0ZvbnRzKTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMg
aW5saW5lIENHRmxvYXQgY2VpbENHRmxvYXQoQ0dGbG9hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENHRmxvYXQ+KGNlaWwoZikpOwogfQogCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhU
ZXh0Q29udHJvbGxlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wg
bWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitDb21wbGV4VGV4dENv
bnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4
dEVtcGhhc2lzKQogICAgIDogbV9mb250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwg
bV9pc0xUUk9ubHkodHJ1ZSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0Q29udHJvCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
PSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2FmdGVy
RXhwYW5zaW9uOwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0g
Rm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigp
ID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNp
b24pOwogICAgICAgICBpZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAhbV9ydW4uYWxsb3dzVHJhaWxp
bmdFeHBhbnNpb24oKSkKICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQtLTsK
IApAQCAtNjE1LDcgKzYxNSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RH
bHlwaHMKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuZXh0Q2ggPSAqKG1fY29t
cGxleFRleHRSdW5zW3IgKyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbciAr
IDFdLT5pbmRleEF0KDApKTsKIAotICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250
Ojp0cmVhdEFzU3BhY2UoY2gpOworICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250
Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKICAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0
cmVhdEFzU3BhY2UgPyBmb250RGF0YS5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CiAgICAgICAg
ICAgICBDR1NpemUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IENHU2l6ZU1ha2Uoc3BhY2VXaWR0
aCwgYWR2YW5jZXNbaV0uaGVpZ2h0KSA6IGFkdmFuY2VzW2ldOwogI2lmIFBMQVRGT1JNKElPUykK
QEAgLTYyNSw3ICs2MjUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5
cGhzCiAKICAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQog
ICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udERhdGEs
IG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5j
ZUxhc3RDb21taXQpOwotICAgICAgICAgICAgZWxzZSBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0
aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CisgICAgICAgICAgICBlbHNlIGlmIChGb250
Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CiAg
ICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CiAgICAgICAgICAgICAgICAgZ2x5cGgg
PSBmb250RGF0YS5zcGFjZUdseXBoKCk7CiAgICAgICAgICAgICB9CkBAIC02NTEsNyArNjUxLDcg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlLndpZHRoICs9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCk7CiAKICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAg
ICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChjaCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnRDYXNj
YWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoKSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBEaXN0cmlidXRlIHRoZSBydW4ncyB0b3RhbCBleHBhbnNpb24gZXZlbmx5IG92ZXIgYWxsIGV4
cGFuc2lvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBydW4uCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2V4cGFuc2lvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNF
eHBhbnNpb24gPSBtX2V4cGFuc2lvbjsKQEAgLTY4NSwxMiArNjg1LDEzIEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgIC8vIFdlIGFkanVzdCB0
aGUgd2lkdGggb2YgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEgIndvcmQiIHRvIGVuc3VyZSBhbiBp
bnRlZ2VyIHdpZHRoLiAKICAgICAgICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUg
dXNlZCB0byBkZXRlcm1pbmUgd29yZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjayAK
ICAgICAgICAgICAgIC8vIHRvIGJlIGludGVnZXIgd2lkdGgsIHNvIHRoZSBmb2xsb3dpbmcgd29y
ZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LiAKLSAgICAgICAgICAgIGlmICht
X3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVy
KGNoKSkgCisgICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250
Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoY2gpKSAKICAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gY2VpbENHRmxvYXQoYWR2YW5jZS53aWR0aCk7IAogCiAgICAgICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgInJvdW5kaW5nIGhh
Y2sgY2hhcmFjdGVyIiwgaWYgc28sIGFkanVzdCB0aGUgCi0gICAgICAgICAgICAvLyB3aWR0aCBz
byB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5
LiAKLSAgICAgICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEds
eXBoICYmIEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKG5leHRDaCkpIHx8IChtX3J1bi5h
cHBseVJ1blJvdW5kaW5nKCkgJiYgbGFzdEdseXBoKSkgeyAKKyAgICAgICAgICAgIC8vIHdpZHRo
IHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91bmRh
cnkuCisgICAgICAgICAgICBib29sIG5lZWRzUm91bmRpbmdGb3JDaGFyYWN0ZXIgPSBtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmICFsYXN0R2x5cGggJiYgRm9udENhc2NhZGU6OmlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKG5leHRDaCk7CisgICAgICAgICAgICBpZiAobmVlZHNSb3VuZGluZ0Zv
ckNoYXJhY3RlciB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkpIHsK
ICAgICAgICAgICAgICAgICBDR0Zsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1p
dCArIGFkdmFuY2Uud2lkdGg7IAogICAgICAgICAgICAgICAgIHdpZHRoU2luY2VMYXN0Q29tbWl0
ID0gY2VpbENHRmxvYXQodG90YWxXaWR0aCk7IAogICAgICAgICAgICAgICAgIENHRmxvYXQgZXh0
cmFXaWR0aCA9IHdpZHRoU2luY2VMYXN0Q29tbWl0IC0gdG90YWxXaWR0aDsgCkBAIC03MDksNyAr
NzEwLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAg
ICAgICAgICAgIHdpZHRoU2luY2VMYXN0Q29tbWl0ICs9IGFkdmFuY2Uud2lkdGg7IAogCiAgICAg
ICAgICAgICAvLyBGSVhNRTogQ29tYmluaW5nIG1hcmtzIHNob3VsZCByZWNlaXZlIGEgdGV4dCBl
bXBoYXNpcyBtYXJrIGlmIHRoZXkgYXJlIGNvbWJpbmUgd2l0aCBhIHNwYWNlLgotICAgICAgICAg
ICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzICYmICghRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNp
cyhjaCkgfHwgKFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19NX01BU0spKSkKKyAgICAgICAgICAg
IGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVt
cGhhc2lzKGNoKSB8fCAoVV9HRVRfR0NfTUFTSyhjaCkgJiBVX0dDX01fTUFTSykpKQogICAgICAg
ICAgICAgICAgIGdseXBoID0gMDsKIAogICAgICAgICAgICAgYWR2YW5jZS5oZWlnaHQgKj0gLTE7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19D
VExpbmUgKiBDVExpbmVSZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7Citj
bGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogY2xhc3MgVGV4dFJ1bjsK
IApAQCAtNTAsNyArNTAsNyBAQCBlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFy
dGlhCiAvLyBjb21wbGV4IHNjcmlwdHMgb24gT1MgWC4KIGNsYXNzIENvbXBsZXhUZXh0Q29udHJv
bGxlciB7CiBwdWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnQqLCBj
b25zdCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNl
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29s
IGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29u
c3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGlu
Z0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFk
dmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgogICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRp
b25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBwcml2YXRlOgog
ICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IG1fcnVuSW5kaWNlczsKICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDE2PiBtX2dseXBoQ291bnRGcm9tU3RhcnRUb0luZGV4OwogCi0gICAgY29uc3QgRm9udCYg
bV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1
biYgbV9ydW47CiAgICAgYm9vbCBtX2lzTFRST25seTsKICAgICBib29sIG1fbWF5VXNlTmF0dXJh
bFdyaXRpbmdEaXJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIK
IAogI2luY2x1ZGUgIkNvcmVUZXh0U1BJLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIApAQCAtNDAsMTkgKzQw
LDE5IEBACiAKIEBpbnRlcmZhY2UgV2ViQ2FzY2FkZUxpc3QgOiBOU0FycmF5IHsKICAgICBAcHJp
dmF0ZQotICAgIGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250OworICAgIGNvbnN0IFdlYkNvcmU6
OkZvbnRDYXNjYWRlKiBfZm9udDsKICAgICBVQ2hhcjMyIF9jaGFyYWN0ZXI7CiAgICAgTlNVSW50
ZWdlciBfY291bnQ7CiAgICAgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiwg
MTY+IF9mb250RGVzY3JpcHRvcnM7CiB9CiAKLS0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2Vi
Q29yZTo6Rm9udCopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hhcmFjdGVyOworLSAoaWQpaW5p
dFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZSopZm9udCBjaGFyYWN0ZXI6KFVD
aGFyMzIpY2hhcmFjdGVyOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDYXNjYWRlTGlz
dAogCi0tIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqKWZvbnQgY2hhcmFj
dGVyOihVQ2hhcjMyKWNoYXJhY3RlcgorLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3Jl
OjpGb250Q2FzY2FkZSopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hhcmFjdGVyCiB7CiAgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC02MCw3
ICs2MCw3IEBAIC0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udCoKICAgICBf
Zm9udCA9IGZvbnQ7CiAgICAgX2NoYXJhY3RlciA9IGNoYXJhY3RlcjsKIAotICAgIC8vIEJ5IHRo
ZSB0aW1lIGEgV2ViQ2FzY2FkZUxpc3QgaXMgdXNlZCwgdGhlIEZvbnQgaGFzIGFscmVhZHkgYmVl
biBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKKyAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNh
c2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250Q2FzY2FkZSBoYXMgYWxyZWFkeSBiZWVuIGFza2Vk
IHRvIHJlYWxpemUgYWxsIG9mIGl0cwogICAgIC8vIEZvbnREYXRhLCBzbyB0aGlzIGxvb3AgZG9l
cyBub3QgaGl0IHRoZSBGb250Q2FjaGUuCiAgICAgd2hpbGUgKCFfZm9udC0+ZmFsbGJhY2tSYW5n
ZXNBdChfY291bnQpLmlzTnVsbCgpKQogICAgICAgICBfY291bnQrKzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQko
cmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2lmICFQ
TEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiRm9u
dC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgi
CiAjaW1wb3J0ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW1wb3J0ICJOU0ZvbnRTUEkuaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRN
YWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q29tcGxleFRleHRNYWMuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAogI2luY2x1ZGUgIkNv
bXBsZXhUZXh0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKQEAgLTM3LDcg
KzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNl
bGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIENv
bXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CiAgICAgY29udHJvbGxl
ci5hZHZhbmNlKGZyb20pOwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRo
IC0gYmVmb3JlV2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMp
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAog
ewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC03NSw3ICs3NSw3IEBAIGZsb2F0IEZv
bnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFu
Y2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBo
IGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2gg
Z2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC05Myw3ICs5Myw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnQKICAgICByZXR1cm4gc3RhcnRQ
b2ludC54KCkgLSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAg
ZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBk
cmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBv
aW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBn
bHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsK
ICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZh
bGxiYWNrRm9udHMpOwogICAgIGlmIChnbHlwaE92ZXJmbG93KSB7CkBAIC0xMTYsMTMgKzExNiwx
MyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uCiAgICAgcmV0dXJu
IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9s
bGVyKHRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24o
eCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9u
dDo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Citj
b25zdCBTaW1wbGVGb250RGF0YSogRm9udENhc2NhZGU6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZv
bnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAogewogICAgIFVDaGFyMzIgYmFzZUNoYXJhY3Rl
cjsKICAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24gMTc4
NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKICNpbXBvcnQg
IkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKQEAgLTU4LDEyICs1
OCwxMiBAQCBTT0ZUX0xJTksoVUlLaXQsIF9VSUtpdEdldFRleHRFZmZlY3RzQ2F0CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29t
cGxleFRleHQoKQorYm9vbCBGb250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNv
bXBsZXhUZXh0KCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBh
bmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5F
eHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC0xOTUsNyArMTk1LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9k
ZShDR0NvbgogfQogI2VuZGlmCiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3JQb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgYW5jaG9yUG9pbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9y
bURhdGEuc2l6ZSgpKQpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjphZHZhbmNlKCkKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAm
JiBtX2luZGV4IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCi1EYXNoQXJyYXkgRm9udDo6
ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29u
c3QKK0Rhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0
KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3Qg
RmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSkKICAgICAgICAgcmV0dXJuIERhc2hBcnJheSgpOwpAQCAtNTM0LDcgKzUzNCw3IEBA
IERhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2kKICAgICBHbHlwaEJ1ZmZl
ciBnbHlwaEJ1ZmZlcjsKICAgICBnbHlwaEJ1ZmZlci5zYXZlT2Zmc2V0c0luU3RyaW5nKCk7CiAg
ICAgZmxvYXQgZGVsdGFYOwotICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnQ6OkNvbXBsZXgp
CisgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gRm9udENhc2NhZGU6OkNvbXBsZXgpCiAgICAgICAg
IGRlbHRhWCA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIDAsIHJ1bi5s
ZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwogICAgIGVsc2UKICAgICAgICAgZGVsdGFYID0gZ2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIDAsIHJ1bi5sZW5ndGgoKSwgZ2x5cGhC
dWZmZXIpOwpAQCAtNTkwLDcgKzU5MCw3IEBAIERhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRl
cnNlY3Rpb25zV2kKIH0KICNlbmRpZgogCi1ib29sIEZvbnQ6OnByaW1hcnlGb250RGF0YUlzU3lz
dGVtRm9udCgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGFJc1N5c3Rl
bUZvbnQoKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+IDEwOTAKICAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250RGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ds
eXBoUGFnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNp
bmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgogI2lmICFQTEFURk9STShJT1MpCkBAIC00Nyw3ICs0Nyw3IEBA
IHN0YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGEKICAgICBpZiAoZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLndpZHRoVmFyaWFudCgpICE9IFJlZ3VsYXJXaWR0aCB8fCBmb250
RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAgICAvLyBJZGVvZ3JhcGhzIGRvbid0
IGhhdmUgYSB2ZXJ0aWNhbCB2YXJpYW50IG9yIHdpZHRoIHZhcmlhbnRzLgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICghRm9udDo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIGlmICghRm9u
dENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltpXSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZp
c2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2lt
cGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbXBv
cnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKICNpbXBvcnQg
IkZsb2F0UmVjdC5oIgotI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisj
aW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1w
b3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgi
CiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiUGFnZS5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbQkocmV2aXNpb24gMTc4NDE4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJD
b3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRl
LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJDb3Jl
VGhyZWFkLmgiCiAjaW1wb3J0IDxJbWFnZUlPL0ltYWdlSU8uaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAjaW1wb3J0ICJC
aXRtYXBJbWFnZS5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgi
CiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgpA
QCAtMTU3LDEwICsxNTcsMTAgQEAgY29uc3QgZmxvYXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9IDEw
OwogCiAvLyBGSVhNRSAtIHdlIHNob3VsZCBtb3ZlIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBO
U1N0cmluZyBleHRyYXMgdG8gV2ViQ29yZQogICAgIAotc3RhdGljIEZvbnQmIGZvbnRGcm9tTlNG
b250KE5TRm9udCAqZm9udCkKK3N0YXRpYyBGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQoTlNG
b250ICpmb250KQogewogICAgIHN0YXRpYyBOU0ZvbnQgKmN1cnJlbnRGb250OwotICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChGb250LCBjdXJyZW50UmVuZGVyZXIsICgpKTsKKyAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRm9udENhc2NhZGUsIGN1cnJlbnRSZW5k
ZXJlciwgKCkpOwogICAgIAogICAgIGlmIChbZm9udCBpc0VxdWFsOmN1cnJlbnRGb250XSkKICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJlcjsKQEAgLTE2OSw3ICsxNjksNyBAQCBzdGF0aWMg
Rm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250CiAgICAgY3VycmVudEZvbnQgPSBmb250
OwogICAgIENGUmV0YWluKGN1cnJlbnRGb250KTsKICAgICBGb250UGxhdGZvcm1EYXRhIGYoZm9u
dCwgW2ZvbnQgcG9pbnRTaXplXSk7Ci0gICAgY3VycmVudFJlbmRlcmVyID0gRm9udChmLCAhW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAg
ICBjdXJyZW50UmVuZGVyZXIgPSBGb250Q2FzY2FkZShmLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICByZXR1cm4gY3VycmVudFJl
bmRlcmVyOwogfQogCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIGZsb2F0IHdpZHRoV2l0aEZv
bnQoTlNTdHJpbmcgKnN0cgogICAgIFtzdHJpbmcgZ2V0Q2hhcmFjdGVyczpidWZmZXIuZGF0YSgp
XTsKICAgICAKICAgICBpZiAoY2FuVXNlRmFzdFJlbmRlcmVyKGJ1ZmZlci5kYXRhKCksIGxlbmd0
aCkpIHsKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtm
b250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNE
cmF3aW5nVG9TY3JlZW5dKTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBs
YXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgICAgIFRleHRSdW4gcnVu
KGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNr
cygpOwogICAgICAgICByZXR1cm4gd2ViQ29yZUZvbnQud2lkdGgocnVuKTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3QXRQb2ludChOU1N0cmluZyAqc3RyaW5nCiAgICAgICAg
IGlmICghZmxpcHBlZCkKICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwg
MSwgLTEpOwogICAgICAgICAgICAgCi0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRm
b3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9T
Y3JlZW5dLCBBbnRpYWxpYXNlZCk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNvcmVGb250KEZv
bnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbbnNDb250ZXh0IGlzRHJh
d2luZ1RvU2NyZWVuXSwgQW50aWFsaWFzZWQpOwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIu
ZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHJldmlzaW9uIDE3ODQx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwxMyArNDEsMTMgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgaW50IGJh
c2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKIAotICAgIHZpcnR1
YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Jiwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24gY29u
dHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZhY3Rv
cikgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJv
bFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwg
TGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIExlbmd0aEJveCBj
b250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKLSAgICB2aXJ0dWFsIExlbmd0aEJv
eCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3Ro
Qm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQ
YXJ0IHBhcnQpIGNvbnN0IHsgcmV0dXJuIHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQ7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkocmV2aXNpb24gMTc4NDE4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgVGhlbWUqIHBsYXRmb3JtVGhlbWUoKQogCiAvLyBIZWxw
ZXIgZnVuY3Rpb25zIHVzZWQgYnkgYSBidW5jaCBvZiBkaWZmZXJlbnQgY29udHJvbCBwYXJ0cy4K
IAotc3RhdGljIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnQmIGZv
bnQpCitzdGF0aWMgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKICAg
ICBpZiAoZm9udFNpemUgPj0gMTYpCkBAIC0xNzIsNyArMTcyLDcgQEAgc3RhdGljIExlbmd0aFNp
emUgc2l6ZUZyb21OU0NvbnRyb2xTaXplKAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBMZW5ndGhTaXplIHNpemVGcm9tRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6OmFycmF5PEludFNp
emUsIDM+JiBzaXplcykKK3N0YXRpYyBMZW5ndGhTaXplIHNpemVGcm9tRm9udChjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZh
Y3RvciwgY29uc3Qgc3RkOjphcnJheTxJbnRTaXplLCAzPiYgc2l6ZXMpCiB7CiAgICAgcmV0dXJu
IHNpemVGcm9tTlNDb250cm9sU2l6ZShjb250cm9sU2l6ZUZvckZvbnQoZm9udCksIHpvb21lZFNp
emUsIHpvb21GYWN0b3IsIHNpemVzKTsKIH0KQEAgLTI5Myw3ICsyOTMsNyBAQCBzdGF0aWMgY29u
c3QgaW50KiBjaGVja2JveE1hcmdpbnMoTlNDb250CiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJv
bFNpemVdOwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6ZSBjaGVja2JveFNpemUoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikKK3N0
YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikKIHsKICAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgogICAgIGlmICghem9vbWVkU2l6ZS53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKQEAgLTMy
Myw3ICszMjMsNyBAQCBzdGF0aWMgY29uc3QgaW50KiByYWRpb01hcmdpbnMoTlNDb250cm9sCiAg
ICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6ZSBy
YWRpb1NpemUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwg
ZmxvYXQgem9vbUZhY3RvcikKK3N0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZh
Y3RvcikKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZp
ZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghem9vbWVkU2l6ZS53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKQEAgLTU5Myw3ICs1OTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxJ
bnRTaXplLCAzPiYgc3RlCiAKIC8vIFdlIGRvbid0IHVzZSBjb250cm9sU2l6ZUZvckZvbnQoKSBm
b3Igc3RlcHBlcnMgYmVjYXVzZSB0aGUgc3RlcHBlciBoZWlnaHQKIC8vIHNob3VsZCBiZSBlcXVh
bCB0byBvciBsZXNzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdGV4dCBmaWVsZCBoZWlnaHQsCi1z
dGF0aWMgTlNDb250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnQm
IGZvbnQpCitzdGF0aWMgTlNDb250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JGb250KGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4ZWxT
aXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDE4KQpAQCAtNjczLDcgKzY3Myw3IEBAIGludCBU
aGVtZU1hYzo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQKICAgICByZXR1cm4gVGhlbWU6OmJh
c2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KHBhcnQpOwogfQogCi1Gb250RGVzY3JpcHRpb24gVGhl
bWVNYWM6OmNvbnRyb2xGb250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0CitGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRyb2xG
b250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIFB1c2hC
dXR0b25QYXJ0OiB7CkBAIC02OTEsNyArNjkxLDcgQEAgRm9udERlc2NyaXB0aW9uIFRoZW1lTWFj
Ojpjb250cm9sRm9udChDbwogICAgIH0KIH0KIAotTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJv
bFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6
ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aFNpemUgVGhlbWVN
YWM6OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAog
ewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKQEAgLTcx
MCw3ICs3MTAsNyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sCiAg
ICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xl
bmd0aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgpAQCAtNzI3LDcg
KzcyNyw3IEBAIExlbmd0aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZSgKICAgICB9
CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0
LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKK0xlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm9s
UGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29t
ZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAg
ICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKQEAgLTczOSw3ICs3MzksNyBAQCBMZW5ndGhC
b3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvCiAgICAgfQogfQogCi1MZW5ndGhCb3gg
VGhlbWVNYWM6OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAor
TGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1h
Yy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dp
ZGdldE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9ydCAiQ2hy
b21lLmgiCiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0
ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNp
bXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCShyZXZpc2lv
biAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogI2lmIFBMQVRGT1JNKElPUykKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKICNl
bmRpZgogCiBjbGFzcyBMb2NhbGUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHJldmlzaW9uIDE3ODQxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIExvY2FsaXplZERhdGVD
YWNoZV9oCiAKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgotI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpA
QCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiBjbGFzcyBMb2NhbGl6ZWREYXRlQ2FjaGUgewogcHVi
bGljOgogICAgIE5TRGF0ZUZvcm1hdHRlciAqZm9ybWF0dGVyRm9yRGF0ZVR5cGUoRGF0ZUNvbXBv
bmVudHM6OlR5cGUpOwotICAgIGZsb2F0IG1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21w
b25lbnRzOjpUeXBlLCBjb25zdCBGb250JiwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmKTsKKyAg
ICBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwgY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOwogICAgIHZvaWQgbG9j
YWxlQ2hhbmdlZCgpOwogCiBwcml2YXRlOgpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIGZsb2F0PiBEYXRlVHlwZU1heFdpZHRoTWFwOwogICAgIERh
dGVUeXBlRm9ybWF0dGVyTWFwIG1fZm9ybWF0dGVyTWFwOwogICAgIERhdGVUeXBlTWF4V2lkdGhN
YXAgbV9tYXhXaWR0aE1hcDsKLSAgICBGb250IG1fZm9udDsKKyAgICBGb250Q2FzY2FkZSBtX2Zv
bnQ7CiAKICAgICBmcmllbmQgTG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2FjaGUo
KTsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8TG9jYWxpemVkRGF0ZUNhY2hlPjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWRE
YXRlQ2FjaGUubW0JKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2FjaGUu
aCIKIAotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQg
IlRleHRSdW4uaCIKICNpbXBvcnQgPG1hdGguaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CkBAIC01Miw3ICs1Miw2IEBAIHN0YXRpYyB2b2lkIF9sb2NhbGVDaGFuZ2VkKENGTm90aWZpY2F0
aW8KIH0KIAogTG9jYWxpemVkRGF0ZUNhY2hlOjpMb2NhbGl6ZWREYXRlQ2FjaGUoKQotICAgIDog
bV9mb250KEZvbnQoKSkKIHsKICAgICAvLyBMaXN0ZW4gdG8gQ0YgTm90aWZpY2F0aW9ucyBmb3Ig
bG9jYWxlIGNoYW5nZSwgYW5kIGNsZWFyIHRoZSBjYWNoZSB3aGVuIGl0IGRvZXMuCiAgICAgQ0ZO
b3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExvY2Fs
Q2VudGVyKCksICh2b2lkKil0aGlzLCBfbG9jYWxlQ2hhbmdlZCwKQEAgLTg0LDE0ICs4MywxNCBA
QCBOU0RhdGVGb3JtYXR0ZXIgKkxvY2FsaXplZERhdGVDYWNoZTo6Zm9yCiAgICAgcmV0dXJuIGRh
dGVGb3JtYXR0ZXI7CiB9CiAKLWZsb2F0IExvY2FsaXplZERhdGVDYWNoZTo6bWF4aW11bVdpZHRo
Rm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSwgY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgTWVhc3VyZVRleHRDbGllbnQmIG1lYXN1cmVyKQorZmxvYXQgTG9jYWxpemVkRGF0ZUNh
Y2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlLCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmIG1lYXN1cmVy
KQogewogICAgIGludCBrZXkgPSBzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpOwogICAgIGlmIChtX2Zv
bnQgPT0gZm9udCkgewogICAgICAgICBpZiAobV9tYXhXaWR0aE1hcC5jb250YWlucyhrZXkpKQog
ICAgICAgICAgICAgcmV0dXJuIG1fbWF4V2lkdGhNYXAuZ2V0KGtleSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgbV9mb250ID0gRm9udChmb250KTsKKyAgICAgICAgbV9mb250ID0gRm9udENhc2Nh
ZGUoZm9udCk7CiAgICAgICAgIG1fbWF4V2lkdGhNYXAuY2xlYXIoKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gMTc4NDE4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgIkVsbGlwc2lzQm94LmgiCiAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQg
RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgc2V0U2hhZG93ID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsK
KyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwog
ICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkg
ewogICAgICAgICBwYWludFNlbGVjdGlvbihjb250ZXh0LCBwYWludE9mZnNldCwgbGluZVN0eWxl
LCBmb250KTsKIApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50TWFy
a3VwQm94KFBhaW50SW4KIEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogewog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAg
ICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGNvbnN0IFJvb3RJbmxp
bmVCb3gmIHJvb3RCb3ggPSByb290KCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5
cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCksIHkoKSArIHJvb3RCb3gu
c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpLCAwLCByb290Qm94LnNlbGVj
dGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7CkBAIC0xMTksNyArMTE5LDcg
QEAgSW50UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiAgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiB9CiAKLXZvaWQgRWxsaXBzaXNCb3g6OnBhaW50
U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2
b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9
IGJsb2NrRmxvdygpLnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludE1hcmt1cEJveChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIGludCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2hlaWdodDsgfQogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3Rh
dGU7IH0KLSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBw
YWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0
IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmKTsKICAgICBJbmxpbmVCb3gqIG1hcmt1
cEJveCgpIGNvbnN0OwogCiAgICAgYm9vbCBtX3Nob3VsZFBhaW50TWFya3VwQm94OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc4
NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9M
aW5lKElubGluZUJveCoKICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2Ft
ZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5i
ZWhhdmVzTGlrZVRleHQoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLmlz
TGluZUJyZWFrKCkgfHwgY2hpbGQtPnJlbmRlcmVyKCkucGFyZW50KCkgIT0gJnJlbmRlcmVyKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygp
Lmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udCgpLmZv
bnRNZXRyaWNzKCkpCisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hp
bGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICAgICAgICAg
IHx8IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKQog
ICAgICAgICAgICAgICAgICAgICB8fCAocGFyZW50U3R5bGUudmVydGljYWxBbGlnbigpICE9IEJB
U0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3goKSkgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFu
dHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CkBAIC0xMzgsNyArMTM4LDcg
QEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KgogICAgICAgICAgICAg
ICAgIGF1dG8mIGNoaWxkRmxvd0JveCA9IGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpjaGlsZCk7
CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGNoaWxkJ3MgYml0LCBhbmQgdGhlbiBhbHNv
IGNoZWNrIGZvciBkaWZmZXJlbmNlcyBpbiBmb250LCBsaW5lLWhlaWdodCwgdmVydGljYWwtYWxp
Z24KICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkRmxvd0JveC5kZXNjZW5kYW50c0hhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0
eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5l
R2FwKGNoaWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgICAgICAgICAgICAg
IHx8ICFwYXJlbnRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2Fs
QXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRy
aWNzKCkpCiAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQoKSAh
PSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKQogICAgICAgICAgICAgICAgICAgICB8fCAocGFyZW50
U3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3goKSkg
fHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAgICAg
ICAgICAgfHwgY2hpbGRTdHlsZS5oYXNCb3JkZXIoKSB8fCBjaGlsZFN0eWxlLmhhc1BhZGRpbmco
KSB8fCBjaGlsZFN0eWxlLmhhc1RleHRDb21iaW5lKCkpCkBAIC0zODgsNyArMzg4LDcgQEAgZmxv
YXQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hSYW5nZUluSW5saQogICAgICAgICAgICAgUmVuZGVy
VGV4dCYgcmVuZGVyVGV4dCA9IHRleHRCb3gucmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmIChy
ZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGlmIChuZWVkc1dvcmRT
cGFjaW5nICYmIGlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdCh0ZXh0Qm94
LnN0YXJ0KCkpKSkKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gdGV4dEJveC5s
aW5lU3R5bGUoKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbExlZnQgKz0gdGV4dEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5n
KCk7CiAgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5l
KHJlbmRlclRleHQuY2hhcmFjdGVyQXQodGV4dEJveC5lbmQoKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGV4dEJveC5zZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdCk7CkBAIC00NDks
NyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogCiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAg
IGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigp
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHlsZS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgfHwg
bGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlw
aHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAg
LTQ2MCw3ICs0NjAsNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNC
CiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKS5yZXF1aXJl
c0lkZW9ncmFwaGljQmFzZWxpbmUodGV4dEJveERhdGFNYXApKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5saW5l
U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAg
ICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKQEAgLTg3Myw3ICs4NzMsNyBAQCBpbmxpbmUg
dm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzCiAKICAgICBib29sIGVtcGhhc2lzTWFy
a0lzQWJvdmU7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVt
cGhhc2lzTWFya05vbmUgJiYgdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxp
bmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSkpIHsKLSAgICAgICAgaW50IGVtcGhhc2lzTWFy
a0hlaWdodCA9IGxpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGxpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0
ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGxpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICBpZiAoZW1waGFzaXNNYXJrSXNBYm92
ZSA9PSAhbGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAg
IHRvcEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1pbih0b3BHbHlwaE92ZXJmbG93LCAtZW1waGFzaXNN
YXJrSGVpZ2h0KTsKICAgICAgICAgZWxzZQpAQCAtODgyLDcgKzg4Miw3IEBAIGlubGluZSB2b2lk
IElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXMKIAogICAgIC8vIElmIGxldHRlci1zcGFjaW5n
IGlzIG5lZ2F0aXZlLCB3ZSBzaG91bGQgZmFjdG9yIHRoYXQgaW50byByaWdodCBsYXlvdXQgb3Zl
cmZsb3cuIChFdmVuIGluIFJUTCwgbGV0dGVyLXNwYWNpbmcgaXMKICAgICAvLyBhcHBsaWVkIHRv
IHRoZSByaWdodCwgc28gdGhpcyBpcyBub3QgYW4gaXNzdWUgd2l0aCBsZWZ0IG92ZXJmbG93Lgot
ICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5mb250
KCkubGV0dGVyU3BhY2luZygpKTsKKyAgICByaWdodEdseXBoT3ZlcmZsb3cgLT0gc3RkOjptaW4o
MCwgKGludClsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5sZXR0ZXJTcGFjaW5nKCkpOwogCiAgICAg
TGF5b3V0VW5pdCB0ZXh0U2hhZG93TG9naWNhbFRvcDsKICAgICBMYXlvdXRVbml0IHRleHRTaGFk
b3dMb2dpY2FsQm90dG9tOwpAQCAtMTUzNCwxMCArMTUzNCwxMCBAQCBMYXlvdXRVbml0IElubGlu
ZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5uCiAgICAgICAgICAgICBib29sIGVtcGhhc2lzTWFya0lz
QWJvdmU7CiAgICAgICAgICAgICBpZiAoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygp
ICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYmIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpjaGls
ZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNN
YXJrSXNBYm92ZSkgJiYgZW1waGFzaXNNYXJrSXNBYm92ZSkgewogICAgICAgICAgICAgICAgIGlm
ICghY2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkg
LSBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxl
LnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCB0b3BP
ZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5mb250
Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNN
YXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChyZXN1
bHQsIGFsbG93ZWRQb3NpdGlvbiAtIHRvcE9mRW1waGFzaXNNYXJrKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9tT2ZFbXBoYXNpc01hcmsg
PSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lz
TWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgICAgICBpbnQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNh
bEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWln
aHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAt
IGFsbG93ZWRQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MTU4MywxMCArMTU4MywxMCBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRl
ckFuCiAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqY2hpbGQpLmVtcGhhc2lz
TWFya0V4aXN0c0FuZElzQWJvdmUoY2hpbGRMaW5lU3R5bGUsIGVtcGhhc2lzTWFya0lzQWJvdmUp
OwogICAgICAgICAgICAgaWYgKGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBU
ZXh0RW1waGFzaXNNYXJrTm9uZSAmJiAhZW1waGFzaXNNYXJrSXNBYm92ZSkgewogICAgICAgICAg
ICAgICAgIGlmICghY2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBj
aGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFy
a0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxv
Z2ljYWxCb3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJr
SGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYm90dG9tT2ZFbXBoYXNpc01h
cmsgLSBhbGxvd2VkUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNh
bFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExp
bmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxk
TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxl
LnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0gdG9wT2ZFbXBoYXNpc01hcmspOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1
LDE0ICsyNDUsMTQgQEAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qgog
ICAgIHJldHVybiBzdGF0ZTsKIH0KIAotc3RhdGljIGNvbnN0IEZvbnQmIGZvbnRUb1VzZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKQorc3RhdGlj
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250VG9Vc2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJp
bmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpKSB7CiAgICAgICAgIGNvbnN0
IGF1dG8mIHRleHRDb21iaW5lUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4o
cmVuZGVyZXIpOwogICAgICAgICBpZiAodGV4dENvbWJpbmVSZW5kZXJlci5pc0NvbWJpbmVkKCkp
CiAgICAgICAgICAgICByZXR1cm4gdGV4dENvbWJpbmVSZW5kZXJlci50ZXh0Q29tYmluZUZvbnQo
KTsKICAgICB9Ci0gICAgcmV0dXJuIHN0eWxlLmZvbnQoKTsKKyAgICByZXR1cm4gc3R5bGUuZm9u
dENhc2NhZGUoKTsKIH0KIAogTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlv
blJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdApAQCAtMjY2LDcgKzI2Niw3IEBA
IExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb24KICAgICBMYXlvdXRVbml0
IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwogICAgIExheW91dFVuaXQgc2Vs
ZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogCiAgICAgU3Ry
aW5nIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBv
cyA9PSBtX2xlbiAmJiBoYXNIeXBoZW4oKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIHNlbGVjdGlvblBhaW50U3R5
bGUgPSB0ZXh0UGFpbnRTdHlsZTsKIAogICAgIC8vIFNldCBvdXIgZm9udC4KLSAgICBjb25zdCBG
b250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKICAg
ICAvLyAxLiBQYWludCBiYWNrZ3JvdW5kcyBiZWhpbmQgdGV4dCBpZiBuZWVkZWQuIEV4YW1wbGVz
IG9mIHN1Y2ggYmFja2dyb3VuZHMgaW5jbHVkZSBzZWxlY3Rpb24KICAgICAvLyBhbmQgY29tcG9z
aXRpb24gdW5kZXJsaW5lcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VT
ZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VUZXh0Q2xpcCAmJiAhaXNQ
cmludGluZykgewpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2VsZWN0
aW9uU3RhcnRFbmQoaW4KICAgICBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgKGlu
dCltX2xlbik7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQordm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQogewogI2lmIEVOQUJMRShU
RVhUX1NFTEVDVElPTikKICAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCkBAIC03
MzcsNyArNzM3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAog
I2VuZGlmCiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0UG9z
LCBpbnQgZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50
IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQogewogICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0OwogICAg
IGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwpAQCAtMTA1OCw3ICsx
MDU4LDcgQEAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaQogICAgIH0K
IH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYg
Zm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFy
a2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgZ3JhbW1hcikKIHsKICAgICAvLyBOZXZl
ciBwcmludCBzcGVsbGluZy9ncmFtbWFyIG1hcmtlcnMgKDUzMjc4ODcpCiAgICAgaWYgKHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpKQpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKAogICAgIGNvbnRleHQuZHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3Jp
Z2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJUeXBl
KG1hcmtlci50eXBlKCkpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRj
aE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1h
dGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgTGF5b3V0VW5pdCBzZWxl
Y3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsKIApAQCAtMTE1OSw3ICsxMTU5
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcgogICAgIH0KIH0K
IAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250JiBmb250KQordm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxh
Y2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICAvLyBSZXBsYWNl
bWVudCBtYXJrZXJzIGFyZSBub3QgYWN0dWFsbHkgZHJhd24sIGJ1dCB0aGVpciByZWN0cyBuZWVk
IHRvIGJlIGNvbXB1dGVkIGZvciBoaXQgdGVzdGluZy4KICAgICBMYXlvdXRVbml0IHRvcCA9IHNl
bGVjdGlvblRvcCgpOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpj
b21wdXRlUmVjdEZvclJlcGxhYwogICAgIG1hcmtlci5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVj
dCk7CiB9CiAgICAgCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkK
K3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkKIHsKICAg
ICBpZiAoIXJlbmRlcmVyKCkudGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMyOSw3
ICsxMzI5LDcgQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsbwogICAg
ICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGxlbigpOwogCiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkp
OwogICAgIHJldHVybiBmb250Lm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4obGlu
ZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKIH0KIApAQCAtMTM0Miw3ICsxMzQyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6
cG9zaXRpb25Gb3JPZmZzZXQoaQogICAgICAgICByZXR1cm4gbG9naWNhbExlZnQoKTsKIAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBj
b25zdCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigp
KTsKICAgICBpbnQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQgLSBt
X3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9s
ZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCBy
aWdodEJlYXJpbmcgaGVyZT8KQEAgLTEzNTIsNyArMTM1Miw3IEBAIGZsb2F0IElubGluZVRleHRC
b3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGkKICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVs
c1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLm1heFgoKTsKIH0KIAotVGV4dFJ1biBJ
bmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAor
VGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFN0cmluZyogaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlcikgY29uc3QKIHsKICAgICBBU1NFUlQocmVuZGVyZXIoKS50ZXh0KCkpOwogCkBAIC0x
MzY2LDcgKzEzNjYsNyBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4o
CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIHN0cmluZywgcmVuZGVy
ZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFydFBvcywgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcik7CiB9
CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1h
eGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1RleHRS
dW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBtYXhp
bXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CiB7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4
ICsxMDQsOCBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29u
c3Q7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdDsKIAotICAgIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJp
bmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKLSAgICBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgU3RyaW5n
LCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIg
PSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1
ZmZlciA9IG51bGxwdHIpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhp
bXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25z
dDsKIAogcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMo
KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsg
fQpAQCAtMTQ4LDE3ICsxNDgsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRp
b25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0
UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRp
b25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCBzdGFydFBvcywg
aW50IGVuZFBvcyk7CisgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmLCBib29sIGJhY2tncm91bmQpOwogICAgIHZvaWQgcGFpbnRDb21wb3Np
dGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3Jp
Z2luLCBUZXh0RGVjb3JhdGlvbiwgVGV4dERlY29yYXRpb25TdHlsZSwgY29uc3QgU2hhZG93RGF0
YSosIFRleHRQYWludGVyJik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udCYsIENvbG9yIHRleHRDb2xvcik7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2Vy
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWRE
b2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGJvb2wgZ3Jh
bW1hcik7Ci0gICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVy
U3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIENvbG9yIHRleHRDb2xvcik7CisgICAgdm9pZCBw
YWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmLCBib29sIGdyYW1tYXIpOworICAgIHZvaWQgcGFpbnRUZXh0TWF0Y2hN
YXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5k
ZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2Fk
ZSYpOwogCi0gICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2
b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtl
ciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIFRleHRS
dW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE3
ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMjUsNyArMjMyNSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFk
anVzdExvZ2ljYWxMZWYKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKICAgICAvLyBGSVhNRTogU2hv
dWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRv
ZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdy
aWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOworICAg
IGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAg
ICAgICAgIHJldHVybiBsZWZ0OwogCkBAIC0yMzY1LDcgKzIzNjUsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmlnCiAgICAgICAgIHJldHVybiByaWdodDsKIAogICAg
IC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcgYXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0
ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUgZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFy
V2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hh
cldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKICAgICBpZiAoIW1h
eENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCkBAIC0zMDAzLDcgKzMwMDMsNyBA
QCBzdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxlRm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgIG5ld0Zv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOwogICAgICAg
ICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOwog
ICAgICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlv
bik7Ci0gICAgICAgIHBzZXVkb1N0eWxlLT5mb250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250
KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUoKS51
cGRhdGUocHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAg
ICAKICAgICAgICAgaW50IGRlc2lyZWRDYXBIZWlnaHQgPSAocHNldWRvU3R5bGUtPmluaXRpYWxM
ZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250
TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAgICBpbnQgYWN0dWFsQ2FwSGVpZ2h0ID0gcHNl
dWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CkBAIC0zMDEyLDcgKzMwMTIsNyBA
QCBzdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxlRm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgICAgICBu
ZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpIC0gMSk7CiAgICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAtMSk7CiAgICAgICAg
ICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
Ci0gICAgICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udCgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9u
dCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAg
ICAgICAgICAgICBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3MoKS5j
YXBIZWlnaHQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM2OTMsNyArMzY5Myw3IEBAIGNvbnN0
IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY28KIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitzdGF0aWMgaW5s
aW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
biA9IExUUjsKICAgICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmlu
ZygpID09IFZpc3VhbE9yZGVyOwpAQCAtMzcwOCw3ICszNzA4LDcgQEAgc3RhdGljIGlubGluZSBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwo
UmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQor
c3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRS
dW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewog
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IExUUjsKICAgICBib29sIGRpcmVjdGlv
bmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyOwpAQCAtMzcy
NywyNCArMzcyNywyNCBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bklu
CiAgICAgcmV0dXJuIHJ1bjsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRS
dW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAg
IHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgY2hhcmFjdGVy
cywgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uKQogewogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9u
dCwgY2hhcmFjdGVycywgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBp
ZiAodGV4dC0+aXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJu
YWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFjdGVyczgoKSwgdGV4dC0+dGV4dExlbmd0aCgp
LCBzdHlsZSwgZXhwYW5zaW9uKTsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFs
KGNvbnRleHQsIGZvbnQsIHRleHQtPmNoYXJhY3RlcnMxNigpLCB0ZXh0LT50ZXh0TGVuZ3RoKCks
IHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVu
ZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQor
VGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBU
ZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgQVNTRVJUKG9mZnNl
dCArIGxlbmd0aCA8PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpOwogICAgIGlmICh0ZXh0LT5pczhCaXQo
KSkKQEAgLTM3NTIsNyArMzc1Miw3IEBAIFRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4oUmUKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZv
bnQsIHRleHQtPmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCBleHBhbnNp
b24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMjIgKzIwMiwy
MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvYmotPmlzRmxvYXRpbmcoKSB8fCAob2JqLT5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhb2JqLT5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5
SW5saW5lVHlwZSgpICYmICFvYmotPmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwK
KyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBSZW5kZXJTdHlsZSYs
CiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHRSdW5G
bGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5k
ZXJUZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFu
c2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46
OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5kZXJU
ZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxl
JiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1
bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwg
VGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBj
b25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0
IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBz
dGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4
dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBh
bnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRl
eHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAg
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFu
c2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQm
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUm
LAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250
ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2
aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExl
YWRpbmdFeHBhbnNpb24pOwogICAgIAogICAgIExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0KCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NDcsNyArMzk0Nyw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzdHJpcFRyYWlsaW5nU3BhY2UoZmwKICAgICAgICAgLy8gQ29sbGFwc2Ug
YXdheSB0aGUgdHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgogICAgICAgICBS
ZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnRyYWlsaW5nU3Bh
Y2VDaGlsZCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwotICAgICAgICBjb25z
dCBGb250JiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgpLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMg
aWdub3JlcyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHJl
bmRlclRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZp
cnN0LWxpbmUuCiAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHJlbmRl
clRleHQuc3R5bGUoKSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0aCArIGZvbnQu
d29yZFNwYWNpbmcoKTsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBo
T3ZlcmZsb3c7CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlKCpyZW5kZXJlci0+
cGFyZW50KCksIGxpbmVJbmZvKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnRDYXNjYWRlKCk7
CiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgZ2x5cGggb3ZlcmZsb3cgaWYgdGhlIGJsb2NrJ3MgbGlu
ZS1ib3gtY29udGFpbiB2YWx1ZSBpcyAiZ2x5cGhzIi4KICAgICBpZiAobGluZUJveC0+Zml0c1Rv
R2x5cGhzKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qgc3RpY2sgb3V0IG9mIHRoZSByb290
IGxpbmUncyBmb250IGJveCwgdGhlbiBkb24ndCBib3RoZXIgY29tcHV0aW5nIG91ciBnbHlwaCBv
dmVyZmxvdy4gVGhpcyBvcHRpbWl6YXRpb24KQEAgLTUwNSw3ICs1MDUsNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICAgICAgICAgICZ3b3Jk
TWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cywgJm92ZXJmbG93KTsKICAgICAgICAgICAgICAgICBV
Q2hhciBjID0gcmVuZGVyZXItPmNoYXJhY3RlckF0KHdvcmRNZWFzdXJlbWVudC5zdGFydE9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHdvcmRMZW5ndGggPT0gMSAmJiAoYyA9
PSAnICcgfHwgYyA9PSAnXHQnKSkKLSAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0aCAr
PSByZW5kZXJlci0+c3R5bGUoKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWVhc3VyZWRXaWR0aCArPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLndv
cmRTcGFjaW5nKCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtZWFzdXJl
ZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAgICAgICAgICAgIGlmICghd29yZE1l
YXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CkBAIC03NDMsMTQgKzc0MywxNCBA
QCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAgICAgICAgICAgICBp
ZiAodGV4dEFsaWduID09IEpVU1RJRlkgJiYgcnVuICE9IHRyYWlsaW5nU3BhY2VSdW4pIHsKICAg
ICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCiAgICAgICAgICAgICAgICAgICAg
IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpydW4tPmJveCgpKS5zZXRDYW5IYXZlTGVhZGluZ0V4
cGFuc2lvbih0cnVlKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5S
dW4gPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmll
dyhydW4tPm1fc3RhcnQsIHJ1bi0+bV9zdG9wKSwgcnVuLT5ib3goKS0+ZGlyZWN0aW9uKCksIGlz
QWZ0ZXJFeHBhbnNpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJ
blJ1biA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQu
c3RyaW5nVmlldyhydW4tPm1fc3RhcnQsIHJ1bi0+bV9zdG9wKSwgcnVuLT5ib3goKS0+ZGlyZWN0
aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMuYXBwZW5kKG9wcG9ydHVuaXRpZXNJblJ1bik7CiAgICAgICAgICAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBvcHBvcnR1bml0aWVzSW5SdW47CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChpbnQgbGVuZ3RoID0gcmVuZGVyVGV4dC50ZXh0TGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXJ1bi0+bV9zdGFydCAmJiBuZWVkc1dvcmRTcGFj
aW5nICYmIGlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3Rh
cnQpKSkKLSAgICAgICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxl
KCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5lSW5mbykuZm9udCgpLndvcmRTcGFjaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGxpbmVTdHlsZSgqcmVuZGVy
VGV4dC5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAg
ICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVy
VGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3RvcCAtIDEpKSAmJiBydW4tPm1fc3RvcCA9PSBsZW5n
dGg7CiAgICAgICAgICAgICB9CiAKQEAgLTc2OCw3ICs3NjgsNyBAQCBCaWRpUnVuKiBSZW5kZXJC
bG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93
bmNhc3Q8SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNp
b24odHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZEp1c3RpZmllZFJ1
YnkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRv
d25jYXN0PFJlbmRlclRleHQ+KGxlYWZDaGlsZC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBGb250OjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVj
dGlvbigpLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigpLCBp
c0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMuYXBwZW5kKG9wcG9ydHVuaXRpZXNJblJ1bik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMTkwNyw5ICsxOTA3LDkgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmNoZWNrTGluZXNGb3JUZXh0TwogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGgg
b2YgdGhlIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCiAgICAgLy8gRklYTUU6IENT
UzMgc2F5cyB0aGlzIGlzIGNvbmZpZ3VyYWJsZSwgYWxzbyBuZWVkIHRvIHVzZSAweDAwMkUgKEZV
TEwgU1RPUCkgaWYgaG9yaXpvbnRhbCBlbGxpcHNpcyBpcyAibm90IHJlbmRlcmFibGUiCi0gICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzU3RyLCAoJmhvcml6b250YWxFbGxpcHNp
cywgMSkpOwotICAgIGNvbnN0IEZvbnQmIGZpcnN0TGluZUZvbnQgPSBmaXJzdExpbmVTdHlsZSgp
LmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGlu
ZVN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICBmbG9hdCBmaXJzdExpbmVFbGxpcHNpc1dpZHRo
ID0gZmlyc3RMaW5lRm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZpcnN0TGluZUZv
bnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIGZpcnN0TGluZVN0eWxlKCkpKTsKICAgICBmbG9h
dCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5lRm9udCkgPyBmaXJzdExpbmVFbGxp
cHNpc1dpZHRoIDogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jp
em9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OnNldFJlbmRlcmVk
VGV4dCgKICAgICBtX25lZWRzRm9udFVwZGF0ZSA9IHRydWU7CiB9CiAKLWZsb2F0IFJlbmRlckNv
bWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZv
bnQmIGZvbnQsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxv
YXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93KSBjb25zdAogewogICAgIGlmIChtX2lzQ29tYmluZWQpCiAgICAgICAgIHJldHVybiBm
b250LnNpemUoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpj
b21iaW5lVGV4dCgpCiAgICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGggPSB3aWR0aCgwLCB0ZXh0
TGVuZ3RoKCksIG9yaWdpbmFsRm9udCgpLCAwLCBudWxscHRyLCAmZ2x5cGhPdmVyZmxvdyk7CiAg
ICAgbV9pc0NvbWJpbmVkID0gY29tYmluZWRUZXh0V2lkdGggPD0gZW1XaWR0aDsKICAgICAKLSAg
ICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IHN0eWxlKCkuZm9udCgpLmZvbnRTZWxlY3Rv
cigpOworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmZvbnRTZWxlY3RvcigpOwogCiAgICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgc2hv
dWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZvbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRl
c2NyaXB0aW9uKTsgLy8gTmVlZCB0byBjaGFuZ2UgZm9udCBvcmllbnRhdGlvbiB0byBob3Jpem9u
dGFsLgpAQCAtMTE3LDcgKzExNyw4IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVU
ZXh0KCkKICAgICAgICAgc3RhdGljIGNvbnN0IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50
c1tdID0geyBIYWxmV2lkdGgsIFRoaXJkV2lkdGgsIFF1YXJ0ZXJXaWR0aCB9OwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMCA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHdpZHRoVmFyaWFudHMpIDsg
KytpKSB7CiAgICAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRXaWR0aFZhcmlhbnQod2lkdGhWYXJp
YW50c1tpXSk7Ci0gICAgICAgICAgICBGb250IGNvbXByZXNzZWRGb250ID0gRm9udChkZXNjcmlw
dGlvbiwgc3R5bGUoKS5mb250KCkubGV0dGVyU3BhY2luZygpLCBzdHlsZSgpLmZvbnQoKS53b3Jk
U3BhY2luZygpKTsKKworICAgICAgICAgICAgRm9udENhc2NhZGUgY29tcHJlc3NlZEZvbnQoZGVz
Y3JpcHRpb24sIHN0eWxlKCkuZm9udENhc2NhZGUoKS5sZXR0ZXJTcGFjaW5nKCksIHN0eWxlKCku
Zm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpKTsKICAgICAgICAgICAgIGNvbXByZXNzZWRGb250
LnVwZGF0ZShmb250U2VsZWN0b3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmbG9hdCBy
dW5XaWR0aCA9IFJlbmRlclRleHQ6OndpZHRoKDAsIHRleHRMZW5ndGgoKSwgY29tcHJlc3NlZEZv
bnQsIDAsIG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKQEAgLTEzNiw3ICsxMzcsNyBAQCB2b2lk
IFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgICAgIHNob3VsZFVwZGF0ZUZv
bnQgPSBtX2NvbWJpbmVGb250U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihvcmlnaW5hbEZvbnQo
KS5mb250RGVzY3JpcHRpb24oKSk7CiAKICAgICBpZiAoc2hvdWxkVXBkYXRlRm9udCkKLSAgICAg
ICAgbV9jb21iaW5lRm9udFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAg
ICAgIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9y
KTsKIAogICAgIGlmIChtX2lzQ29tYmluZWQpIHsKICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJTdHJpbmcsICgm
b2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBSZW5kZXJDb21iaW5lVGV4dF9oCiAjZGVmaW5lIFJl
bmRlckNvbWJpbmVUZXh0X2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMzgsMTUgKzM4LDE1IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkanVzdFRleHRPcmlnaW4oRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRS
ZWN0JiBib3hSZWN0KSBjb25zdDsKICAgICB2b2lkIGdldFN0cmluZ1RvUmVuZGVyKGludCwgU3Ry
aW5nJiwgaW50JiBsZW5ndGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNDb21iaW5lZDsgfQotICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0
IEZvbnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9Ci0gICAgY29uc3QgRm9u
dCYgb3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9udCgp
OyB9Ci0gICAgY29uc3QgRm9udCYgdGV4dENvbWJpbmVGb250KCkgY29uc3QgeyByZXR1cm4gbV9j
b21iaW5lRm9udFN0eWxlLT5mb250KCk7IH0KKyAgICBmbG9hdCBjb21iaW5lZFRleHRXaWR0aChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCkgY29uc3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgb3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50
KCktPnN0eWxlKCkuZm9udENhc2NhZGUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiB0ZXh0
Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnRDYXNj
YWRlKCk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0ZTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBGb250JiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyog
PSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29tYmluZVRleHQiOyB9CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyZWRUZXh0
KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9u
IDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMYXlv
dXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveDo6YXBwbHlMCiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGVsbGlwc2lzQW5kU3BhY2VTdHIsIChlbGxpcHNpc0FuZFNwYWNlLCAyKSk7CiAg
ICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlw
c2lzU3RyLCAoJmhvcml6b250YWxFbGxpcHNpcywgMSkpOwogICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gbnVtVmlzaWJsZUxpbmVzID09IDEgPyBmaXJzdExpbmVTdHlsZSgp
IDogc3R5bGUoKTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZS5mb250KCk7
CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRl
KCk7CiAKICAgICAgICAgLy8gR2V0IGVsbGlwc2lzIHdpZHRoLCBhbmQgaWYgdGhlIGxhc3QgY2hp
bGQgaXMgYW4gYW5jaG9yLCBpdCB3aWxsIGdvIGFmdGVyIHRoZSBlbGxpcHNpcywgc28gYWRkIGlu
IGEgc3BhY2UgYW5kIHRoZSBhbmNob3Igd2lkdGggdG9vCiAgICAgICAgIExheW91dFVuaXQgdG90
YWxXaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTI5OCw3ICsyOTgsNyBAQCB2
b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkCiAgICAgRmxvYXRSZWN0IGlu
ZGljYXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxv
YXRSZWN0IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsK
ICAgICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIGlmICghZ2V0
UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkocGFpbnRPZmZzZXQsIGNvbnRlbnRSZWN0LCBpbmRpY2F0
b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBhcnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4dFdp
ZHRoKSkKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRV
bmF2YWlsYWJsCiAgICAgcmVwYWludCgpOwogfQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0
OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVj
dCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwg
Rm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdAorYm9vbCBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9h
dFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxv
YXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiBmb250LCBUZXh0UnVuJiBydW4sIGZsb2F0
JiB0ZXh0V2lkdGgpIGNvbnN0CiB7CiAgICAgYm9vbCBpbmNsdWRlc0Fycm93ID0gc2hvdWxkVW5h
dmFpbGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0b24oZG9jdW1lbnQoKSwgbV9wbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbik7CiAKQEAgLTM2MSw3ICszNjEsNyBAQCBib29sIFJlbmRlckVtYmVkZGVk
T2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250
V2VpZ2h0Qm9sZCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoZnJhbWUo
KS5zZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoMTIpOwotICAgIGZvbnQgPSBGb250KGZvbnREZXNjcmlwdGlvbiwgMCwg
MCk7CisgICAgZm9udCA9IEZvbnRDYXNjYWRlKGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAg
Zm9udC51cGRhdGUoMCk7CiAKICAgICBydW4gPSBUZXh0UnVuKG1fdW5hdmFpbGFibGVQbHVnaW5S
ZXBsYWNlbWVudFRleHQpOwpAQCAtMzkxLDcgKzM5MSw3IEBAIExheW91dFJlY3QgUmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OnVuYXZhaWwKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBG
bG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0Owot
ICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIi
LCAwKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKGdldFJlcGxhY2VtZW50VGV4dEdl
b21ldHJ5KGFjY3VtdWxhdGVkT2Zmc2V0LCBjb250ZW50UmVjdCwgaW5kaWNhdG9yUmVjdCwgcmVw
bGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkpCkBAIC01
ODIsNyArNTgyLDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJblVuYXZhaWxhYgog
ICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRl
eHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAgIEZv
bnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0
aDsKICAgICByZXR1cm4gZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoSW50UG9pbnQoKSwgY29u
dGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50VGV4dFJlY3QsIGFycm93UmVjdCwg
Zm9udCwgcnVuLCB0ZXh0V2lkdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5k
aWNhdG9ySXNQcmVzc2VkKGJvb2wpOwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5k
aWNhdG9yKGNvbnN0IE1vdXNlRXZlbnQmKSBjb25zdDsKICAgICBib29sIGlzSW5VbmF2YWlsYWJs
ZVBsdWdpbkluZGljYXRvcihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRS
ZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwgRmxv
YXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9udCYs
IFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdDsKKyAgICBib29sIGdldFJlcGxhY2Vt
ZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxv
YXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3Qm
IHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250Q2FzY2FkZSYs
IFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IHVuYXZh
aWxhYmxlUGx1Z2luSW5kaWNhdG9yQm91bmRzKGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg
KzIyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogCiAjaW5jbHVk
ZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogCiAgICAgaWYgKHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewogICAgICAgICBjb25zdCBTdHJpbmcmIGRp
c3BsYXllZEZpbGVuYW1lID0gZmlsZVRleHRWYWx1ZSgpOwotICAgICAgICBjb25zdCBGb250JiBm
b250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIGRpc3BsYXllZEZpbGVuYW1lLCBzdHlsZSgpLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBSZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVjdERpcmVj
dGlvbk92ZXJyaWRlKTsKICAgICAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwog
CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29tcHV0
ZUludAogICAgIC8vICh1c2luZyAiMCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KICAgICBj
b25zdCBVQ2hhciBjaGFyYWN0ZXIgPSAnMCc7CiAgICAgY29uc3QgU3RyaW5nIGNoYXJhY3RlckFz
U3RyaW5nID0gU3RyaW5nKCZjaGFyYWN0ZXIsIDEpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBz
dHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKTsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciB0aGlzIGNvbnN0
X2Nhc3QgYnkgbWFraW5nIGNvbnN0cnVjdFRleHRSdW4gdGFrZSBhIGNvbnN0IFJlbmRlck9iamVj
dCouCiAgICAgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqIHJlbmRlcmVyID0gY29uc3RfY2FzdDxS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KHRoaXMpOwogICAgIGZsb2F0IG1pbkRlZmF1bHRMYWJl
bFdpZHRoID0gZGVmYXVsdFdpZHRoTnVtQ2hhcnMgKiBmb250LndpZHRoKGNvbnN0cnVjdFRleHRS
dW4ocmVuZGVyZXIsIGZvbnQsIGNoYXJhY3RlckFzU3RyaW5nLCBzdHlsZSgpLCBUZXh0UnVuOjpB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CkBAIC0yNzEsOSArMjcxLDkgQEAgU3RyaW5nIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4dAogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQoKS5m
aWxlcygpKTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKGlucHV0RWxlbWVudCgpLmZpbGVz
KCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5j
YXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBz
dHlsZSgpLmZvbnQoKSwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShpbnB1dEVsZW1lbnQo
KS5kaXNwbGF5U3RyaW5nKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwogI2VuZGlmCi0gICAg
cmV0dXJuIHRoZW1lKCkuZmlsZUxpc3ROYW1lRm9yV2lkdGgoaW5wdXRFbGVtZW50KCkuZmlsZXMo
KSwgc3R5bGUoKS5mb250KCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCkubXVs
dGlwbGUoKSk7CisgICAgcmV0dXJuIHRoZW1lKCkuZmlsZUxpc3ROYW1lRm9yV2lkdGgoaW5wdXRF
bGVtZW50KCkuZmlsZXMoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLCBtYXhGaWxlbmFtZVdpZHRo
KCksIGlucHV0RWxlbWVudCgpLm11bHRpcGxlKCkpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFJlZjxS
ZW5kZXJTdHlsZT4gUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXQKICAgICBuZXdTdHlsZS5nZXQoKS5z
ZXRUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0V2lkdGgoTGVu
Z3RoKDEwMCwgUGVyY2VudCkpOwogICAgIG5ld1N0eWxlLmdldCgpLnNldEhlaWdodChMZW5ndGgo
MTAwLCBQZXJjZW50KSk7Ci0gICAgbmV3U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZSgwKTsKKyAg
ICBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShudWxscHRyKTsKICAgICByZXR1
cm4gbmV3U3R5bGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
dWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBzdGF0aWMgUmVmPFJlbmRlclN0eWxlPiBjcmVhdGVGdWxsU2NyZWVuCiAgICAgZnVsbHNj
cmVlblN0eWxlLmdldCgpLnNldFpJbmRleChJTlRfTUFYKTsKIAogICAgIGZ1bGxzY3JlZW5TdHls
ZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uKCkpOwotICAgIGZ1bGxz
Y3JlZW5TdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIGZ1bGxzY3JlZW5TdHlsZS5n
ZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShudWxscHRyKTsKIAogICAgIGZ1bGxzY3JlZW5TdHls
ZS5nZXQoKS5zZXREaXNwbGF5KEZMRVgpOwogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRK
dXN0aWZ5Q29udGVudChKdXN0aWZ5Q2VudGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBA
QAogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgpAQCAtMTkyLDcgKzE5Miw3IEBAIGJv
b2wgUmVuZGVySW1hZ2U6OnNldEltYWdlU2l6ZUZvckFsdFRleHQKIAogICAgIC8vIHdlIGhhdmUg
YW4gYWx0IGFuZCB0aGUgdXNlciBtZWFudCBpdCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50ZWQp
CiAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgIEludFNpemUgcGFkZGVkVGV4dFNpemUocGFk
ZGluZ1dpZHRoICsgc3RkOjptaW4oY2VpbGYoZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX2FsdFRleHQsIHN0eWxlKCkpKSksIG1heEFsdFRleHRX
aWR0aCksIHBhZGRpbmdIZWlnaHQgKyBzdGQ6Om1pbihmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0
KCksIG1heEFsdFRleHRIZWlnaHQpKTsKICAgICAgICAgaW1hZ2VTaXplID0gaW1hZ2VTaXplLmV4
cGFuZGVkVG8ocGFkZGVkVGV4dFNpemUpOwogICAgIH0KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lk
IFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgICAgICBpZiAoIW1f
YWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRvY3Vt
ZW50KCkuZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhtX2FsdFRleHQpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS5jb2xvclNwYWNlKCkpOwotICAgICAgICAg
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAg
ICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRy
aWNzKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmljcy5h
c2NlbnQoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBhbHRUZXh0T2Zmc2V0ID0gcGFp
bnRPZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFJlbmRlcklu
bGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJJbmxp
bmUgJiYgcGFyZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAgICAgICAg
fHwgc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAgfHwgc3R5bGUo
KS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUKLSAgICAgICAgfHwg
KGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRl
bnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3Mo
KSkKKyAgICAgICAgfHwgKGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKHN0eWxl
KCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpKQogICAgICAgICB8fCBwYXJlbnRTdHlsZS0+
bGluZUhlaWdodCgpICE9IHN0eWxlKCkubGluZUhlaWdodCgpKSkKICAgICAgICAgfHwgKGZsb3dU
aHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSk7IC8vIEZJWE1F
OiBFbmFibGUgdGhlIG9wdGltaXphdGlvbiBvbmNlIHdlIG1ha2Ugb3ZlcmZsb3cgY29tcHV0YXRp
b24gZm9yIGN1bGxlZCBpbmxpbmVzIGluIHJlZ2lvbnMuCiAKQEAgLTIyNCw3ICsyMjQsNyBAQCB2
b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgICAgIC8vIEhhdmUg
dG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50U3R5
bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIFJlbmRlclN0eWxlJiBj
aGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgYWx3YXlzQ3JlYXRlTGluZUJv
eGVzID0gIXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2Nl
bnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpKQorICAg
ICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0
eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgIHx8IGNoaWxkU3R5
bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgICAgICB8fCBwYXJlbnRTdHls
ZS0+bGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpOwogICAgIH0KQEAgLTU3
NCw4ICs1NzQsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAg
ICAgICAgICAgICBpZiAocmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByZW5kZXJCb3guaW5saW5lQm94
V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNv
bnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5maXJzdExp
bmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNv
bnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOworICAgICAgICAgICAg
ICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5l
U3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJT
dHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAg
ICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250
TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QocmVuZGVyQm94Lmlu
bGluZUJveFdyYXBwZXIoKS0+eCgpIC0gcmVuZGVyQm94Lm1hcmdpbkxlZnQoKSwgbG9naWNhbFRv
cCwgcmVuZGVyQm94LndpZHRoKCkgKyByZW5kZXJCb3guaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgp
LCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNTkwLDcgKzU5MCw3
IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAg
ICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IHJlbmRlcklubGluZS5maXJzdExp
bmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExpbmUgPSBjaGlsZExpbmUtPm5leHRMaW5lQm94KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGNo
aWxkTGluZS0+cm9vdCgpOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
Y29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0
TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUo
KS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxU
b3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+
bWFyZ2luTG9naWNhbExlZnQoKSwKQEAgLTYxMCw4ICs2MTAsOCBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gq
IGNoaWxkVGV4dCA9IGN1cnJUZXh0LmZpcnN0VGV4dEJveCgpOyBjaGlsZFRleHQ7IGNoaWxkVGV4
dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFJv
b3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5l
KCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChy
b290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFp
bmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJT
dHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRSZWN0
KEZsb2F0UmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2Fs
V2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTYyMiw3
ICs2MjIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIGEgaGVscGVyIHRvIHNoYXJlIHRo
ZXNlIHdpdGggdGV4dCBwYXRoLgogICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gm
IHJvb3RCb3ggPSBpbmxpbmVCb3gtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWlu
ZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAg
ICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVT
dHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2Fs
VG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2Fs
SGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFk
ZFJlY3QoRmxvYXRSZWN0KGlubGluZUJveC0+eCgpLCBsb2dpY2FsVG9wLCBpbmxpbmVCb3gtPmxv
Z2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwx
NCArMTEyLDE0IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsK
LSAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAg
IEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAg
ICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICAgICAgICAg
dGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTE9wdEdy
b3VwRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0
PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAgICAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgICAgICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAgICAg
ICAgICAgICAgaXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRl
bUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250Q2Fz
Y2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkp
OwogICAgICAgICAgICAgICAgIGl0ZW1Gb250LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxl
UmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTM0Nyw3ICsz
NDcsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50CiAgICAgfQog
fQogCi1zdGF0aWMgTGF5b3V0U2l6ZSBpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KFRleHRSdW4gdGV4
dFJ1biwgUmVuZGVyU3R5bGUqIGl0ZW1TdHlsZSwgRm9udCBpdGVtRm9udCwgTGF5b3V0UmVjdCBp
dGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQo
VGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVt
Rm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAgICBFVGV4dEFsaWduIGFjdHVh
bEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAgICAgLy8gRklYTUU6IEZpcmVm
b3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8KQEAgLTQwMCwxNCArNDAwLDE0
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBwYWludElu
Zm8uY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgY29sb3JTcGFjZSk7CiAKICAgICBU
ZXh0UnVuIHRleHRSdW4oaXRlbVRleHQsIDAsIDAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBh
bnNpb24sIGl0ZW1TdHlsZS0+ZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoaXRlbVN0eWxlLT51bmlj
b2RlQmlkaSgpKSwgdHJ1ZSwgVGV4dFJ1bjo6Tm9Sb3VuZGluZyk7Ci0gICAgRm9udCBpdGVtRm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpOwogICAgIExheW91dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFp
bnRPZmZzZXQsIGxpc3RJbmRleCk7CiAgICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQo
dGV4dFJ1biwgaXRlbVN0eWxlLCBpdGVtRm9udCwgcikpOwogCiAgICAgaWYgKGlzPEhUTUxPcHRH
cm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpKSB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGQuc2V0V2VpZ2h0KGQu
Ym9sZGVyV2VpZ2h0KCkpOwotICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0
dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgaXRlbUZvbnQg
PSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRT
cGFjaW5nKCkpOwogICAgICAgICBpdGVtRm9udC51cGRhdGUoZG9jdW1lbnQoKS5lbnN1cmVTdHls
ZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTc4NDE4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgog
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxp
bmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTEzMTQsNyArMTMx
NCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAo
bV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKQEAgLTE1Mjks
NyArMTUyOSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZv
bnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KTsKIAogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gMDsKICAgICBFTGlzdFN0eWxlVHlw
ZSB0eXBlID0gc3R5bGUoKS5saXN0U3R5bGVUeXBlKCk7CkBAIC0xNzU3LDcgKzE3NTcsNyBAQCBJ
bnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgQXN0ZXJpc2tzOgogICAgICAgICBjYXNlIEZvb3Rub3Rlczogewot
ICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
ICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMs
IGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8
IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRUZXh0UnVuRmxhZ3MpOwog
ICAgICAgICAgICAgcmVsYXRpdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBmb250LndpZHRoKHJ1biks
IGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4
NTEsNyArMTg1MSw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIK
ICAgICAgICAgY2FzZSBVcmR1OgogICAgICAgICAgICAgaWYgKG1fdGV4dC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX3RleHQsIHN0eWxlKCks
IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5n
RXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKICAgICAgICAgICAgIGludCBpdGVtV2lk
dGggPSBmb250LndpZHRoKHJ1bik7CiAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9
IHsgbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLnZhbHVlKCkpLCAnICcgfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNp
b24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6
OnN0eWxlRGlkQ2hhbmdlKFN0eWwKICAgICBpZiAobV9pbm5lckJsb2NrKSAvLyBSZW5kZXJCbG9j
ayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBzdHlsZS4KICAgICAgICAg
YWRqdXN0SW5uZXJTdHlsZSgpOwogCi0gICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8
fCBvbGRTdHlsZS0+Zm9udCgpICE9IHN0eWxlKCkuZm9udCgpOworICAgIGJvb2wgZm9udENoYW5n
ZWQgPSAhb2xkU3R5bGUgfHwgb2xkU3R5bGUtPmZvbnRDYXNjYWRlKCkgIT0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpOwogICAgIGlmIChmb250Q2hhbmdlZCkgewogICAgICAgICB1cGRhdGVPcHRpb25z
V2lkdGgoKTsKICAgICAgICAgbV9uZWVkc09wdGlvbnNXaWR0aFVwZGF0ZSA9IGZhbHNlOwpAQCAt
MjIyLDEzICsyMjIsMTMgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRo
KAogICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBvcHRpb25TdHlsZSA9IGVsZW1lbnQtPmNv
bXB1dGVkU3R5bGUoKSkKICAgICAgICAgICAgICAgICBvcHRpb25XaWR0aCArPSBtaW5pbXVtVmFs
dWVGb3JMZW5ndGgob3B0aW9uU3R5bGUtPnRleHRJbmRlbnQoKSwgMCk7CiAgICAgICAgICAgICBp
ZiAoIXRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIFRleHRSdW4gcnVuID0g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgdGV4dCwgc3R5bGUoKSwg
VGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdF
eHBhbnNpb24sIERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgICAgIG9wdGlvbldp
ZHRoICs9IGZvbnQud2lkdGgocnVuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1heE9w
dGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0aW9uV2lkdGgsIG9wdGlvbldpZHRoKTsKICAgICAg
ICAgfSBlbHNlIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4
cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICBtYXhPcHRpb25XaWR0
aCA9IHN0ZDo6bWF4KG1heE9wdGlvbldpZHRoLCBmb250LndpZHRoKHJ1bikpOwogICAgICAgICB9
CkBAIC01MjMsNyArNTIzLDcgQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1T
dHlsZQogICAgIGdldEl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdEluZGV4LCBpdGVtQmFja2dyb3Vu
ZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yKTsKIAogICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
IDogZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwotICAgIHJldHVybiBzdHlsZSA/IFBvcHVwTWVu
dVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIGl0
ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250KCksIHN0eWxlLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSwKKyAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBpdGVtQmFja2dyb3VuZENvbG9yLCBz
dHlsZS0+Zm9udENhc2NhZGUoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAg
ICAgICBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlLT50ZXh0SW5kZW50KCks
IHN0eWxlLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZS0+dW5pY29kZUJpZGkoKSksCiAg
ICAgICAgIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3IgPyBQb3B1cE1lbnVTdHlsZTo6Q3Vz
dG9tQmFja2dyb3VuZENvbG9yIDogUG9wdXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29s
b3IpIDogbWVudVN0eWxlKCk7CiB9CkBAIC01NjQsNyArNTY0LDcgQEAgUG9wdXBNZW51U3R5bGUg
UmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRv
VXNlID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5zdHlsZSgpIDogc3R5bGUoKTsKICAg
ICBJbnRSZWN0IGFic0JvdW5kcyA9IGFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFu
c2Zvcm1zKCk7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlVG9Vc2UudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksCi0gICAgICAgIHN0eWxlVG9Vc2Uu
Zm9udCgpLCBzdHlsZVRvVXNlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRp
c3BsYXkoKSA9PSBOT05FLAorICAgICAgICBzdHlsZVRvVXNlLmZvbnRDYXNjYWRlKCksIHN0eWxl
VG9Vc2UudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5P
TkUsCiAgICAgICAgIHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpICYmIHN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0UGFydCwgc3R5bGVUb1VzZS50ZXh0SW5kZW50KCksCiAgICAgICAgIHN0
eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSwgUG9w
dXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgIFBvcHVwTWVudVN0
eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVTaXplKHN0eWxlVG9Vc2UsIGFic0Jv
dW5kcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNw
cAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnlSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBSZW5kZXJS
dWJ5UnVuOjpsYXlvdXQoKQogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHJ0
LT5zdHlsZSgpLnJ1YnlQb3NpdGlvbigpID09IFJ1YnlQb3NpdGlvbkludGVyQ2hhcmFjdGVyKSB7
CiAgICAgICAgIC8vIEJvcG9tb2ZvLiBXZSBuZWVkIHRvIG1vdmUgdGhlIFJlbmRlclJ1YnlUZXh0
IG92ZXIgdG8gdGhlIHJpZ2h0IHNpZGUgYW5kIGNlbnRlciBpdAogICAgICAgICAvLyB2ZXJ0aWNh
bGx5IHJlbGF0aXZlIHRvIHRoZSBiYXNlLgotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUoKS5mb250KCk7Ci0gICAgICAgIGZsb2F0IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9u
dC5sZXR0ZXJTcGFjaW5nKCksIDIuMGYgKiBydC0+c3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3Mo
KS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpOworICAgICAgICBmbG9hdCBkaXN0YW5jZUJldHdlZW5CYXNlID0gbWF4KGZv
bnQubGV0dGVyU3BhY2luZygpLCAyLjBmICogcnQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250
TWV0cmljcygpLmhlaWdodCgpKTsKICAgICAgICAgc2V0V2lkdGgod2lkdGgoKSArIGRpc3RhbmNl
QmV0d2VlbkJhc2UgLSBmb250LmxldHRlclNwYWNpbmcoKSk7CiAgICAgICAgIGlmIChSZW5kZXJS
dWJ5QmFzZSogcmIgPSBydWJ5QmFzZSgpKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGZpcnN0
TGluZVRvcCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNo
RmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAs
NyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0CiAKIFBvcHVwTWVu
dVN0eWxlIFJlbmRlclNlYXJjaEZpZWxkOjptZW51U3R5bGUoKSBjb25zdAogewotICAgIHJldHVy
biBQb3B1cE1lbnVTdHlsZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpLCBzdHlsZSgpLmZvbnQoKSwgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVklTSUJM
RSwKKyAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLCBzdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZSgpLmRpc3BsYXkoKSA9PSBOT05F
LCB0cnVlLCBzdHlsZSgpLnRleHRJbmRlbnQoKSwgc3R5bGUoKS5kaXJlY3Rpb24oKSwgaXNPdmVy
cmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6Q3VzdG9tQmFja2dy
b3VuZENvbG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCArMjI5LDggQEAgYm9vbCBSZW5kZXJU
ZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0CiBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVVc2VC
YWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoc3R5bGUu
Zm9udCgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkpCisgICAgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlv
bigpOworICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNTcGVj
aWZpZWRGb250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1Niw3ICsyNTYsNyBAQCB2
b2lkIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmCiAgICAgaWYgKCFvbGRTdHls
ZSkgewogICAgICAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tz
bGFzaEFzWWVuU3ltYm9sKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gbV91c2VCYWNrc2xh
c2hBc1llblN5bWJvbDsKLSAgICB9IGVsc2UgaWYgKG9sZFN0eWxlLT5mb250KCkudXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woKSAhPSBuZXdTdHlsZS5mb250KCkudXNlQmFja3NsYXNoQXNZZW5TeW1i
b2woKSkgeworICAgIH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnRDYXNjYWRlKCkudXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woKSAhPSBuZXdTdHlsZS5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFzaEFz
WWVuU3ltYm9sKCkpIHsKICAgICAgICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IGNvbXB1
dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IHRy
dWU7CiAgICAgfQpAQCAtNDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9j
YWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxl
ZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYgZiwgaW50IHN0
YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lk
dGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxv
YXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmlu
ZVRleHQ+KCp0aGlzKSkgewogICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmlu
ZVRleHQgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNTQ0LDcgKzU0
NCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKICAgICBBU1NF
UlQobV90ZXh0KTsKICAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKm1fdGV4dC5pbXBsKCk7CiAgICAg
aWYgKHRleHRbMF0gPT0gJyAnIHx8ICh0ZXh0WzBdID09ICdcbicgJiYgIXN0eWxlLnByZXNlcnZl
TmV3bGluZSgpKSB8fCB0ZXh0WzBdID09ICdcdCcpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAg
ICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7IC8vIEZJ
WE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgaWYgKHN0cmlwRnJvbnRTcGFj
ZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwogICAgICAgICAgICAg
ZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4odGhpcywgZm9udCwgJnNwYWNlLCAxLCBzdHlsZSkpOwpAQCAtNTYwLDcgKzU2MCw3IEBAIHZv
aWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKIAogICAgIC8vIENvbXB1dGUg
b3VyIG1heCB3aWR0aHMgYnkgc2Nhbm5pbmcgdGhlIHN0cmluZyBmb3IgbmV3bGluZXMuCiAgICAg
aWYgKGhhc0JyZWFrKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZS5mb250KCk7IC8v
IEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICAgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGYgPSBzdHlsZS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0
LWxpbmUuCiAgICAgICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKICAgICAgICAgYmVnaW5NYXhX
ID0gbWF4VzsKICAgICAgICAgZW5kTWF4VyA9IG1heFc7CkBAIC02MzcsMTMgKzYzNywxMyBAQCB2
b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgIG1fa25vd25U
b0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzID0gdHJ1ZTsKIH0KIAotc3RhdGljIGlu
bGluZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udCYg
Zm9udCkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVy
ZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIHJldHVybiBmb250LndpZHRoKFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS5oeXBoZW5TdHJpbmco
KS5zdHJpbmcoKSwgc3R5bGUpKTsKIH0KIAotc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdp
ZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnQmIGZvbnQsIFN0cmluZ1ZpZXcgd29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIHVu
c2lnbmVkIG1pbmltdW1TdWZmaXhMZW5ndGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhP
dmVyZmxvdykKK3N0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWlu
aW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQog
ewogICAgIHN1ZmZpeFN0YXJ0ID0gMDsKICAgICBpZiAod29yZC5sZW5ndGgoKSA8PSBtaW5pbXVt
U3VmZml4TGVuZ3RoKQpAQCAtNzAxLDcgKzcwMSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWwKICAgICBtX2hhc0VuZFdTID0gZmFsc2U7CiAKICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBU
aGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICBmbG9hdCB3b3JkU3BhY2luZyA9IGZvbnQud29y
ZFNwYWNpbmcoKTsKICAgICBpbnQgbGVuID0gdGV4dExlbmd0aCgpOwogICAgIExhenlMaW5lQnJl
YWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKG1fdGV4dCwgc3R5bGUubG9jYWxlKCksIG1hcExpbmVC
cmVha1RvSXRlcmF0b3JNb2RlKHN0eWxlLmxpbmVCcmVhaygpKSk7CkBAIC0xMjE1LDEwICsxMjE1
LDEwIEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICAgICAg
bGVuID0gdGV4dExlbmd0aCgpIC0gZnJvbTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5l
U3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKLSAgICByZXR1
cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udCgpLCB4UG9zLCBmYWxsYmFja0ZvbnRz
LCBnbHlwaE92ZXJmbG93KTsKKyAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUu
Zm9udENhc2NhZGUoKSwgeFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAK
LWZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29u
c3QgRm9udCYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQg
UmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250
Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAg
IEFTU0VSVChmcm9tICsgbGVuIDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3Ro
KCkpCkBAIC0xMjI2LDcgKzEyMjYsNyBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25l
ZCBmcm9tLCB1CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OwogICAgIGZsb2F0IHc7Ci0gICAgaWYgKCZmID09ICZzdHlsZS5mb250KCkpIHsKKyAgICBpZiAo
JmYgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkpIHsKICAgICAgICAgaWYgKCFzdHlsZS5wcmVzZXJ2
ZU5ld2xpbmUoKSAmJiAhZnJvbSAmJiBsZW4gPT0gdGV4dExlbmd0aCgpICYmICghZ2x5cGhPdmVy
ZmxvdyB8fCAhZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcykpIHsKICAgICAgICAgICAgIGlm
IChmYWxsYmFja0ZvbnRzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGdseXBoT3ZlcmZsb3cp
OwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAgYm9vbCBSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2lt
cGxlRm9udAogewogICAgIGlmIChpc0FsbEFTQ0lJKCkgfHwgbV90ZXh0LmlzOEJpdCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnQ6OlNpbXBsZTsKKyAgICByZXR1cm4g
Rm9udENhc2NhZGU6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY2hhcmFjdGVyczE2KCksIGxlbmd0
aCgpKSA9PSBGb250Q2FzY2FkZTo6U2ltcGxlOwogfQogCiB2b2lkIFJlbmRlclRleHQ6Om1vbWVu
dGFyaWx5UmV2ZWFsTGFzdFR5cGVkQ2hhcmFjdGVyKHVuc2lnbmVkIG9mZnNldEFmdGVyTGFzdFR5
cGVkQ2hhcmFjdGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0
ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0LmltcGwoKS0+bGVuZ3RoKCk7IH0gLy8g
bm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKICAgICB2b2lkIHBvc2l0aW9u
TGluZUJveChJbmxpbmVUZXh0Qm94Jik7CiAKLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udCYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cq
ID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBj
b25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
biwgZmxvYXQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25z
dDsKIAogICAgIGZsb2F0IG1pbkxvZ2ljYWxXaWR0aCgpIGNvbnN0OwpAQCAtMTkyLDcgKzE5Miw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExh
eW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGUgZmluYWwgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZy
b21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
LCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNv
bnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqLCBj
b25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNBbGxBU0NJSTsgfQogICAgIGJvb2wgY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEy
ICsxNzQsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0RWxlbQogZmxv
YXQgUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgoKQogewogICAgIGZsb2F0
IHdpZHRoOwotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5mYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZh
aWxhYmxlKHdpZHRoKSkKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZhc3RBdmVyYWdl
Q2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQogICAgICAgICByZXR1cm4gd2lkdGg7CiAKICAg
ICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKICAgICBjb25zdCBTdHJpbmcgc3RyID0gU3RyaW5nKCZj
aCwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRSdW4g
dGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3RyLCBzdHlsZSgpLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGlu
Z0hhY2tzKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1bik7CkBAIC0xODksNyArMTg5
LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OnNjYWxlRW1Ub1VuaXRzKAogewogICAgIC8v
IFRoaXMgbWF0Y2hlcyB0aGUgdW5pdHNQZXJFbSB2YWx1ZSBmb3IgTVMgU2hlbGwgRGxnIGFuZCBD
b3VyaWVyIE5ldyBmcm9tIHRoZSAiaGVhZCIgZm9udCB0YWJsZS4KICAgICBmbG9hdCB1bml0c1Bl
ckVtID0gMjA0OC4wZjsKLSAgICByZXR1cm4gcm91bmRmKHN0eWxlKCkuZm9udCgpLnNpemUoKSAq
IHggLyB1bml0c1BlckVtKTsKKyAgICByZXR1cm4gcm91bmRmKHN0eWxlKCkuZm9udENhc2NhZGUo
KS5zaXplKCkgKiB4IC8gdW5pdHNQZXJFbSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6
OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0
aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
CShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGZs
b2F0IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpnZXRBdmUKICAgICAvLyBTaW5jZSBMdWNp
ZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUg
d2lkdGgKICAgICAvLyBvZiBDb3VyaWVyIE5ldywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFy
ZWFzIGluIElFLCBGaXJlZm94IGFuZCBTYWZhcmkgV2luLgogICAgIC8vIDEyMjkgaXMgdGhlIGF2
Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBmb3IgQ291cmllciBOZXcuCi0gICAg
aWYgKHN0eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAg
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5k
ZSIpCiAgICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cygxMjI5KTsKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOSw3ICszMTksNyBAQCBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2
CiAgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMg
aW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKICAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3Mg
KGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KICAgICAvLyA5
MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBmb3IgTVMgU2hl
bGwgRGxnLgotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEg
R3JhbmRlIikKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCkgPT0g
Ikx1Y2lkYSBHcmFuZGUiKQogICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKICNl
bmRpZgogCkBAIC0zMzgsMTUgKzMzOCwxNSBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6CiAgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gMC5mOwogCiAjaWYgIVBMQVRG
T1JNKElPUykKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udCgp
LmZpcnN0RmFtaWx5KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKTsKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRl
IGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKICAg
ICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBG
aXJlZm94LCBTYWZhcmkgV2luIGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4g
SUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDQwMjcg
aXMgdGhlICh4TWF4IC0geE1pbikgdmFsdWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxlIGZvciBN
UyBTaGVsbCBEbGcuCiAgICAgaWYgKGZhbWlseSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAg
IG1heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKDQwMjcpOwotICAgIGVsc2UgaWYgKHN0eWxl
KCkuZm9udCgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQotICAgICAgICBtYXhDaGFyV2lk
dGggPSByb3VuZGYoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRo
KCkpOworICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5oYXNWYWxpZEF2ZXJhZ2VD
aGFyV2lkdGgoKSkKKyAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CiAjZW5kaWYKIAogICAg
IC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRoLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVS
ZXNvbAogICAgIGNhc2UgQnV0dG9uUGFydDogewogICAgICAgICAvLyBCb3JkZXIKICAgICAgICAg
TGVuZ3RoQm94IGJvcmRlckJveChzdHlsZS5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS5ib3JkZXJS
aWdodFdpZHRoKCksIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLmJvcmRlckxlZnRX
aWR0aCgpKTsKLSAgICAgICAgYm9yZGVyQm94ID0gbV90aGVtZS0+Y29udHJvbEJvcmRlcihwYXJ0
LCBzdHlsZS5mb250KCksIGJvcmRlckJveCwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAg
ICAgYm9yZGVyQm94ID0gbV90aGVtZS0+Y29udHJvbEJvcmRlcihwYXJ0LCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLCBib3JkZXJCb3gsIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChi
b3JkZXJCb3gudG9wKCkudmFsdWUoKSAhPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlLmJvcmRlclRv
cFdpZHRoKCkpKSB7CiAgICAgICAgICAgICBpZiAoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyQm94LnRvcCgpLnZh
bHVlKCkpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxl
KFN0eWxlUmVzb2wKICAgICAgICAgfQogCiAgICAgICAgIC8vIFBhZGRpbmcKLSAgICAgICAgTGVu
Z3RoQm94IHBhZGRpbmdCb3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHlsZS5m
b250KCksIHN0eWxlLnBhZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAg
ICAgTGVuZ3RoQm94IHBhZGRpbmdCb3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBz
dHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5wYWRkaW5nQm94KCksIHN0eWxlLmVmZmVjdGl2ZVpv
b20oKSk7CiAgICAgICAgIGlmIChwYWRkaW5nQm94ICE9IHN0eWxlLnBhZGRpbmdCb3goKSkKICAg
ICAgICAgICAgIHN0eWxlLnNldFBhZGRpbmdCb3gocGFkZGluZ0JveCk7CiAKQEAgLTE1NCwyNSAr
MTU0LDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICAg
ICAgLy8gV2lkdGggLyBIZWlnaHQKICAgICAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgaGVy
ZSBhcmUgYWZmZWN0ZWQgYnkgdGhlIHpvb20uCiAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpcyBm
bGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNj
b3VudC4KLSAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xT
aXplKHBhcnQsIHN0eWxlLmZvbnQoKSwgTGVuZ3RoU2l6ZShzdHlsZS53aWR0aCgpLCBzdHlsZS5o
ZWlnaHQoKSksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUgY29u
dHJvbFNpemUgPSBtX3RoZW1lLT5jb250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgp
LCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZmZWN0
aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGNvbnRyb2xTaXplLndpZHRoKCkgIT0gc3R5bGUud2lk
dGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldFdpZHRoKGNvbnRyb2xTaXplLndpZHRoKCkpOwog
ICAgICAgICBpZiAoY29udHJvbFNpemUuaGVpZ2h0KCkgIT0gc3R5bGUuaGVpZ2h0KCkpCiAgICAg
ICAgICAgICBzdHlsZS5zZXRIZWlnaHQoY29udHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAvLyBNaW4tV2lkdGggLyBNaW4tSGVpZ2h0Ci0gICAgICAgIExlbmd0
aFNpemUgbWluQ29udHJvbFNpemUgPSBtX3RoZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFydCwg
c3R5bGUuZm9udCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhTaXpl
IG1pbkNvbnRyb2xTaXplID0gbV90aGVtZS0+bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIHN0eWxl
LmZvbnRDYXNjYWRlKCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChtaW5D
b250cm9sU2l6ZS53aWR0aCgpICE9IHN0eWxlLm1pbldpZHRoKCkpCiAgICAgICAgICAgICBzdHls
ZS5zZXRNaW5XaWR0aChtaW5Db250cm9sU2l6ZS53aWR0aCgpKTsKICAgICAgICAgaWYgKG1pbkNv
bnRyb2xTaXplLmhlaWdodCgpICE9IHN0eWxlLm1pbkhlaWdodCgpKQogICAgICAgICAgICAgc3R5
bGUuc2V0TWluSGVpZ2h0KG1pbkNvbnRyb2xTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgLy8gRm9udAotICAgICAgICBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQg
PSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7Ci0gICAgICAgIGlmIChjb250cm9sRm9udCAhPSBzdHlsZS5mb250KCkuZm9udERl
c2NyaXB0aW9uKCkpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250ID0gbV90
aGVtZS0+Y29udHJvbEZvbnQocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUuZWZmZWN0
aXZlWm9vbSgpKTsKKyAgICAgICAgaWYgKGNvbnRyb2xGb250ICE9IHN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIE5vdyB1cGRhdGUgb3VyIGZv
bnQuCiAgICAgICAgICAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGNvbnRyb2xGb250
KSkKLSAgICAgICAgICAgICAgICBzdHlsZS5mb250KCkudXBkYXRlKDApOworICAgICAgICAgICAg
ICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKDApOwogICAgICAgICB9CiAgICAgICAgIC8v
IFJlc2V0IG91ciBsaW5lLWhlaWdodAogICAgICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKQEAgLTEyNTcsNyArMTI1Nyw3IEBAIFN0cmlu
ZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3REZWZhdWx0TGFiZWwKICAgICByZXR1cm4gZmlsZUJ1dHRv
bk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlz
dE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnQmIGZvbnQs
IGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKK1N0cmluZyBSZW5k
ZXJUaGVtZTo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxv
d2VkKSBjb25zdAogewogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBv
cHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZp
cnR1YWwgU3RyaW5nIGZpbGVMaXN0RGVmYXVsdExhYmVsKGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93
ZWQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxs
b3dlZCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29u
c3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3Q7CiAKICAgICBlbnVtIEZpbGVVcGxvYWREZWNvcmF0aW9ucyB7
IFNpbmdsZUZpbGUsIE11bHRpcGxlRmlsZXMgfTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxl
VXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgLyppbnB1dFJlbmRlcmVy
Ki8sIGNvbnN0IFJlbmRlck9iamVjdCYgLypidXR0b25SZW5kZXJlciovLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgeyByZXR1
cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAjaW1wb3J0ICJE
YXRlQ29tcG9uZW50cy5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkZsb2F0Um91
bmRlZFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKICNpbXBvcnQgIkdyYWRpZW50LmgiCkBAIC01NDUsNyArNTQ1LDcgQEAgc3RhdGljIHZv
aWQgYWRqdXN0U2VsZWN0TGlzdEJ1dHRvblN0eWxlKAogICAgIAogY2xhc3MgUmVuZGVyVGhlbWVN
ZWFzdXJlVGV4dENsaWVudCA6IHB1YmxpYyBNZWFzdXJlVGV4dENsaWVudCB7CiBwdWJsaWM6Ci0g
ICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudChjb25zdCBGb250JiBmb250LCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorICAgIFJlbmRl
clRoZW1lTWVhc3VyZVRleHRDbGllbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgICAgIDog
bV9mb250KGZvbnQpCiAgICAgICAgICwgbV9yZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KQogICAg
ICAgICAsIG1fc3R5bGUoc3R5bGUpCkBAIC01NTcsNyArNTU3LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9mb250LndpZHRoKHJ1bik7CiAgICAgfQogcHJpdmF0ZToKLSAgICBjb25zdCBG
b250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBSZW5kZXJP
YmplY3QmIG1fcmVuZGVyT2JqZWN0OwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3N0eWxlOwog
fTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0
b25TdHlsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgdGhlIHdpZHRoIGFuZCBz
ZXQgdGhlIGJveC1zaXppbmcgdG8gY29udGVudC1ib3ggdG8gbm90IGNvbmZsaWN0IHdpdGggdGhl
IHBhZGRpbmcuCi0gICAgRm9udCBmb250ID0gc3R5bGUuZm9udCgpOworICAgIEZvbnRDYXNjYWRl
IGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoZm9udC5wcmltYXJ5Rm9u
dERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3
ICsxNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0ZWRQ
bHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
TGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgs
IGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udENh
c2NhZGUmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJP
YmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVyLCBj
b25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAx
Nzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRG
b250RnJvbUNvbnRyb2xTCiAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CiAKICAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAg
IHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKDApOwogfQogCiBOU0NvbnRyb2xTaXplIFJlbmRl
clRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdApAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgTlNUZXh0RmllbGRDZWxsKiBSZW5kZXJUaGVtZU1h
Yzo6dGV4dEZpZQogICAgIHJldHVybiBtX3RleHRGaWVsZC5nZXQoKTsKIH0KIAotU3RyaW5nIFJl
bmRlclRoZW1lTWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxp
c3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dl
ZCkgY29uc3QKK1N0cmluZyBSZW5kZXJUaGVtZU1hYzo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29u
c3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHdpZHRo
LCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAogewogICAgIGlmICh3aWR0aCA8PSAw
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw3ICs5
MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAgIGlm
ICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8fCAo
Ym94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRpbmcp
KSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKSk7CisgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUu
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJpY3MoKTsK
ICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudChiYXNl
bGluZVR5cGUoKSk7CkBAIC0xMDE3LDcgKzEwMTcsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxpbmVC
b3g6OnZlcnRpY2FsUG9zaXRpCiAgICAgCiAgICAgaWYgKHZlcnRpY2FsQWxpZ24gIT0gQkFTRUxJ
TkUpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudExpbmVTdHlsZSA9IGZpcnN0
TGluZSA/IHBhcmVudC0+Zmlyc3RMaW5lU3R5bGUoKSA6IHBhcmVudC0+c3R5bGUoKTsKLSAgICAg
ICAgY29uc3QgRm9udCYgZm9udCA9IHBhcmVudExpbmVTdHlsZS5mb250KCk7CisgICAgICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcGFyZW50TGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAg
ICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3Mo
KTsKICAgICAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTcgKzE4NCwxNyBAQCBib29sIGNhblVzZUZvcihjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBp
ZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZl
IG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAgYXV0byYgcHJp
bWFyeUZvbnREYXRhID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7
CiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVU
ZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1b3Rl
KCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKICAgICAgICAgICAgIHx8IHRleHRS
ZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKHN0eWxlLmZvbnQoKS5jb2RlUGF0aChUZXh0UnVuKHRleHRSZW5kZXJlci50ZXh0
KCkpKSAhPSBGb250OjpTaW1wbGUpCisgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNv
ZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1w
bGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghY2FuVXNlRm9yVGV4
dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250RGF0YSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dD
b250ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IFNpbXBsZUxpbmVMYXlvdXQgewogCiBGbG93Q29udGVudHM6OlN0eWxlOjpTdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnQoKSkKKyAgICA6IGZvbnQo
c3R5bGUuZm9udENhc2NhZGUoKSkKICAgICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24oKSkK
ICAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKICAg
ICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogI2lmbmRlZiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzX2gKICNkZWZpbmUgU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKQEAgLTYzLDcgKzYz
LDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgIGV4cGxpY2l0IFN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJik7CiAKLSAgICAgICAgY29uc3QgRm9udCYgZm9udDsKKyAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQ7CiAgICAgICAgIEVUZXh0QWxpZ24gdGV4dEFsaWdu
OwogICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZTsKICAgICAgICAgYm9vbCBwcmVzZXJ2
ZU5ld2xpbmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbAogICAgIGJvb2wgZGVidWdCb3JkZXJzRW5hYmxlZCA9IGZsb3cuZnJhbWUoKS5zZXR0
aW5ncygpLnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCk7CiAKICAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSAqcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0
eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFBhaW50U3R5bGUgdGV4dFBhaW50U3R5bGUgPSBj
b21wdXRlVGV4dFBhaW50U3R5bGUoZmxvdy5mcmFtZSgpLCBzdHlsZSwgcGFpbnRJbmZvKTsKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgdGV4dFBhaW50
U3R5bGUuc3Ryb2tlV2lkdGggPiAwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE3ODQx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDggQEAgUnVuUmVzb2x2ZXI6OlJ1blJl
c29sdmVyKGNvbnN0IFJlbmRlckJsbwogICAgICwgbV9saW5lSGVpZ2h0KGxpbmVIZWlnaHRGcm9t
RmxvdyhmbG93KSkKICAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmVGcm9tRmxvdyhmbG93KSkKICAg
ICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZShmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KSkKLSAgICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSkKLSAgICAsIG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCku
ZGVzY2VudCgpKQorICAgICwgbV9hc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSkKKyAgICAsIG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9udENh
c2NhZGUoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3RO
b2RlU2l6ZQogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoYXZlcmFnZVNpemUpOwogICAgICAgICAgICAgc3R5bGUtPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRh
dGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRT
ZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRv
U2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9y
KCkpOwogICAgICAgICAgICAgdGV4dC0+cGFyZW50KCktPnNldFN0eWxlKHN0eWxlLnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBwYXJl
bnRSZW5kZXJlciA9IHRleHQtPnBhcmVudCgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgVGV4
dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAgIGlmIChsaXN0TWFy
a2VyUmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUobGlzdE1hcmtlclJl
bmRlcmVyLT5zdHlsZSgpKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRh
dGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRT
ZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUo
YXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxl
Y3RvcigpKTsKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPigqbGlz
dE1hcmtlclJlbmRlcmVyKS5zZXRTdHlsZShzdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgVGV4dEF1dG9T
aXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHls
ZS0+c2V0TGluZUhlaWdodChMZW5ndGgobGluZUhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgICAg
ICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChsaW5lSGVpZ2h0TGVu
Z3RoKTsKICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnQo
KS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigp
LmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udENh
c2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNv
bHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+
c2V0U3R5bGUobmV3UGFyZW50U3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFRleHRBdXRvU2l6aW5nVmFsdWU6
OnJlc2V0KCkKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUob3Jp
Z2luYWxTaXplKTsKICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjbG9u
ZVJlbmRlclN0eWxlV2l0aFN0YXRlKHRleHQtPnN0eWxlKCkpOwogICAgICAgICAgICAgc3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgc3R5bGUt
PmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNv
bHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgp
LnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCku
Zm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgdGV4dC0+cGFyZW50KCktPnNldFN0eWxlKHN0
eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFJlc2V0IHRoZSBs
aW5lIGhlaWdodCBvZiB0aGUgcGFyZW50LgpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgVGV4dEF1
dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBu
ZXdQYXJlbnRTdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUocGFyZW50U3R5bGUpOwog
ICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldExpbmVIZWlnaHQob3JpZ2luYWxMaW5lSGVp
Z2h0KTsKICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250KCkudXBkYXRl
KGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRT
ZWxlY3RvcigpKTsKICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQYXJl
bnRTdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHRQYWludGVyOjpU
ZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgcGFpbnRTZWxlY3RlZFRl
eHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udCYgZm9u
dCwKK1RleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJv
b2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVs
eSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsCiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRleHRS
dW4sIGludCBlbmRQb3NpdGlvbkluVGV4dEJveFN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRv
bWljU3RyaW5nJiBlbXBoYXNpc01hcmssIFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQs
IFRleHRSdW4mIHRleHRSdW4sCiAgICAgRmxvYXRSZWN0JiBib3hSZWN0LCBGbG9hdFBvaW50JiB0
ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBTaGFkb3dEYXRhKiB0ZXh0
U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFkb3csCiAgICAgYm9vbCB0ZXh0
Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgdGV4dFBhaW50U3R5bGUsIFRleHRQYWlu
dFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxlKQpAQCAtNTYsNyArNTYsNyBAQCBUZXh0UGFpbnRl
cjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0CiB7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdU
ZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNp
c01hcmssCitzdGF0aWMgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0
UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKICAgICBpbnQgZW1waGFzaXNN
YXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgaW50IGZyb20sIGNvbnN0
IGludCB0bykKIHsKICAgICBpZiAoZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKQEAgLTExMyw3ICsx
MTMsNyBAQCBTaGFkb3dBcHBsaWVyOjp+U2hhZG93QXBwbGllcigpCiAgICAgICAgIG1fY29udGV4
dC5jbGVhclNoYWRvdygpOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4m
IHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLAorc3RhdGljIHZvaWQg
cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5n
JiBlbXBoYXNpc01hcmssCiAgICAgaW50IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsCiAgICAgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93LCBib29sIHN0cm9rZWQsIGJvb2wgaG9yaXpvbnRhbCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCShyZXZpc2lvbiAxNzg0MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjCiAK
IGNsYXNzIFRleHRQYWludGVyIHsKIHB1YmxpYzoKLSAgICBUZXh0UGFpbnRlcihHcmFwaGljc0Nv
bnRleHQmLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4
dFNlcGFyYXRlbHksIGNvbnN0IEZvbnQmLAorICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4
dCYsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2Vw
YXJhdGVseSwgY29uc3QgRm9udENhc2NhZGUmLAogICAgIGludCBzdGFydFBvc2l0aW9uSW5UZXh0
UnVuLCBpbnQgZW5kUG9zaXRpb25JblRleHRCb3hTdHJpbmcsIGludCBsZW5ndGgsIGNvbnN0IEF0
b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBSZW5kZXJDb21iaW5lVGV4dCosCiAgICAgVGV4dFJ1
biYsIEZsb2F0UmVjdCYgYm94UmVjdCwgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGVtcGhh
c2lzTWFya09mZnNldCwgY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdywgY29uc3QgU2hhZG93
RGF0YSogc2VsZWN0aW9uU2hhZG93LAogICAgIGJvb2wgdGV4dEJveElzSG9yaXpvbnRhbCwgVGV4
dFBhaW50U3R5bGUmIG5vblNlbGVjdGlvblBhaW50U3R5bGUsIFRleHRQYWludFN0eWxlJiBzZWxl
Y3Rpb25QYWludFN0eWxlKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBT
aGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRvdzsKICAgICBib29sIG1fcGFpbnRTZWxlY3RlZFRl
eHRPbmx5OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHk7Ci0gICAgY29u
c3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgaW50
IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsKICAgICBpbnQgbV9lbmRQb3NpdGlvbkluVGV4dFJ1
bjsKICAgICBpbnQgbV9sZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZp
c2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHRJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4NiwxMyArNDg2LDEzIEBA
IGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJZk5lZWRlZChSZW5kZXIKICAgICBkb3duY2FzdDxS
ZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51cGRhdGVDb3VudGVyKCk7CiB9CiAKLWlubGluZSBm
bG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnQm
IGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAp
CitpbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCks
IHN0eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdp
ZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3Qg
Rm9udCYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VX
aGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMs
IFRleHRMYXlvdXQqIGxheW91dCA9IDApCitBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChS
ZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBz
ZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250
cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUgPSB0ZXh0LT5zdHlsZSgpOwogCkBAIC01MDEsNyArNTAxLDcgQEAgQUxXQVlTX0lOTElORSBm
bG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dAogICAgICAgICByZXR1cm4gdGV4dC0+d2lkdGgoZnJv
bSwgbGVuLCBmb250LCB4UG9zLCAmZmFsbGJhY2tGb250cywgJmdseXBoT3ZlcmZsb3cpOwogCiAg
ICAgaWYgKGxheW91dCkKLSAgICAgICAgcmV0dXJuIEZvbnQ6OndpZHRoKCpsYXlvdXQsIGZyb20s
IGxlbiwgJmZhbGxiYWNrRm9udHMpOworICAgICAgICByZXR1cm4gRm9udENhc2NhZGU6OndpZHRo
KCpsYXlvdXQsIGZyb20sIGxlbiwgJmZhbGxiYWNrRm9udHMpOwogCiAgICAgVGV4dFJ1biBydW4g
PSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LCBmcm9tLCBs
ZW4sIHN0eWxlKTsKICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0LT50ZXh0TGVuZ3Ro
KCkgLSBmcm9tKTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBpbmxpbmUgdm9pZCBlbnN1cmVDaGFyYWN0
ZXJHZXRzTGluZUJveChMCiAgICAgbGluZU1pZHBvaW50U3RhdGUuc3RvcElnbm9yaW5nU3BhY2Vz
KElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IucmVuZGVyZXIoKSwgdGV4
dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQoKSkpOwogfQogCi1pbmxpbmUgdm9pZCB0cnlIeXBo
ZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExp
bmVzLCBpbnQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXNMaW1pdCwgaW50IG1pbmltdW1QcmVm
aXhMaW1pdCwgaW50IG1pbmltdW1TdWZmaXhMaW1pdCwgdW5zaWduZWQgbGFzdFNwYWNlLCB1bnNp
Z25lZCBwb3MsIGZsb2F0IHhQb3MsIGludCBhdmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVkUGl0
Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIElu
bGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGludCBuZXh0QnJlYWthYmxlLCBib29sJiBoeXBoZW5h
dGVkKQoraW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllciwg
dW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWluaW11bVN1ZmZp
eExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQgeFBvcywgaW50
IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3Bh
Y2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3ImIGxpbmVCcmVhaywg
aW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCiB7CiAgICAgLy8gTWFwICdoeXBo
ZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06IGF1dG87JyB0byAyLgogICAgIHVuc2lnbmVkIG1p
bmltdW1QcmVmaXhMZW5ndGg7CkBAIC02MTUsMTIgKzYxNSwxMiBAQCBpbmxpbmUgYm9vbCBCcmVh
a2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgfQogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlID0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBtX2xpbmVJbmZvKTsKLSAg
ICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBib29sIGlzRml4ZWRQaXRjaCA9IGZv
bnQuaXNGaXhlZFBpdGNoKCk7CiAgICAgYm9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5z
KCkgPT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29yZTo6Y2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgp
KTsKIAogICAgIHVuc2lnbmVkIGxhc3RTcGFjZSA9IG1fY3VycmVudC5vZmZzZXQoKTsKLSAgICBm
bG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250KCkud29yZFNwYWNpbmcoKTsK
KyAgICBmbG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLndv
cmRTcGFjaW5nKCk7CiAgICAgZmxvYXQgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSAwOwogICAgIGZs
b2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVtZW50ID0gMDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCShyZXZpc2lvbiAxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBSZW5kZXJUZXh0SW5mbyB7CiAgICAgUmVuZGVy
VGV4dCogbV90ZXh0OwogICAgIE93blB0cjxUZXh0TGF5b3V0PiBtX2xheW91dDsKICAgICBMYXp5
TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKLSAgICBjb25zdCBGb250KiBt
X2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9udDsKIH07CiAKIGNsYXNzIExpbmVC
cmVha2VyIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVI
ZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUlubGluZUhlYWRlcnMuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCBpbmxpbmUgYm9vbCByZXF1aXJlc0xpbmVCb3hGb3JDb250ZW50KGNvCiAgICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSA9IGxpbmVTdHlsZSgqcGFyZW50LCBsaW5l
SW5mbyk7CiAgICAgICAgIGlmIChmbG93U3R5bGUubGluZUhlaWdodCgpICE9IHBhcmVudFN0eWxl
LmxpbmVIZWlnaHQoKQogICAgICAgICAgICAgfHwgZmxvd1N0eWxlLnZlcnRpY2FsQWxpZ24oKSAh
PSBwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkKLSAgICAgICAgICAgIHx8ICFwYXJlbnRTdHls
ZS5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdh
cChmbG93U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpKQorICAgICAgICAgICAgfHwgIXBhcmVu
dFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNj
ZW50QW5kTGluZUdhcChmbG93U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBA
IGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiBzdHIKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmICh1bml0ID09ICJlbSIpIHsKLSAgICAgICAgbGVuZ3RoVmFs
dWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZvbnQoKS5zaXplKCk7CisgICAgICAgIGxlbmd0aFZh
bHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh1bml0ID09ICJleCIpIHsKQEAgLTI5Myw3ICsy
OTMsNyBAQCBib29sIHBhcnNlTWF0aE1MTmFtZWRTcGFjZShjb25zdCBTdHJpbmcmCiAgICAgICAg
ICAgICBsZW5ndGggPSAtNzsgICAgICAgIAogICAgIH0KICAgICBpZiAobGVuZ3RoKSB7Ci0gICAg
ICAgIGxlbmd0aFZhbHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnQoKS5zaXplKCkgLyAxODsKKyAg
ICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCkg
LyAxODsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5MSw4ICsxMTkxLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0
b3JQcgogICAgICAgICBtX29wZXJhdG9yRmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7CiAKICAgICAvLyBM
ZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSBpcyBzcGVjaWZpZWQgYXMgbXVsdGlwbGUgb2YgMS8x
OGVtLgotICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9udCgp
LnNpemUoKSAvIDE4OwotICAgIG1fdHJhaWxpbmdTcGFjZSA9IGVudHJ5LT5yc3BhY2UgKiBzdHls
ZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBtX2xlYWRpbmdTcGFjZSA9IGVudHJ5LT5sc3Bh
Y2UgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CisgICAgbV90cmFpbGluZ1Nw
YWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsK
IH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkK
QEAgLTEyMjksOSArMTIyOSw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJh
dG9yUHIKICAgICAgICAgbV9vcGVyYXRvckZsYWdzICY9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6RmVuY2UgfCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlNlcGFyYXRvcjsgLy8gVGhpcyBy
ZXNldHMgYWxsIGJ1dCB0aGUgRmVuY2UgYW5kIFNlcGFyYXRvciBwcm9wZXJ0aWVzLgogICAgIGVs
c2UKICAgICAgICAgbV9vcGVyYXRvckZsYWdzID0gMDsgLy8gVGhpcyByZXNldHMgYWxsIHRoZSBv
cGVyYXRvciBwcm9wZXJ0aWVzLgotICAgIG1fbGVhZGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9u
dCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgbGVhZGluZyBzcGFjZSB0byAidGhpY2ttYXRo
c3BhY2UiLgotICAgIG1fdHJhaWxpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkg
LyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCi0g
ICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250KCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6
ZSB0byAiMWVtIi4KKyAgICBtX2xlYWRpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkuc2l6ZSgpIC8gMTg7IC8vIFRoaXMgc2V0cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21hdGhz
cGFjZSIuCisgICAgbV90cmFpbGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5z
aXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFj
ZSIuCisgICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKTsgLy8gVGhp
cyBzZXRzIG1pbnNpemUgdG8gIjFlbSIuCiAgICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0
VW5pdDsgLy8gVGhpcyBzZXRzIG1heHNpemUgdG8gImluZmluaXR5Ii4KIAogICAgIGlmIChtX3Rl
eHRDb250ZW50KSB7CkBAIC0xMzU1LDcgKzEzNTUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjb21wdXRlUHJlZmVyCiAgICAgICAgIFJlbmRlck1hdGhNTFRva2VuOjpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICBpZiAoaXNJbnZpc2libGVPcGVyYXRvcigp
KSB7CiAgICAgICAgICAgICAvLyBJbiBzb21lIGZvbnRzLCBnbHlwaHMgZm9yIGludmlzaWJsZSBv
cGVyYXRvcnMgaGF2ZSBub256ZXJvIHdpZHRoLiBDb25zZXF1ZW50bHksIHdlIHN1YnRyYWN0IHRo
YXQgd2lkdGggaGVyZSB0byBhdm9pZCB3aWRlIGdhcHMuCi0gICAgICAgICAgICBHbHlwaERhdGEg
ZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50
LCBmYWxzZSk7CisgICAgICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgZmFsc2UpOwogICAgICAg
ICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IGFkdmFuY2VGb3JHbHlwaChkYXRhKTsKICAgICAgICAg
ICAgIEFTU0VSVChnbHlwaFdpZHRoIDw9IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAg
ICAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoIC09IGdseXBoV2lkdGg7CkBAIC0x
MzY0LDcgKzEzNjQsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVy
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCku
Zm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0g
YWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CiAgICAgICAg
IGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCkBAIC0xNTIxLDcgKzE1MjEs
NyBAQCBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2VtCiAgICAgaWYgKCFi
b3R0b20uZ2x5cGgpCiAgICAgICAgIGJvdHRvbS5nbHlwaCA9IGV4dGVuc2lvbi5nbHlwaDsKIAot
ICAgIHRvcC5mb250RGF0YSA9ICZzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAg
ICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
OwogICAgIGV4dGVuc2lvbi5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKICAgICBib3R0b20uZm9u
dERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgaWYgKG1pZGRsZS5nbHlwaCkKQEAgLTE1MzgsOCAr
MTUzOCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKIAogICAg
IEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7
CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKTsKLSAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250KCku
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAh
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIGlmICghcHJpbWFyeUZvbnRE
YXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEp
CiAgICAgICAgIHJldHVybiBkYXRhOwogCkBAIC0xNTcwLDggKzE1NzAsOCBAQCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlEYXRhIGRhdGE7CiAg
ICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlG
b250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIEdseXBoRGF0
YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7CiAgICAgCiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpICYmIGJhc2VH
bHlwaC5mb250RGF0YSA9PSAmcHJpbWFyeUZvbnREYXRhKSB7CiAgICAgICAgIFZlY3RvcjxHbHlw
aD4gc2l6ZVZhcmlhbnRzOwpAQCAtMTYxOCwxMiArMTYxOCwxMiBAQCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgICAgICAgICByZXR1cm4gZGF0YTsKIAogICAg
ICAgICAvLyBXZSBjb252ZXJ0IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRvIGEg
bGlzdCBvZiBnbHlwaCBkYXRhLgotICAgICAgICBHbHlwaERhdGEgdG9wID0gc3R5bGUoKS5mb250
KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxz
ZSk7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsK
LSAgICAgICAgR2x5cGhEYXRhIGJvdHRvbSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNo
YXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOworICAgICAgICBH
bHlwaERhdGEgdG9wID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOworICAgICAgICBHbHlwaERhdGEg
ZXh0ZW5zaW9uID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcihz
dHJldGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOworICAgICAgICBHbHlwaERh
dGEgYm90dG9tID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcihz
dHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOwogICAgICAgICBHbHlwaERhdGEg
bWlkZGxlOwogICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIpCi0gICAg
ICAgICAgICBtaWRkbGUgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3Ry
ZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1pZGRsZSA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFy
YWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsKICAgICAgICAgYXNzZW1ibHlEYXRhLnNldEdseXBo
QXNzZW1ibHlNb2RlKHRvcCwgZXh0ZW5zaW9uLCBib3R0b20sIG1pZGRsZSk7CiAgICAgfQogCkBA
IC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHls
ZSgpCiAgICAgICAgIG1fc3RyZXRjaHlEYXRhID0gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRv
cihtX3RleHRDb250ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0
Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBHbHlwaERhdGEg
YmFzZUdseXBoID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENv
bnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgICAgIEdseXBo
RGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAg
ICAgICAgIGZsb2F0IGJhc2VTaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFz
ZUdseXBoKSA6IGFkdmFuY2VGb3JHbHlwaChiYXNlR2x5cGgpOwogICAgICAgICBpZiAoc3RyZXRj
aFNpemUoKSA8PSBiYXNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4MDIsNyArMTgw
Miw3IEBAIExheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2wKIAogICAgIEds
eXBoQnVmZmVyIGJ1ZmZlcjsKICAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udERh
dGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhz
KHN0eWxlKCkuZm9udCgpLCAqZGF0YS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcmlnaW4pOwor
ICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRh
LmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1cm4gZ2x5cGhQYWlu
dFJlY3Q7CiB9CkBAIC0xODk4LDcgKzE4OTgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpwYWludChQYWludEluCiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNl
aWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgICAgIEZsb2F0UmVj
dCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSk7
CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCks
IG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBpbmZvLmNv
bnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50
KCkuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOworICAgICAgICBpbmZv
LmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9zdHJldGNoeURh
dGEudmFyaWFudCgpLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk4MCw3ICsxOTgwLDcgQEAgdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbgogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IoKQogewotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlG
b250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKICAgICBpZiAoIXByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpKQogICAgICAgICByZXR1
cm4gMDsKIApAQCAtMTk4OSw3ICsxOTg5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6dHJhaWxpbgogICAgIExheW91dFVuaXQgd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsKIAog
ICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd05vcm1hbCkgewotICAgICAgICBH
bHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0
Q29udGVudCgpLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgICAgICBH
bHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAg
ICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJhZGljYWxP
cGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6
OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQgZGVw
dGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnRE
YXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhhdmUg
YW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNhbCBkZXB0aCBh
IGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93QmFzZWxpbmUg
Kz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFTU0VSVChwcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0
b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0ZUxv
Z2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7
Ci0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsK
KyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRh
KCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxP
cGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxlKCkuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk5LDE3ICsxOTksMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHlsZSgp
CiAKICAgICAvLyBXZSBzZXQgc29tZSBjb25zdGFudHMgdG8gZHJhdyB0aGUgcmFkaWNhbCwgYXMg
ZGVmaW5lZCBpbiB0aGUgT3BlblR5cGUgTUFUSCB0YWJsZXMuCiAKLSAgICBtX3J1bGVUaGlja25l
c3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udCgpLnNpemUoKTsKKyAgICBtX3J1bGVUaGlja25lc3Mg
PSAwLjA1ZiAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7CiAKICAgICAvLyBGSVhNRTog
VGhlIHJlY29tbWVuZGVkIGRlZmF1bHQgZm9yIG1fdmVydGljYWxHYXAgaW4gZGlzcGxheXN0eWxl
IGlzIHJ1bGUgdGhpY2tuZXNzICsgMS80IHgtaGVpZ2h0IChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICBtX3ZlcnRpY2FsR2FwID0gMTEgKiBtX3J1
bGVUaGlja25lc3MgLyA0OwogICAgIG1fZXh0cmFBc2NlbmRlciA9IG1fcnVsZVRoaWNrbmVzczsK
LSAgICBMYXlvdXRVbml0IGtlcm5CZWZvcmVEZWdyZWUgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6
ZSgpIC8gMTg7Ci0gICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgp
LmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBMYXlvdXRVbml0IGtlcm5CZWZvcmVEZWdyZWUgPSA1
ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OworICAgIExheW91dFVuaXQga2Vy
bkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4Owog
ICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0gMC42ZjsKIAotICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAg
IGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1h
dGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgaWYgKGF1dG8qIG1hdGhEYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IG1fdmVydGljYWxHYXAgc2hvdWxkIHVzZSBSYWRpY2FsRGlzcGxheVN0
eWxlVmVydGljYWwgaW4gZGlzcGxheSBtb2RlIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICAgICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5n
ZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2Fs
VmVydGljYWxHYXApOwogICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRoRGF0YS0+Z2V0TWF0
aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVU
aGlja25lc3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxUb2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OCwxMSArODgsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxUb2tlbjo6dXBkYXRlU3R5
bGUoKQogICAgICAgICAvLyBUaGlzIHRyaWVzIHRvIGVtdWxhdGUgdGhlIGRlZmF1bHQgbWF0aHZh
cmlhbnQgdmFsdWUgb24gPG1pPiB1c2luZyB0aGUgQ1NTIGZvbnQtc3R5bGUgcHJvcGVydHkuCiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIHdoZW4gbWF0aHZhcmlhbnQg
aXMgaW1wbGVtZW50ZWQgKGh0dHA6Ly93a2J1Zy84NTczNSkgYW5kIHdoZW4gZm9udHMgd2l0aCBN
YXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMgY2hhcmFjdGVycyBhcmUgbW9yZSBwb3B1
bGFyLgogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKG5ld1N0eWxlLmdl
dCgpLmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0
b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgICAgIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS5mb250
U2VsZWN0b3IoKTsKICAgICAgICAgaWYgKCFtX2NvbnRhaW5zRWxlbWVudCAmJiBlbGVtZW50KCku
dGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3BhY2UoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKS5sZW5n
dGgoKSA9PSAxICYmICF0b2tlbkVsZW1lbnQuaGFzQXR0cmlidXRlKG1hdGh2YXJpYW50QXR0cikp
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKHRydWUpOwogICAgICAgICBp
ZiAobmV3U3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0g
ICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7Cisg
ICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0
b3IpOwogICAgIH0KIAogICAgIHdyYXBwZXItPnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVk
ZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRl
ICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveFN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnaW5hdGlvbi5oIgpAQCAtMjkzLDcgKzI5Myw3IEBA
IGJvb2wgUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKGNvbnMKIH0KIAogI2lmIEVOQUJM
RShJT1NfVEVYVF9BVVRPU0laSU5HKQotaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChj
b25zdCBGb250JiBmb250KQoraW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChjb25zdCBG
b250Q2FzY2FkZSYgZm9udCkKIHsKICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CiAgICAg
ICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaChmb250LmZvbnREZXNjcmlwdGlvbigpLmZpcnN0RmFt
aWx5KCkuaW1wbCgpKSwKQEAgLTMxNSw3ICszMTUsNyBAQCB1aW50MzJfdCBSZW5kZXJTdHlsZTo6
aGFzaEZvclRleHRBdXRvc2l6CiAgICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+bmJzcE1v
ZGU7CiAgICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrOwogICAgIGhhc2gg
Xj0gV1RGOjpGbG9hdEhhc2g8ZmxvYXQ+OjpoYXNoKGluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhl
aWdodC52YWx1ZSgpKTsKLSAgICBoYXNoIF49IGNvbXB1dGVGb250SGFzaChpbmhlcml0ZWQtPmZv
bnQpOworICAgIGhhc2ggXj0gY29tcHV0ZUZvbnRIYXNoKGluaGVyaXRlZC0+Zm9udENhc2NhZGUp
OwogICAgIGhhc2ggXj0gaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nOwogICAg
IGhhc2ggXj0gaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZzsKICAgICBoYXNoIF49
IGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbjsKQEAgLTMzOSw3ICszMzksNyBAQCBib29s
IFJlbmRlclN0eWxlOjplcXVhbEZvclRleHRBdXRvc2l6aW5nCiAgICAgICAgICYmIHJhcmVJbmhl
cml0ZWREYXRhLT5saW5lQnJlYWsgPT0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhLT5saW5lQnJl
YWsKICAgICAgICAgJiYgcmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSA9PSBvdGhlci0+
cmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eQogICAgICAgICAmJiBpbmhlcml0ZWQtPnNw
ZWNpZmllZExpbmVIZWlnaHQgPT0gb3RoZXItPmluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdo
dAotICAgICAgICAmJiBpbmhlcml0ZWQtPmZvbnQuZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhl
ci0+aW5oZXJpdGVkLT5mb250KQorICAgICAgICAmJiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmVx
dWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRlZC0+Zm9udENhc2NhZGUpCiAgICAg
ICAgICYmIGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZyA9PSBvdGhlci0+aW5o
ZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgICYmIGluaGVyaXRlZC0+
dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+dmVydGljYWxfYm9y
ZGVyX3NwYWNpbmcKICAgICAgICAgJiYgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uID09
IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJlY3Rpb24KQEAgLTU1MSw3ICs1NTEsNyBA
QCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjCiAjaWYgRU5BQkxFKElP
U19URVhUX0FVVE9TSVpJTkcpCiAgICAgICAgIHx8IGluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhl
aWdodCAhPSBvdGhlci5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRpZgotICAg
ICAgICB8fCBpbmhlcml0ZWQtPmZvbnQgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250CisgICAgICAg
IHx8IGluaGVyaXRlZC0+Zm9udENhc2NhZGUgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250Q2FzY2Fk
ZQogICAgICAgICB8fCBpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgIT0gb3Ro
ZXIuaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgIHx8IGluaGVy
aXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgIT0gb3RoZXIuaW5oZXJpdGVkLT52ZXJ0aWNh
bF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJlY3Rp
b24gIT0gb3RoZXIuaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC0xMTg0LDcgKzEx
ODQsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjpoeXBoZW5TCiAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGRlcGVuZCBvbiBsb2NhbGUuCiAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuTWludXNTdHJpbmcsICgmaHlwaGVu
TWludXMsIDEpKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBoeXBoZW5TdHJpbmcsICgmaHlwaGVuLCAxKSk7Ci0gICAgcmV0dXJuIGZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5nIDog
aHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuZ2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1p
bnVzU3RyaW5nOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjp0ZXh0RW1w
aGFzaXNNYXJrU3RyaW5nKCkgY29uc3QKQEAgLTEzNDAsMjAgKzEzNDAsMjAgQEAgY29uc3QgQW5p
bWF0aW9uKiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbgogICAgIHJldHVybiAwOwogfQogCi1jb25z
dCBGb250JiBSZW5kZXJTdHlsZTo6Zm9udCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9u
dDsgfQotY29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0
IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5mb250TWV0cmljcygpOyB9Ci1jb25zdCBGb250RGVz
Y3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBp
bmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNjYWRlJiBS
ZW5kZXJTdHlsZTo6Zm9udENhc2NhZGUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRD
YXNjYWRlOyB9Citjb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRyaWNzKCkg
Y29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250TWV0cmljcygpOyB9Citj
b25zdCBGb250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpOyB9CiBm
bG9hdCBSZW5kZXJTdHlsZTo6c3BlY2lmaWVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBmb250
RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpjb21w
dXRlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRT
aXplKCk7IH0KLWludCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhl
cml0ZWQtPmZvbnQucGl4ZWxTaXplKCk7IH0KK2ludCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBj
b25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpOyB9CiAKIGNv
bnN0IExlbmd0aCYgUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gcmFy
ZUluaGVyaXRlZERhdGEtPndvcmRTcGFjaW5nOyB9Ci1mbG9hdCBSZW5kZXJTdHlsZTo6bGV0dGVy
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5sZXR0ZXJTcGFjaW5nKCk7
IH0KK2Zsb2F0IFJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5o
ZXJpdGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCk7IH0KIAogYm9vbCBSZW5kZXJTdHls
ZTo6c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgdikKIHsKLSAgICBp
ZiAoaW5oZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKLSAgICAgICAgaW5o
ZXJpdGVkLmFjY2VzcygpLT5mb250ID0gRm9udCh2LCBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3Bh
Y2luZygpLCBpbmhlcml0ZWQtPmZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgaWYgKGluaGVyaXRl
ZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgeworICAgICAgICBpbmhlcml0
ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUodiwgaW5oZXJpdGVkLT5mb250
Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udENhc2NhZGUud29yZFNwYWNp
bmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xNDA0LDcgKzE0MDQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhMZW5n
dGggCiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUGVyY2VudDoKLSAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFsdWUucGVyY2VudCgpICog
Zm9udCgpLnNwYWNlV2lkdGgoKSAvIDEwMDsKKyAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFs
dWUucGVyY2VudCgpICogZm9udENhc2NhZGUoKS5zcGFjZVdpZHRoKCkgLyAxMDA7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVl
LnZhbHVlKCk7CkBAIC0xNDE3LDExICsxNDE3LDExIEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldFdv
cmRTcGFjaW5nKExlbmd0aCAKICAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gMDsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRXb3JkU3BhY2lu
Zyhmb250V29yZFNwYWNpbmcpOworICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENhc2NhZGUu
c2V0V29yZFNwYWNpbmcoZm9udFdvcmRTcGFjaW5nKTsKICAgICByYXJlSW5oZXJpdGVkRGF0YS5h
Y2Nlc3MoKS0+d29yZFNwYWNpbmcgPSBXVEY6Om1vdmUodmFsdWUpOwogfQogCi12b2lkIFJlbmRl
clN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5m
b250LnNldExldHRlclNwYWNpbmcodik7IH0KK3ZvaWQgUmVuZGVyU3R5bGU6OnNldExldHRlclNw
YWNpbmcoZmxvYXQgdikgeyBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNldExldHRl
clNwYWNpbmcodik7IH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6
ZSkKIHsKQEAgLTE0MzQsNyArMTQzNCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXpl
KGZsb2F0IHNpemUKICAgICBlbHNlCiAgICAgICAgIHNpemUgPSBzdGQ6Om1pbihtYXhpbXVtQWxs
b3dlZEZvbnRTaXplLCBzaXplKTsKIAotICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxl
Y3RvciA9IGZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRG
b250U2VsZWN0b3IgPSBmb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgIEZvbnREZXNj
cmlwdGlvbiBkZXNjKGZvbnREZXNjcmlwdGlvbigpKTsKICAgICBkZXNjLnNldFNwZWNpZmllZFNp
emUoc2l6ZSk7CiAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CkBAIC0xNDQ4LDcgKzE0
NDgsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXplCiAjZW5kaWYK
IAogICAgIHNldEZvbnREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBmb250KCkudXBkYXRlKGN1cnJl
bnRGb250U2VsZWN0b3IpOworICAgIGZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2Vs
ZWN0b3IpOwogfQogCiB2b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFkb3dFeHRlbnQoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93LCBMYXlvdXRVbml0ICZ0b3AsIExheW91dFVuaXQgJnJpZ2h0LCBMYXlv
dXRVbml0ICZib3R0b20sIExheW91dFVuaXQgJmxlZnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTc4NDE4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBDb250ZW50RGF0YTsKIGNsYXNzIENvdW50
ZXJDb250ZW50OwogY2xhc3MgQ3Vyc29yTGlzdDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1j
bGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGb250TWV0cmljczsKIGNsYXNz
IEludFJlY3Q7CiBjbGFzcyBNYXNrSW1hZ2VPcGVyYXRpb247CkBAIC02ODksNyArNjg5LDcgQEAg
cHVibGljOgogICAgIEVDbGVhciBjbGVhcigpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9m
bGFncy5jbGVhcigpOyB9CiAgICAgRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KCkgY29uc3QgeyBy
ZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLnRhYmxlTGF5b3V0KCk7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIGZs
b2F0IHNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAkocmV2aXNpb24g
MTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgaW5saW5lIFN0eWxlSW5o
ZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZQogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5H
KQogICAgICwgc3BlY2lmaWVkTGluZUhlaWdodChvLnNwZWNpZmllZExpbmVIZWlnaHQpCiAjZW5k
aWYKLSAgICAsIGZvbnQoby5mb250KQorICAgICwgZm9udENhc2NhZGUoby5mb250Q2FzY2FkZSkK
ICAgICAsIGNvbG9yKG8uY29sb3IpCiAgICAgLCB2aXNpdGVkTGlua0NvbG9yKG8udmlzaXRlZExp
bmtDb2xvcikKIHsKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBTdHlsZUluaGVyaXRlZERhdGE6Om9w
ZXJhdG9yPT0oY29ucwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAgICAgICAm
JiBzcGVjaWZpZWRMaW5lSGVpZ2h0ID09IG8uc3BlY2lmaWVkTGluZUhlaWdodAogI2VuZGlmCi0g
ICAgICAgICYmIGZvbnQgPT0gby5mb250CisgICAgICAgICYmIGZvbnRDYXNjYWRlID09IG8uZm9u
dENhc2NhZGUKICAgICAgICAgJiYgY29sb3IgPT0gby5jb2xvcgogICAgICAgICAmJiB2aXNpdGVk
TGlua0NvbG9yID09IG8udmlzaXRlZExpbmtDb2xvcgogICAgICAgICAmJiBob3Jpem9udGFsX2Jv
cmRlcl9zcGFjaW5nID09IG8uaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAko
cmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
SW5oZXJpdGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5l
IFN0eWxlSW5oZXJpdGVkRGF0YV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAg
LTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIExlbmd0aCBzcGVjaWZpZWRMaW5lSGVpZ2h0Owog
I2VuZGlmCiAKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udENhc2NhZGU7CiAg
ICAgQ29sb3IgY29sb3I7CiAgICAgQ29sb3IgdmlzaXRlZExpbmtDb2xvcjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTMgKzIyNSwxMyBA
QCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OnVwZGF0ZVNjYWxlZEZvCiAgICAgY29tcHV0ZU5l
d1NjYWxlZEZvbnRGb3JTdHlsZSgqdGhpcywgc3R5bGUoKSwgbV9zY2FsaW5nRmFjdG9yLCBtX3Nj
YWxlZEZvbnQpOwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2Fs
ZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udCYgc2NhbGVkRm9udCkKK3Zv
aWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
JiBzY2FsaW5nRmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCkKIHsKICAgICAvLyBBbHRl
ciBmb250LXNpemUgdG8gdGhlIHJpZ2h0IG9uLXNjcmVlbiB2YWx1ZSB0byBhdm9pZCBzY2FsaW5n
IHRoZSBnbHlwaHMgdGhlbXNlbHZlcywgZXhjZXB0IHdoZW4gR2VvbWV0cmljUHJlY2lzaW9uIGlz
IHNwZWNpZmllZAogICAgIHNjYWxpbmdGYWN0b3IgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxj
dWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IocmVuZGVyZXIpOwogICAgIGlmIChzY2Fs
aW5nRmFjdG9yID09IDEgfHwgIXNjYWxpbmdGYWN0b3IgfHwgc3R5bGUuZm9udERlc2NyaXB0aW9u
KCkudGV4dFJlbmRlcmluZ01vZGUoKSA9PSBHZW9tZXRyaWNQcmVjaXNpb24pIHsKICAgICAgICAg
c2NhbGluZ0ZhY3RvciA9IDE7Ci0gICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250KCk7Cisg
ICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpj
b21wdXRlTmV3U2NhbAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJldHRlciBoYW5kbGUgdGhl
IGNhc2Ugd2hlbiB3ZSBjb21wdXRlIHZlcnkgc21hbGwgZm9udHMgYmVsb3cgKGJlbG93IDFwdCku
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250
U2l6ZUZyb21TcGVjaWZpZWRTaXplRm9yU1ZHSW5saW5lVGV4dChmb250RGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzY2FsaW5nRmFj
dG9yLCByZW5kZXJlci5kb2N1bWVudCgpKSk7CiAKLSAgICBzY2FsZWRGb250ID0gRm9udChmb250
RGVzY3JpcHRpb24sIDAsIDApOworICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShmb250RGVz
Y3JpcHRpb24sIDAsIDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHJlbmRlcmVyLmRvY3VtZW50
KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJ
KHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVm
IFJlbmRlclNWR0lubGluZVRleHRfaAogI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVUZXh0X2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJl
bmRlclRleHQuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oIgogI2luY2x1
ZGUgIlRleHQuaCIKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgogICAgIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gJm1fbGF5b3V0QXR0cmlidXRl
czsgfQogCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGlu
Z0ZhY3RvcjsgfQotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlZEZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQogICAgIHZvaWQgdXBkYXRlU2NhbGVkRm9udCgpOwot
ICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udCYg
c2NhbGVkRm9udCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHls
ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0JiBzY2FsaW5n
RmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCk7CiAKICAgICAvLyBQcmVzZXJ2ZXMgZmxv
YXRpbmcgcG9pbnQgcHJlY2lzaW9uIGZvciB0aGUgdXNlIGluIERSVC4gSXQga25vd3MgaG93IHRv
IHJvdW5kIGFuZCBkb2VzIGEgYmV0dGVyIGpvYiB0aGFuIGVuY2xvc2luZ0ludFJlY3QuCiAgICAg
RmxvYXRSZWN0IGZsb2F0TGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OwpAQCAtNjUsNyArNjUsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IGNy
ZWF0ZVRleHRCb3goKSBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc2NhbGluZ0ZhY3RvcjsKLSAg
ICBGb250IG1fc2NhbGVkRm9udDsKKyAgICBGb250Q2FzY2FkZSBtX3NjYWxlZEZvbnQ7CiAgICAg
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMgbV9sYXlvdXRBdHRyaWJ1dGVzOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgRmxvYXRS
ZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlYwogICAgIGZsb2F0IHNjYWxpbmdGYWN0
b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rv
cik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250
KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSByZW5kZXJlcigpLnNjYWxl
ZEZvbnQoKTsKICAgICBjb25zdCBGb250TWV0cmljcyYgc2NhbGVkRm9udE1ldHJpY3MgPSBzY2Fs
ZWRGb250LmZvbnRNZXRyaWNzKCk7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50
LngsIGZyYWdtZW50LnkpOwogICAgIGlmIChzY2FsaW5nRmFjdG9yICE9IDEpCkBAIC0xNzIsNyAr
MTcyLDcgQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAogCiBzdGF0
aWMgaW5saW5lIGJvb2wgdGV4dFNob3VsZEJlUGFpbnRlZChjb25zdCBSZW5kZXJTVkdJbmxpbmVU
ZXh0JiB0ZXh0UmVuZGVyZXIpCiB7Ci0gICAgLy8gRm9udDo6cGl4ZWxTaXplKCksIHJldHVybnMg
Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5zICJpbnQo
eCArIDAuNSkiLgorICAgIC8vIEZvbnRDYXNjYWRlOjpwaXhlbFNpemUoKSwgcmV0dXJucyBGb250
RGVzY3JpcHRpb246OmNvbXB1dGVkUGl4ZWxTaXplKCksIHdoaWNoIHJldHVybnMgImludCh4ICsg
MC41KSIuCiAgICAgLy8gSWYgdGhlIGFic29sdXRlIGZvbnQgc2l6ZSBvbiBzY3JlZW4gaXMgYmVs
b3cgeD0wLjUsIGRvbid0IHJlbmRlciBhbnl0aGluZy4KICAgICByZXR1cm4gdGV4dFJlbmRlcmVy
LnNjYWxlZEZvbnQoKS5waXhlbFNpemUoKTsKIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBUZXh0UnVu
IFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAgLCBkaXJl
Y3Rpb24oKQogICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRsT3Jk
ZXJpbmcoKSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAg
IGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlm
IChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAg
ICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZShyZW5kZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsK
QEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHBvc2l0aW9uT2Zmc2V0Rm9y
RGVjCiAgICAgcmV0dXJuIDAuMGY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgdGhpY2tuZXNz
Rm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBp
bmxpbmUgZmxvYXQgdGhpY2tuZXNzRm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gRklYTUU6IEZvciBTVkcgRm9udHMgd2UgbmVl
ZCB0byB1c2UgdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgPGZvbnQtZmFjZT4gaWYgc3Bl
Y2lmaWVkLgogICAgIC8vIENvbXBhdGlibGUgd2l0aCBCYXRpay9PcGVyYQpAQCAtNTM1LDcgKzUz
NSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAgICBSZW5k
ZXJTdHlsZSYgZGVjb3JhdGlvblN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxlKCk7CiAK
ICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICBGb250IHNjYWxlZEZvbnQ7CisgICAg
Rm9udENhc2NhZGUgc2NhbGVkRm9udDsKICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRl
TmV3U2NhbGVkRm9udEZvclN0eWxlKGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlvblN0eWxl
LCBzY2FsaW5nRmFjdG9yLCBzY2FsZWRGb250KTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7
CiAKQEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdp
dGhTaGFkCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3Rv
cigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxl
ZEZvbnQgPSByZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
c2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOwogICAgIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CiAKICAgICBGbG9hdFBvaW50IHRleHRP
cmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlzaW9uIDE3
ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIFNWR1RleHRMYXlv
dXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVy
cyA9IFN0cmluZ1ZpZXcodGV4dC0+dGV4dCgpKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBj
b25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpOwogCiAgICAgU1ZHVGV4dExheW91dEVuZ2luZVNw
YWNpbmcgc3BhY2luZ0xheW91dChmb250KTsKICAgICBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUgYmFzZWxpbmVMYXlvdXQoZm9udCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZShjb25zdCBGb250JiBmb250KQorU1ZHVGV4dExheW91dEVuZ2luZUJhc2Vs
aW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9udENhc2NhZGUmIGZvbnQp
CiAgICAgOiBtX2ZvbnQoZm9udCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAkocmV2
aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNs
YXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdSZW5kZXJTdHls
ZTsKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgU1ZHVGV4dE1ldHJpY3M7CiBjbGFzcyBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZSk7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dExheW91dEVuZ2luZUJh
c2VsaW5lKGNvbnN0IEZvbnQmKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29u
c3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZsb2F0IGNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQoY29u
c3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0KSBjb25zdDsKICAg
ICBmbG9hdCBjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdDsKQEAgLTQ1LDcgKzQ1
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBFQWxpZ25tZW50QmFzZWxpbmUgZG9taW5hbnRC
YXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udCYgbV9mb250
OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIgogCi0jaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4
dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAKQEAgLTMyLDcgKzMyLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4
dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCkKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKDApCiB7CkBA
IC05OCw3ICs5OCw3IEBAIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWwK
IAogICAgIGZsb2F0IHNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpICsga2VybmluZzsK
ICAgICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBsYXN0Q2hhcmFjdGVyICYmIG1fZm9udC53b3Jk
U3BhY2luZygpKSB7Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFy
YWN0ZXIpICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQorICAgICAgICBp
ZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYgIUZvbnRD
YXNjYWRlOjp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQogICAgICAgICAgICAgc3BhY2lu
ZyArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
LmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2Fk
ZTsKIGNsYXNzIFNWR1JlbmRlclN0eWxlOwogY2xhc3MgU1ZHRWxlbWVudDsKIApAQCAtMzIsMTMg
KzMyLDEzIEBAIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcpOwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0IEZvbnQm
KTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2FzY2FkZSYpOwog
CiAgICAgZmxvYXQgY2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBjb25z
dCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCk7CiAgICAgZmxvYXQgY2FsY3Vs
YXRlQ1NTS2VybmluZ0FuZFNwYWNpbmcoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50
KiBsZW5ndGhDb250ZXh0LCBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3Rlcik7CiAKIHByaXZh
dGU6Ci0gICAgY29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2Zv
bnQ7CiAgICAgY29uc3QgVUNoYXIqIG1fbGFzdENoYXJhY3RlcjsKIAogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
U1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWRwogICAgIGZsb2F0IHNjYWxp
bmdGYWN0b3IgPSB0ZXh0UmVuZGVyZXIuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2Fs
aW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVuZGVyZXIu
c2NhbGVkRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gdGV4dFJl
bmRlcmVyLnNjYWxlZEZvbnQoKTsKICAgICBpbnQgbGVuZ3RoID0gMDsKIAogICAgIC8vIENhbGN1
bGF0ZSB3aWR0aC9oZWlnaHQgdXNpbmcgdGhlIHNjYWxlZCBmb250LCBkaXZpZGUgdGhpcyByZXN1
bHQgYnkgdGhlIHNjYWxpbmdGYWN0b3IgYWZ0ZXJ3YXJkcy4KQEAgLTcwLDcgKzcwLDcgQEAgVGV4
dFJ1biBTVkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bgogICAgICAgICAgICAgICAgICwg
c3R5bGUuZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGlzT3ZlcnJpZGUoc3R5bGUudW5p
Y29kZUJpZGkoKSkgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUu
Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0
UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHRleHQp
KTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtOTEsNyArOTEsNyBAQCBT
VkdUZXh0TWV0cmljcyBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoCiAKIFNWR1RleHRNZXRyaWNz
OjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25lZCBwb3Np
dGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCwgY29uc3QgU3RyaW5nJiBnbHlwaE5h
bWUpCiB7Ci0gICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udCgpLnByaW1h
cnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7CiAgICAg
ZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHQuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChz
Y2FsaW5nRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsOSArMTAwLDkgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxk
ZXI6OmluaXRpYWxpemVNZQogICAgIG1fY29tcGxleFN0YXJ0VG9DdXJyZW50TWV0cmljcyA9IFNW
R1RleHRNZXRyaWNzKCk7CiAgICAgbV90b3RhbFdpZHRoID0gMDsKIAotICAgIGNvbnN0IEZvbnQm
IHNjYWxlZEZvbnQgPSB0ZXh0LnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
c2NhbGVkRm9udCA9IHRleHQuc2NhbGVkRm9udCgpOwogICAgIG1fcnVuID0gU1ZHVGV4dE1ldHJp
Y3M6OmNvbnN0cnVjdFRleHRSdW4odGV4dCk7Ci0gICAgbV9pc0NvbXBsZXhUZXh0ID0gc2NhbGVk
Rm9udC5jb2RlUGF0aChtX3J1bikgPT0gRm9udDo6Q29tcGxleDsKKyAgICBtX2lzQ29tcGxleFRl
eHQgPSBzY2FsZWRGb250LmNvZGVQYXRoKG1fcnVuKSA9PSBGb250Q2FzY2FkZTo6Q29tcGxleDsK
IAogICAgIGlmIChtX2lzQ29tcGxleFRleHQpCiAgICAgICAgIG1fc2ltcGxlV2lkdGhJdGVyYXRv
ciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NDE4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlubGluZSBj
b25zdCBTVkdGb250RGF0YSogc3ZnRm9udAogICAgIHJldHVybiBzdmdGb250RGF0YTsKIH0KIAot
ZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQs
IFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAorZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KCZmb250LCBydW4pOwogICAgIEdseXBoQnVmZmVy
IGdseXBoQnVmZmVyOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdTVkcKICAgICB9CiB9CiAKLXN0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0ds
eXBoRm9yRm9udChjb25zdCBGb250JiBmb250KQorc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5
cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwogICAgIGlm
ICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQpAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRp
YyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb24KICAgICByZXR1cm4gR2x5cGhEYXRh
KGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250RGF0YSk7CiB9CiAKLUds
eXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJh
Y3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5j
ZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCitHbHlwaERhdGEg
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFj
dGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNl
TGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkKIHsKICAgICBHbHlw
aERhdGEgZ2x5cGhEYXRhID0gZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBt
aXJyb3IsIEF1dG9WYXJpYW50KTsKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkKQEAgLTM0Miw3
ICszNDIsNyBAQCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAg
Ly8gVGhlIGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBGb3Igc2ltcGxp
Y2l0eSB3ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250ZXh0LXNlbnNp
dGl2ZWx5LgogICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9uID0gZm9udC5m
b250RGVzY3JpcHRpb24oKTsKICAgICBmYWxsYmFja0Rlc2NyaXB0aW9uLnNldEZhbWlsaWVzKFZl
Y3RvcjxBdG9taWNTdHJpbmc+IHsgc2Fuc1NlcmlmRmFtaWx5IH0pOwotICAgIEZvbnQgZmFsbGJh
Y2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250Lndv
cmRTcGFjaW5nKCkpOworICAgIEZvbnRDYXNjYWRlIGZhbGxiYWNrRm9udChmYWxsYmFja0Rlc2Ny
aXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygpKTsKICAgICBm
YWxsYmFja0ZvbnQudXBkYXRlKGZvbnQuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgcmV0dXJuIGZh
bGxiYWNrRm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBtaXJyb3IsIEF1dG9W
YXJpYW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dF9oCiAjZGVmaW5lIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKIAotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRS
dW4uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KICAgICB2b2lkIHNldEFjdGl2ZVBhaW50
aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBhaW50aW5n
UmVzb3VyY2UgPSBvYmplY3Q7IH0KIAotICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZv
ckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVy
LCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVu
Z3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRl
JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1
cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6
ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9u
dCYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0Zv
bnQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVk
LCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGFw
cGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlw
aEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODQx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSb290
SW5saW5lQm94LmgiCiAKQEAgLTg5LDcgKzg5LDcgQEAgR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVy
Zmxvd0ZvckRlY29yYXRpbwogICAgIGZsb2F0IHdhdnlPZmZzZXQ7CiAgICAgICAgIAogICAgIFRl
eHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlID0gbGluZVN0eWxlLnRleHREZWNvcmF0
aW9uU3R5bGUoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUuZm9udCgpLmZvbnRNZXRy
aWNzKCkuZmxvYXRIZWlnaHQoKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUuZm9udENh
c2NhZGUoKS5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiAgICAgR2x5cGhPdmVyZmxvdyBv
dmVyZmxvd1Jlc3VsdDsKICAgICAKICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNv
cmF0aW9uU3R5bGVXYXZ5KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuaAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvSW5s
aW5lVGV4dEJveFN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5k
ZWYgSW5saW5lVGV4dEJveFN0eWxlX2gKICNkZWZpbmUgSW5saW5lVGV4dEJveFN0eWxlX2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE3ODQx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gcmVzb2x2
ZUZvckRvY3VtZW50KGNvbnMKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0
b3IgPSBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSA/IGRvY3VtZW50LnN0eWxlUmVz
b2x2ZXJJZkV4aXN0cygpLT5mb250U2VsZWN0b3IoKSA6IG51bGxwdHI7Ci0gICAgZG9jdW1lbnRT
dHlsZS5nZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgZG9jdW1lbnRTdHls
ZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgcmV0dXJu
IGRvY3VtZW50U3R5bGU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVUcmVlLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OCw3ICs5NzgsNyBAQCB2b2lk
IHJlc29sdmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhCiAgICAgICAgIGlmIChTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7
CiAgICAgICAgICAgICBpZiAoc2V0dGluZ3MtPmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBo
cygpICYmIHN0eWxlUmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS5nZXQo
KS5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAg
ICAgICAgICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKHN0eWxlUmVz
b2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0eWxlOjpDaGFu
Z2UgZG9jdW1lbnRDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRTdHlsZS5nZXQoKSwg
ZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4MCw5IEBAIHZvaWQgY29tcHV0
ZU5vcm1hbGl6ZWRTcGFjZXMoY29uc3QgVGV4dFIKICAgICBpZiAobm9ybWFsaXplZFNwYWNlc1N0
cmluZ0NhY2hlLmxlbmd0aCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihydW4uY2hhcmFjdGVy
c0xlbmd0aCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChydW4uaXM4Qml0KCkpCi0gICAg
ICAgIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhy
dW4uY2hhcmFjdGVyczgoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAgIG5vcm1h
bGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMocnVu
LmNoYXJhY3RlcnM4KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwogICAgIGVsc2UKLSAgICAg
ICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1
bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAgIG5vcm1h
bGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMocnVu
LmNoYXJhY3RlcnMxNigpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBpZiAobWlycm9y
KQogICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBjcmVhdGVTdHJpbmdXaXRo
TWlycm9yZWRDaGFyYWN0ZXJzKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVu
dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAjaW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSEtlcm5FbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lv
bnMuaCIKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNl
U3JjRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2Niw4IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZvbnRDYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBAIC00NjMsMTIgKzQ2MywxMiBA
QCB2b2lkIFdlYlByb2Nlc3M6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91CiAKIHZvaWQgV2ViUHJv
Y2Vzczo6c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCBhbHdheXNVc2VDb21w
bGV4VGV4dCkKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRDb2RlUGF0aChhbHdheXNVc2VDb21w
bGV4VGV4dCA/IFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250OjpBdXRvKTsK
KyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRl
eHQgPyBXZWJDb3JlOjpGb250Q2FzY2FkZTo6Q29tcGxleCA6IFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpBdXRvKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRTaG91bGRVc2VGb250U21vb3RoaW5n
KGJvb2wgdXNlRm9udFNtb290aGluZykKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7CisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGU6
OnNldFNob3VsZFVzZVNtb290aGluZyh1c2VGb250U21vb3RoaW5nKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbGFuZ3VhZ2VzKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDIsNyAr
ODAyLDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAgIGlm
ICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKICAg
ICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25T
dGFydCgmZnJhbWUsIG5vZGVUb1JlbW92ZSkpIHsKLSAgICAgICAgICAgIENURm9udFJlZiBmb250
ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICAgICAg
ICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCk7CiAgICAgICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMg
PSBmb250ID8gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgOiAwOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAodHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCShy
ZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlBy
b2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9j
YWxpemVkU3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KQEAgLTE5NCw3ICsxOTQsNyBAQCB2
b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByCiAgICAgbV9jb21wb3NpdGlu
Z1JlbmRlclNlcnZlclBvcnQgPSBXVEY6Om1vdmUocGFyYW1ldGVycy5hY2NlbGVyYXRlZENvbXBv
c2l0aW5nUG9ydCk7CiAgICAgbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCA9IHBhcmFtZXRlcnMu
cHJlc2VudGVyQXBwbGljYXRpb25QaWQ7CiAgICAgbV9zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJz
dGl0dXRpb24gPSBwYXJhbWV0ZXJzLnNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsK
LSAgICBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNob3Vs
ZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1cmVz
IDogMCk7CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKHBh
cmFtZXRlcnMuc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCA/IEtlcm5p
bmcgfCBMaWdhdHVyZXMgOiAwKTsKIAogICAgIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6UmVsaWVm
TG9nZ2VyOjpzZXRMb2dnaW5nRW5hYmxlZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU1lbW9yeVBy
ZXNzdXJlUmVsaWVmTG9nZ2luZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
S2l0TlNTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKIAogI2ltcG9y
dCA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KQEAgLTkyLDcgKzkyLDcgQEAgLSAodm9pZClfd2Vi
X2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IAogICAgICAgICBpZiAoIWZsaXBwZWQpCiAgICAg
ICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKIAotICAgICAgICBG
b250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSks
ICFbbnNDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSwgZm9udFNtb290aGluZ0lzQWxsb3dlZCA/
IEF1dG9TbW9vdGhpbmcgOiBBbnRpYWxpYXNlZCk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNv
cmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbbnNDb250
ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSwgZm9udFNtb290aGluZ0lzQWxsb3dlZCA/IEF1dG9TbW9v
dGhpbmcgOiBBbnRpYWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCks
IGxlbmd0aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkBAIC0xMzgs
NyArMTM4LDcgQEAgLSAoZmxvYXQpX3dlYl93aWR0aFdpdGhGb250OihOU0ZvbnQgKilmbwogICAg
IFtzZWxmIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAKICAgICBpZiAoY2FuVXNlRmFz
dFJlbmRlcmVyKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgRm9udCB3ZWJDb3Jl
Rm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICAgICAg
Rm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2lu
dFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1Rv
U2NyZWVuXSk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAg
ICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogICAgICAgICByZXR1cm4gd2ViQ29y
ZUZvbnQud2lkdGgocnVuKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU3RyaW5n
VHJ1bmNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU3Ry
aW5nVHJ1bmNhdG9yLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDIx
IEBACiAjaW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKIAogI2ltcG9ydCAiV2ViU3lzdGVt
SW50ZXJmYWNlLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
Rm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udFBsYXRmb3JtRGF0YS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNpbXBvcnQgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogCi1zdGF0aWMgV2ViQ29yZTo6Rm9udCYgZm9udEZyb21OU0Zv
bnQoTlNGb250ICpmb250KQorc3RhdGljIFdlYkNvcmU6OkZvbnRDYXNjYWRlJiBmb250RnJvbU5T
Rm9udChOU0ZvbnQgKmZvbnQpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0
cjxOU0ZvbnQ+PiBjdXJyZW50TlNGb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJD
b3JlOjpGb250PiBjdXJyZW50Rm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29y
ZTo6Rm9udENhc2NhZGU+IGN1cnJlbnRGb250OwogICAgIGlmIChbZm9udCBpc0VxdWFsOmN1cnJl
bnROU0ZvbnQuZ2V0KCkuZ2V0KCldKQogICAgICAgICByZXR1cm4gY3VycmVudEZvbnQ7CiAgICAg
Y3VycmVudE5TRm9udC5nZXQoKSA9IGZvbnQ7Ci0gICAgY3VycmVudEZvbnQuZ2V0KCkgPSBXZWJD
b3JlOjpGb250KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXpl
XSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVl
bl0pOworICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9udENhc2NhZGUoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgcmV0dXJu
IGN1cnJlbnRGb250OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAxNzg0MTgpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTgwLDcgKzgwLDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKIAogICAgICAgICBQ
b3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5pdGVtU3R5bGUoaSk7CiAgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgaWYgKHN0eWxlLmZvbnQoKSAh
PSBGb250KCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLmZvbnQoKSAhPSBGb250Q2FzY2FkZSgpKSB7
CiAgICAgICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKICAgICAgICAgICAgICAg
ICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1E
YXRhKCkuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2
aXNpb24gMTc4NDE4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDkwLDcgKzE0OTAsNyBAQCAtIChCT09MKV92aWV3Q2xhc3M6KENs
YXNzICopdkNsYXNzIGFuZFJlCiAKICsgKHZvaWQpX3NldEFsd2F5c1VzZXNDb21wbGV4VGV4dENv
ZGVQYXRoOihCT09MKWYKIHsKLSAgICBGb250OjpzZXRDb2RlUGF0aChmID8gRm9udDo6Q29tcGxl
eCA6IEZvbnQ6OkF1dG8pOworICAgIEZvbnRDYXNjYWRlOjpzZXRDb2RlUGF0aChmID8gRm9udENh
c2NhZGU6OkNvbXBsZXggOiBGb250Q2FzY2FkZTo6QXV0byk7CiB9CiAKICsgKHZvaWQpX3NldEFs
bG93c1JvdW5kaW5nSGFja3M6KEJPT0wpYWxsb3dzUm91bmRpbmdIYWNrcwpAQCAtMzE2OCwxMiAr
MzE2OCwxMiBAQCAtIChCT09MKV9kYXNoYm9hcmRCZWhhdmlvcjooV2ViRGFzaGJvYXJkCiAKICsg
KHZvaWQpX3NldFNob3VsZFVzZUZvbnRTbW9vdGhpbmc6KEJPT0wpZgogewotICAgIEZvbnQ6OnNl
dFNob3VsZFVzZVNtb290aGluZyhmKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21v
b3RoaW5nKGYpOwogfQogCiArIChCT09MKV9zaG91bGRVc2VGb250U21vb3RoaW5nCiB7Ci0gICAg
cmV0dXJuIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpOworICAgIHJldHVybiBGb250Q2FzY2Fk
ZTo6c2hvdWxkVXNlU21vb3RoaW5nKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDcx
MCw3ICs0NzEwLDcgQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgZ3JhbW1hckNoZWNraW5nRW5h
YmxlZCA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYkdyYW1tYXJDaGVja2luZ0VuYWJsZWRdOwog
I2VuZGlmCiAKLSAgICBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERl
ZmF1bHRzS2V5XSA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKKyAgICBGb250Q2FzY2FkZTo6
c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0
S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tleV0gPyBLZXJuaW5n
IHwgTGlnYXR1cmVzIDogMCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGF1dG9tYXRpY1F1
b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCA9IFtzZWxmIF9zaG91bGRBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkJlRW5hYmxlZF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244655</attachid>
            <date>2015-01-14 15:46:04 -0800</date>
            <delta_ts>2015-01-15 02:21:05 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-3.patch</filename>
            <type>text/plain</type>
            <size>401792</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNCAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkZml4IGFmdGVyIHIx
Nzg0MzQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjA0OSw4ICsyMDQ5
LDggQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJvdW5kZWRSZWN0LmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3Jp
cHRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMTMgQEAgX19aTjdXZWJDb3JlMTFDYWNo
ZWRJbWFnZTE2aW1hZ2VGb3JSZW5kZQogX19aTjdXZWJDb3JlMTFGaWxlQ2hvb3NlcjEwY2hvb3Nl
RmlsZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMWNob29zZUZp
bGVzRVJLTjNXVEY2VmVjdG9ySU5TMV82U3RyaW5nRUxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dF
RUUKIF9fWk43V2ViQ29yZTExRmlsZUNob29zZXJEMUV2CitfX1pON1dlYkNvcmUxMUZvbnRDYXNj
YWRlMTFzZXRDb2RlUGF0aEVOUzBfOENvZGVQYXRoRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2Fk
ZTE4c2hvdWxkVXNlU21vb3RoaW5nRXYKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUyMXNldFNo
b3VsZFVzZVNtb290aGluZ0ViCitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjlzZXREZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlc0VqCitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlQzFFUktOU18x
NkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290aGluZ01vZGVFCitfX1pON1dlYkNvcmUx
MUZvbnRDYXNjYWRlQzFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZWFTRVJLUzBfCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFsb2FkQXJjaGl2ZUVOM1dURjEwUGFzc1JlZlB0cklOU183
QXJjaGl2ZUVFRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjExc2hvdWxkQ2xvc2VFdgogX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjExdXJsU2VsZWN0ZWRFUktOU18zVVJMRVJLTjNXVEY2U3Ry
aW5nRU5TNF8xMFBhc3NSZWZQdHJJTlNfNUV2ZW50RUVFTlNfMTFMb2NrSGlzdG9yeUVOU18xOUxv
Y2tCYWNrRm9yd2FyZExpc3RFTlNfMThTaG91bGRTZW5kUmVmZXJyZXJFCkBAIC02NTUsOSArNjYy
LDkgQEAgX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnRDMUVSTlNfMTRTUQogX19aTjdXZWJD
b3JlMTVTUUxpdGVTdGF0ZW1lbnREMUV2CiBfX1pON1dlYkNvcmUxNVNjcm9sbEFsaWdubWVudDE3
YWxpZ25DZW50ZXJBbHdheXNFCiBfX1pON1dlYkNvcmUxNVNjcm9sbEFsaWdubWVudDE5YWxpZ25U
b0VkZ2VJZk5lZWRlZEUKLV9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTNyaWdodFRydW5j
YXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NP
ck5vdEUKLV9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0ZUVSS04z
V1RGNlN0cmluZ0VmUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1f
X1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3aWR0aEVSS04zV1RGNlN0cmluZ0VSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5n
VHJ1bmNhdG9yMTNyaWdodFRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzExRm9udENhc2Nh
ZGVFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQorX19aTjdXZWJDb3JlMTVTdHJpbmdU
cnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzExRm9udENhc2Nh
ZGVFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQorX19aTjdXZWJDb3JlMTVTdHJpbmdU
cnVuY2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVu
YWJsZVJvdW5kaW5nSGFja3NPck5vdEUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJpZGdlMTFs
b2FkUmVxdWVzdEVSS05TXzE2RnJhbWVMb2FkUmVxdWVzdEVOU18xMUlucHV0U291cmNlRQogX19a
TjdXZWJDb3JlMTVVc2VySW5wdXRCcmlkZ2UxMXJlbG9hZEZyYW1lRVBOU181RnJhbWVFYk5TXzEx
SW5wdXRTb3VyY2VFCiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTEydHJ5Q2xvc2VQYWdl
RU5TXzExSW5wdXRTb3VyY2VFCkBAIC0xMTI2LDEzICsxMTMzLDYgQEAgX19aTjdXZWJDb3JlNDBk
ZWZhdWx0VGV4dEVuY29kaW5nTmFtZUZvcgogX19aTjdXZWJDb3JlNDByZXN0cmljdE1pbmltdW1T
Y2FsZUZhY3RvclRvVmlld3BvcnRTaXplRVJOU18xOFZpZXdwb3J0QXR0cmlidXRlc0VOU183SW50
U2l6ZUVmCiBfX1pON1dlYkNvcmU0MlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNv
bXBvbmVudEVQNU5TVVJMMThDRlVSTENvbXBvbmVudFR5cGUKIF9fWk43V2ViQ29yZTQ3YXR0cmli
dXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnNFUDE4TlNBdHRyaWJ1dGVk
U3RyaW5nCi1fX1pON1dlYkNvcmU0Rm9udDExc2V0Q29kZVBhdGhFTlMwXzhDb2RlUGF0aEUKLV9f
Wk43V2ViQ29yZTRGb250MThzaG91bGRVc2VTbW9vdGhpbmdFdgotX19aTjdXZWJDb3JlNEZvbnQy
MXNldFNob3VsZFVzZVNtb290aGluZ0ViCi1fX1pON1dlYkNvcmU0Rm9udDI5c2V0RGVmYXVsdFR5
cGVzZXR0aW5nRmVhdHVyZXNFagotX19aTjdXZWJDb3JlNEZvbnRDMUVSS05TXzE2Rm9udFBsYXRm
b3JtRGF0YUViTlNfMTdGb250U21vb3RoaW5nTW9kZUUKLV9fWk43V2ViQ29yZTRGb250QzFFdgot
X19aTjdXZWJDb3JlNEZvbnRhU0VSS1MwXwogX19aTjdXZWJDb3JlNEljb24xOGNyZWF0ZUljb25G
b3JGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJm
bG93RUVFCiBfX1pON1dlYkNvcmU0SWNvbkQxRXYKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJS
ZWN0RVBiCkBAIC0xNjE3LDYgKzE2MTcsOSBAQCBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzM2Vu
ZEVqUmkKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM0Y29weUV2CiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNXN0YXJ0RWpSaQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczZsZW5ndGhFdgor
X19aTks3V2ViQ29yZTExRm9udENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFz
aFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRy
YWl0c0lTOF9FRUVFUE5TXzEzR2x5cGhPdmVyZmxvd0UKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlOGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBG
bG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQorX19aTks3V2ViQ29y
ZTExRm9udENhc2NhZGVlcUVSS1MwXwogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxMGlzQ29t
cGxldGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGNhbmNlbGxlZEVycm9yRVJLTlNf
MTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0ZnJhbWVIYXNM
b2FkZWRFdgpAQCAtMTY1MywxMCArMTY1NiwxMCBAQCBfX1pOSzdXZWJDb3JlMTFQYWdlT3Zlcmxh
eTZib3VuZHNFdgogX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2syNWlubGluZUVsZW1lbnRDb250
aW51YXRpb25FdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5ZXIxOWFic29sdXRlQm91bmRpbmdC
b3hFdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5ZXIyNG5lZWRzQ29tcG9zaXRlZFNjcm9sbGlu
Z0V2CitfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTExZm9udENhc2NhZGVFdgogX19aTks3V2Vi
Q29yZTExUmVuZGVyU3R5bGUxMWZvbnRNZXRyaWNzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0
eWxlMTVmb250RGVzY3JpcHRpb25FdgogX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGUyMXZpc2l0
ZWREZXBlbmRlbnRDb2xvckVpCi1fX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTRmb250RXYKIF9f
Wk5LN1dlYkNvcmUxMlJlbmRlcklubGluZTE2bGluZXNCb3VuZGluZ0JveEV2CiBfX1pOSzdXZWJD
b3JlMTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRl
ck9iamVjdDE1bG9jYWxUb0Fic29sdXRlRVJLTlNfMTBGbG9hdFBvaW50RWoKQEAgLTE5NDQsOSAr
MTk0Nyw2IEBAIF9fWk5LN1dlYkNvcmUzVVJMNHVzZXJFdgogX19aTks3V2ViQ29yZTNVUkw1cXVl
cnlFdgogX19aTks3V2ViQ29yZTNVUkw4cHJvdG9jb2xFdgogX19aTks3V2ViQ29yZTNVUkxjdlA1
TlNVUkxFdgotX19aTks3V2ViQ29yZTRGb250NXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hh
c2hTZXRJUEtOU18xNFNpbXBsZUZvbnREYXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hU
cmFpdHNJUzhfRUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCi1fX1pOSzdXZWJDb3JlNEZvbnQ4ZHJh
d1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9p
bnRFaWlOUzBfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FCi1fX1pOSzdXZWJDb3JlNEZvbnRl
cUVSS1MwXwogX19aTks3V2ViQ29yZTROb2RlMTBzaGFkb3dIb3N0RXYKIF9fWk5LN1dlYkNvcmU0
Tm9kZTExdGV4dENvbnRlbnRFYgogX19aTks3V2ViQ29yZTROb2RlMTNvd25lckRvY3VtZW50RXYK
QEAgLTI2NDksMTggKzI2NDksMTIgQEAgX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXIyOHJl
bW92ZURlbAogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXIzOGVtcHR5RGF0YWJhc2VGaWxl
c1JlbW92YWxUYXNrRGlkRmluaXNoRXYKIF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyNDRl
bXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza1dpbGxCZVNjaGVkdWxlZEV2CiBfX1pON1dlYkNv
cmUxNURhdGFiYXNlVHJhY2tlcjd0cmFja2VyRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MTJkcmF3QmlkaVRleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBv
aW50RU5TMV8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkVQTlNfMTBCaWRpU3RhdHVzRWkKIF9f
Wk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVkcmF3TGluZUZvclRleHRFUktOU18xMEZsb2F0
UG9pbnRFZmJiCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIyc2V0RW1vamlEcmF3aW5n
RW5hYmxlZEViCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIzc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHRFYgogX19aTjdXZWJDb3JlMTVMZWdhY3lUaWxlQ2FjaGUxNGRyYWluTGF5ZXJQb29s
RXYKIF9fWk43V2ViQ29yZTE1TGVnYWN5VGlsZUNhY2hlMjBzZXRMYXllclBvb2xDYXBhY2l0eUVq
CiBfX1pON1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDQxdXBkYXRlRnJvbURlbGVnYXRlUHJlc2Vy
dmluZ09sZFByb3BlcnRpZXNFUktTMF8KLV9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTJs
ZWZ0VHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFTlMwXzI0RW5hYmxlUm91bmRp
bmdIYWNrc09yTm90RVJmYmYKLV9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTNyaWdodFRy
dW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNh
dGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90RVJmYmYKLV9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTVyaWdodENsaXBUb1dvcmRF
UktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90
RVJmYmZiCi1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjIwcmlnaHRDbGlwVG9DaGFyYWN0
ZXJFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFTlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90RVJmYmYKIF9fWk43V2ViQ29yZTE1aXNFbmRPZkRvY3VtZW50RVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FCiBfX1pON1dlYkNvcmUxNXN0YXJ0T2ZEb2N1bWVudEVQS05TXzROb2RlRQogX19aTjdX
ZWJDb3JlMTVzdGFydE9mRG9jdW1lbnRFUktOU18xNVZpc2libGVQb3NpdGlvbkUKQEAgLTI3NDQs
NyArMjczOCw2IEBAIF9fWk43V2ViQ29yZTMzYXBwbGljYXRpb25Jc1RoZUVjb25vbWlzdE8KIF9f
Wk43V2ViQ29yZTM1aXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnRFUktOU18xNVZp
c2libGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTM1cG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHlFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkUKIF9fWk43V2ViQ29yZTQxaW5pdGlhbGl6ZUhUVFBDb25uZWN0
aW9uU2V0dGluZ3NPblN0YXJ0dXBFdgotX19aTjdXZWJDb3JlNEZvbnRDMUVSS05TXzE2Rm9udFBs
YXRmb3JtRGF0YUVOM1dURjEwUGFzc1JlZlB0cklOU18xMkZvbnRTZWxlY3RvckVFRQogX19aTjdX
ZWJDb3JlNEljb24xOGNyZWF0ZUljb25Gb3JJbWFnZUVQN0NHSW1hZ2UKIF9fWk43V2ViQ29yZTRO
b2RlMTdpc0NvbnRlbnRFZGl0YWJsZUVOUzBfMjJVc2VyU2VsZWN0QWxsVHJlYXRtZW50RQogX19a
TjdXZWJDb3JlNE5vZGUyM2NvbXBhcmVEb2N1bWVudFBvc2l0aW9uRVBTMF8KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24g
MTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNzk3OCw4ICs3OTc4LDggQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UmVjdC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFJvdW5kZWRSZWN0LmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6
ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
b250LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZvbnRDYWNoZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGb250Q2FzY2FkZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGb250RGVzY3JpcHRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVyaWNGYW1pbGllcy5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250R2x5cGhz
LmNwcCIgLz4KQEAgLTE5NDY2LDggKzE5NDY2LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0Um91bmRlZFJlY3QuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplSGFzaC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250
Q2FzY2FkZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRm9udERlc2NyaXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xGb250R2VuZXJpY0ZhbWlsaWVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250R2x5cGhzLmgiIC8+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3MDEsOCArNDcwMSw4IEBACiAJCUIyQzNEQTQ5
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMTkwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBMUEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovOyB9OwogCQlCMkMzREE0
QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMUIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRT
dHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5jcHAgKi87IH07Ci0JCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MDBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUIyQzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE0
RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwICovOyB9OworCQlCMkMzREE2MTBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2Fz
Y2FkZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUIyQzNEQTYyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi87IH07CiAJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRh
LmNwcCAqLzsgfTsKQEAgLTEyMDc1LDggKzEyMDc1LDggQEAKIAkJQjJDM0RBMTkwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREExQTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFN0cmVhbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3Ry
ZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0U3RyZWFtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2Fz
Y2FkZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTUwMEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250Q2FzY2FkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9udENhc2NhZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTEw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0MDgsNiArMjA0MDgsOCBAQAogCQkJCUIy
NzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1
MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCiAJCQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUy
IC8qIENvbG9yU3BhY2UuaCAqLywKKwkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dENhc2NhZGUuY3BwICovLAorCQkJCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2Fz
Y2FkZS5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3Nz
ZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8q
IERhc2hBcnJheS5oICovLApAQCAtMjA0MzMsOCArMjA0MzUsNiBAQAogCQkJCUIyNzUzNTNFMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovLAogCQkJCUIyNzUzNTNGMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLywKIAkJCQk1OENEMzVDQTE4RUI0QzM5MDBCOUYzQUMg
LyogRmxvYXRTaXplSGFzaC5oICovLAotCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250LmNwcCAqLywKLQkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAog
CQkJCUJDQjkyRDRFMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLywKIAkJCQlC
MkMzREE1MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCAqLywKIAkJCQlCMkMzREE1
MjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggKi8sCkBAIC0yNDMwMiw3ICsyNDMwMiw3
IEBACiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDIzNTE0RUFCRDI2MDA5MEQ3NUUgLyogRm9j
dXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250Q2FzY2FkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOTJENEYxMjkzNTUwQjAwQzgzODdG
IC8qIEZvbnRCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjMwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBRkZDN0UwRDAwQTVD
MTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAt
Mjc4MDQsNyArMjc4MDQsNyBAQAogCQkJCUQ3MkY2RDc5MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93
VGhyZWFkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk5M0JFNTBCMkYyQjFD
MDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlE
MjM2MTRFQUJEMjYwMDkwRDc1RSAvKiBGb2N1c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUIyQzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUIyQzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTM3MjdERkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM3QzBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIK
ICNpbXBvcnQgIkNocm9tZS5oIgogI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCi0jaW1wb3J0ICJG
b250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBv
cnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKQEAgLTE3NTgsNyAr
MTc1OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlMKICAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQg
YmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcs
IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOworICAg
IEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgaW50IGRlY29yID0gc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKICAgICBp
ZiAoKGRlY29yICYgKFRleHREZWNvcmF0aW9uVW5kZXJsaW5lIHwgVGV4dERlY29yYXRpb25MaW5l
VGhyb3VnaCkpICE9IDApIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQAogI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJD
b2xvck1hYy5oIgogI2ltcG9ydCAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJG
b250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBv
cnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE3ODQ1
NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW1w
b3J0ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW1w
b3J0ICJFZGl0b3IuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
CiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24u
aCIKICNpbXBvcnQgIkhUTUxBbmNob3JFbGVtZW50LmgiCkBAIC04NDgsNyArODQ4LDcgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBm
b250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEo
KS5nZXROU0ZvbnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRy
U3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAgIAogICAgIC8v
IHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJp
bmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Io
c3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwgcmFuZ2UpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3ODQ1NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBACiAjaW1wb3J0ICJET01Qcml2YXRlLmgiCiAjaW1wb3J0ICJET01SYW5nZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJEcmFnSW1hZ2UuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBv
cnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiSFRNTEVsZW1l
bnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKE5TRm9u
dCAqKV9mb250CiAgICAgYXV0byByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJl
dHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdl
dE5TRm9udCgpOwogfQogI2Vsc2UKIC0gKENURm9udFJlZilfZm9udApAQCAtNjc3LDcgKzY3Nyw3
IEBAIC0gKENURm9udFJlZilfZm9udAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3Jl
KHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEo
KS5nZXRDVEZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQko
cmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtp
dEV4dGVuc2lvbnMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbXBvcnQg
IkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRmxvYXRQb2ludC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJIVE1MQXJlYUVsZW1lbnQu
aCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCkBAIC03MSw3ICs3MSw3IEBACiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogdXNpbmcgV2ViQ29yZTo6RmxvYXRQb2ludDsKLXVzaW5nIFdlYkNv
cmU6OkZvbnQ7Cit1c2luZyBXZWJDb3JlOjpGb250Q2FzY2FkZTsKIHVzaW5nIFdlYkNvcmU6OkhU
TUxBcmVhRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ7CiB1c2luZyBX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNzg0NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwNCw4ICsxNTA0LDggQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBsZW1l
bnRlZFByb3BlcnR5SUQoQwogc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9t
U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3R5bGUtPmZvbnQoKS5mYW1pbHlDb3VudCgpOyArK2kpCi0gICAgICAgIGxpc3QuZ2V0KCkuYXBw
ZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250KCkuZmFtaWx5QXQoaSkpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsg
KytpKQorICAgICAgICBsaXN0LmdldCgpLmFwcGVuZCh2YWx1ZUZvckZhbWlseShzdHlsZS0+Zm9u
dENhc2NhZGUoKS5mYW1pbHlBdChpKSkpOwogICAgIHJldHVybiBsaXN0OwogfQogCkBAIC0yNTQ1
LDcgKzI1NDUsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjCiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6CiAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndvcmRCcmVhaygpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnQoKS53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Zm9udENhc2Nh
ZGUoKS53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXb3JkV3JhcDoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+b3ZlcmZsb3dXcmFwKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZUJyZWFrOgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
CShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJDb3VudGVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIk5vZGUu
aCIKICNpbmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUkdCQ29sb3IuaCIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udExvYWRlci5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2lu
Y2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKQEAgLTUzLDcgKzUzLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWY8TG9hZEZvbnRDYWxsYmFjaz4obmV3IExv
YWRGb250Q2FsbGJhY2sobnVtTG9hZGluZywgZm9udExvYWRlciwgbG9hZENhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TG9hZEZvbnRDYWxs
YmFjaz4gY3JlYXRlRnJvbVBhcmFtcyhjb25zdCBEaWN0aW9uYXJ5JiBwYXJhbXMsIEZvbnRMb2Fk
ZXImIGZvbnRMb2FkZXIsIGNvbnN0IEZvbnQmIGZvbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TG9hZEZvbnRDYWxsYmFjaz4gY3JlYXRlRnJvbVBhcmFtcyhjb25zdCBEaWN0aW9uYXJ5JiBwYXJh
bXMsIEZvbnRMb2FkZXImIGZvbnRMb2FkZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAg
IHsKICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gb25zdWNjZXNzOwogICAgICAgICBSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBvbmVycm9yOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgRm9udExv
YWRlcjo6bG9hZEZvbnQoY29uc3QgRGljdGlvbmEKICAgICBTdHJpbmcgZm9udFN0cmluZzsKICAg
ICBpZiAoIXBhcmFtcy5nZXQoImZvbnQiLCBmb250U3RyaW5nKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZv
bnRTdHlsZShmb250U3RyaW5nLCBmb250KSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxM
b2FkRm9udENhbGxiYWNrPiBjYWxsYmFjayA9IExvYWRGb250Q2FsbGJhY2s6OmNyZWF0ZUZyb21Q
YXJhbXMocGFyYW1zLCAqdGhpcywgZm9udCk7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBGb250
TG9hZGVyOjpsb2FkRm9udChjb25zdCBEaWN0aW9uYQogYm9vbCBGb250TG9hZGVyOjpjaGVja0Zv
bnQoY29uc3QgU3RyaW5nJiBmb250U3RyaW5nLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIEZJ
WE1FOiBUaGUgc2Vjb25kIHBhcmFtZXRlciAodGV4dCkgaXMgaWdub3JlZC4KLSAgICBGb250IGZv
bnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBpZiAoIXJlc29sdmVGb250U3R5bGUoZm9u
dFN0cmluZywgZm9udCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9udC5mYW1pbHlDb3VudCgpOyBpKyspIHsKQEAgLTI4MSw3ICsyODEsNyBA
QCBzdGF0aWMgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoCiAgICAgc3R5bGVSZXNv
bHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHBhcnNlZFN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKGlkKS5nZXQoKSk7CiB9CiAKLWJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZv
bnRTdHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnQmIGZvbnQpCitib29sIEZvbnRM
b2FkZXI6OnJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiBmb250U3RyaW5nLCBGb250Q2Fz
Y2FkZSYgZm9udCkKIHsKICAgICAvLyBJbnRlcnByZXQgZm9udFN0cmluZyBpbiB0aGUgc2FtZSB3
YXkgYXMgdGhlICdmb250JyBhdHRyaWJ1dGUgb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELgog
ICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZWRTdHlsZSA9IE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwpAQCAtMzAyLDcgKzMwMiw3IEBAIGJvb2wgRm9udExv
YWRlcjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKIAogICAgIHN0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24oZGVmYXVsdEZvbnREZXNjcmlwdGlvbik7CiAKLSAgICBzdHlsZS0+Zm9udCgpLnVwZGF0
ZShzdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBzdHlsZS0+Zm9udENhc2NhZGUo
KS51cGRhdGUoc3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgLy8g
Tm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVz
b2x2ZXIoKTsKQEAgLTMxOSw3ICszMTksNyBAQCBib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250
U3R5bGUoY29uc3QgCiAgICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgYXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKHN0eWxlUmVzb2x2ZXIsIENTU1Byb3BlcnR5TGluZUhlaWdo
dCwgcGFyc2VkU3R5bGUpOwogCi0gICAgZm9udCA9IHN0eWxlLT5mb250KCk7CisgICAgZm9udCA9
IHN0eWxlLT5mb250Q2FzY2FkZSgpOwogICAgIGZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9u
dFNlbGVjdG9yKCkpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExv
YWRlci5oCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIENTU0ZvbnRGYWNlU291
cmNlOwogY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnQ7Ci1j
bGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBMb2FkRm9udENhbGxiYWNrOwog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIApAQCAtMTAwLDcgKzEwMCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwZW5kaW5nRXZlbnRzVGltZXJGaXJlZCgpIHsgZmlyZVBlbmRpbmdFdmVu
dHMoKTsgfQogICAgIHZvaWQgc2NoZWR1bGVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAg
dm9pZCBmaXJlUGVuZGluZ0V2ZW50cygpOwotICAgIGJvb2wgcmVzb2x2ZUZvbnRTdHlsZShjb25z
dCBTdHJpbmcmLCBGb250Jik7CisgICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmlu
ZyYsIEZvbnRDYXNjYWRlJik7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBFdmVu
dFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlCiB7CiAgICAgbV9ydWxlU2V0cy5hcHBl
bmRBdXRob3JTdHlsZVNoZWV0cyhmaXJzdE5ldywgc3R5bGVTaGVldHMsIG1fbWVkaXVtLmdldCgp
LCBtX2luc3BlY3RvckNTU09NV3JhcHBlcnMsIHRoaXMpOwogICAgIGlmIChhdXRvIHJlbmRlclZp
ZXcgPSBkb2N1bWVudCgpLnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldy0+c3R5bGUo
KS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgcmVuZGVyVmlldy0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiAKICNpZiBFTkFCTEUo
Q1NTX0RFVklDRV9BREFQVEFUSU9OKQogICAgIHZpZXdwb3J0U3R5bGVSZXNvbHZlcigpLT5yZXNv
bHZlKCk7CkBAIC03NDgsNyArNzQ4LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvcgogICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKICAgICAg
ICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSAmUmVuZGVyU3R5bGU6OmNyZWF0ZSgpLmxl
YWtSZWYoKTsKICAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPnNldERpc3BsYXko
Tk9ORSk7Ci0gICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250KCkudXBkYXRl
KG1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZv
bnRDYXNjYWRlKCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKICAgICAgICAgfQogICAgICAgICBl
bGVtZW50LT5kb2N1bWVudCgpLnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKICAg
ICAgICAgcmV0dXJuICpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtMTAzMSw5ICsxMDMxLDkg
QEAgUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpkZWZhdWx0UwogICAgIC8vIE1ha2Ug
c3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBm
cm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3Vt
ZW50U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsK
LSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsK
KyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0
b3IoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0
ZSgwKTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShudWxs
cHRyKTsKIAogICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOwogfQpAQCAtMTQ4NCw3ICsx
NDg0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKICAgICBjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hl
Y2tGb3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNr
Rm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKG1f
Zm9udFNlbGVjdG9yKTsKKyAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobV9mb250U2Vs
ZWN0b3IpOwogICAgIGlmIChtX3N0YXRlLmZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpKQogICAg
ICAgICBzdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cyh0cnVlKTsKICAgICBtX3N0YXRlLnNldEZv
bnREaXJ0eShmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMjE3
OSw3ICsyMTc5LDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc1dvcmRTdGFydE1hdAog
CiAgICAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UgbGFjayB3b3JkIGJvdW5kYXJ5IG1hcmtzLCBh
bmQgdGhlcmUgaXMgbm8gY2xlYXIgYWdyZWVtZW50IG9uIHdoYXQgY29uc3RpdHV0ZXMKICAgICAv
LyBhIHdvcmQsIHNvIHRyZWF0IHRoZSBwb3NpdGlvbiBiZWZvcmUgYW55IENKSyBjaGFyYWN0ZXIg
YXMgYSB3b3JkIHN0YXJ0LgotICAgIGlmIChGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGZp
cnN0Q2hhcmFjdGVyKSkKKyAgICBpZiAoRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woZmlyc3RDaGFyYWN0ZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHNpemVfdCB3
b3JkQnJlYWtTZWFyY2hTdGFydCA9IHN0YXJ0ICsgbGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4NDU2KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2lt
cG9ydCAiRWxlbWVudC5oIgogI2ltcG9ydCAiRWxlbWVudFRyYXZlcnNhbC5oIgotI2ltcG9ydCAi
Rm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1w
b3J0ICJGcmFtZUxvYWRlci5oIgogI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKQEAgLTExMTQsNyAr
MTExNCw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBh
dXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKIH0KICNlbHNl
CiBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtZW50KQpAQCAtMTEyMiw3
ICsxMTIyLDcgQEAgc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAg
IGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVy
LT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICByZXR1
cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CiB9CiAjZW5kaWYKIApAQCAtMjU5NCwxMCArMjU5NCwx
MCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyCiAgICAgICAgICAg
ICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1Vu
ZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVd
OwogICAgICAgICBpZiAoc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNv
cmF0aW9uTGluZVRocm91Z2gpCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltO
U051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6
TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKE5TRm9udCAq
Zm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkKKyAgICAg
ICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0TlNGb250KCkpCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OmZvbnQg
Zm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBb
YXR0cnMuZ2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0
Rm9udCgpIHRvU2l6ZTpzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRh
KCkuc2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICBbYXR0
cnMuZ2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0Rm9u
dCgpIHRvU2l6ZTpzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3Jt
RGF0YSgpLnNpemUoKV0gZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAo
c3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCiAg
ICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRWRpdG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
aW9zL0VkaXRvcklPUy5tbQkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxDb252ZXJ0ZXIuaCIKQEAgLTIxMyw3ICsyMTMsNyBA
QCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAKICAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkK
LSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRv
cjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlw
ZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwot
ICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXIt
PnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICAgICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAg
ICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAm
cHJpbWFyeUZvbnQpIHsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6
Zm9udEF0dHJpYnV0ZXNGb3JTCiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBb
TlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKICAgICAKLSAgICBDVEZvbnRSZWYgZm9u
dCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgQ1RG
b250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKICAgICBpZiAoZm9udCkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KGlkKWZv
bnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFZGl0b3IuaCIKICNpbXBv
cnQgIkVkaXRvckNsaWVudC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2Nh
ZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2ltcG9ydCAiRnJhbWVWaWV3LmgiCkBAIC0xMTUsNyArMTE1LDcgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogCiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKIAogICAgICAgICBp
ZiAobm9kZVRvUmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoQVNTRVJU
X05PX0VYQ0VQVElPTik7CkBAIC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5v
ZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBw
aW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICAgICAgICAgIGlmICghZm9udCkKICAgICAg
ICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICAgICAgZWxzZSBpZiAoZm9u
dCAhPSAmcHJpbWFyeUZvbnQpIHsKQEAgLTE2MCw4ICsxNjAsOCBAQCBOU0RpY3Rpb25hcnkqIEVk
aXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9
IDApCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0TlNGb250KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOworICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5n
ZXROU0ZvbnQoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOwogCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcikgIT0gQ29sb3I6OmJsYWNrKQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0Nv
bG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktl
eTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA1LDcgKzIxMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgICAgIG5ld1N0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oZGVmYXVsdEZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0g
ICAgbmV3U3R5bGUtPmZvbnQoKS51cGRhdGUobmV3U3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3Io
KSk7CisgICAgbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKG5ld1N0eWxlLT5mb250Q2Fz
Y2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVy
dHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CkBAIC0y
MTIyLDcgKzIxMjIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
CiAgICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNvbHZlci5hcHBs
eVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIAot
ICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7CisgICAgbW9k
aWZpYWJsZVN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCk7CiAgICAgbW9k
aWZpYWJsZVN0YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLmZvbnRTZWxlY3Rvcigp
KTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3JlYWxpemVkRm9udCA9IHRydWU7CiAgICAgc3R5
bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKS0+cmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFj
a3MoJm1vZGlmaWFibGVTdGF0ZSgpKTsKQEAgLTIyODcsNyArMjI4Nyw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICBpZiAoZmlsbCAmJiBncmFkaWVudCAm
JiBncmFkaWVudC0+aXNaZXJvU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBG
b250JiBmb250ID0gYWNjZXNzRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
YWNjZXNzRm9udCgpOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQu
Zm9udE1ldHJpY3MoKTsKIAogICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IHRleHQ7CkBAIC0y
MzcyLDEwICsyMzcyLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4
dEkKICAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZShsb2NhdGlvbi54KCkg
LSBtYXNrUmVjdC54KCksIGxvY2F0aW9uLnkoKSAtIG1hc2tSZWN0LnkoKSk7CiAgICAgICAgICAg
ICAvLyBXZSBkcmF3IHdoZW4gZm9udFdpZHRoIGlzIDAgc28gY29tcG9zaXRpbmcgb3BlcmF0aW9u
cyAoZWcsIGEgImNvcHkiIG9wKSBzdGlsbCB3b3JrLgogICAgICAgICAgICAgbWFza0ltYWdlQ29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKChmb250V2lkdGggPiAwID8gKHdpZHRoIC8gZm9udFdpZHRo
KSA6IDApLCAxKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQo
Zm9udCwgdGV4dFJ1biwgRmxvYXRQb2ludCgwLCAwKSwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSk7CisgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQoZm9u
dCwgdGV4dFJ1biwgRmxvYXRQb2ludCgwLCAwKSwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZG
b250Tm90UmVhZHkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWFza0ltYWdlQ29u
dGV4dC0+dHJhbnNsYXRlKC1tYXNrUmVjdC54KCksIC1tYXNrUmVjdC55KCkpOwotICAgICAgICAg
ICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9u
LCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgICAgIG1hc2tJbWFn
ZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2Nh
ZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICB9CiAKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjKTsKQEAgLTIzOTgsMTUgKzIzOTgs
MTUgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogCiAgICAgaWYg
KGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSkpIHsK
ICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwotICAgICAgICBjLT5kcmF3QmlkaVRleHQo
Zm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkp
OworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRD
YXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAgICAgZW5kQ29tcG9zaXRl
TGF5ZXIoKTsKICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogICAgIH0gZWxzZSBpZiAo
c3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVDb3B5KSB7CiAgICAgICAgIGNs
ZWFyQ2FudmFzKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2Nh
dGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRyYXdC
aWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOwogICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBG
b250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0
KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSk7CiAgICAgICAgIGRpZERyYXcodGV4dFJlY3QpOwogICAgIH0KIH0KQEAgLTI0MjYs
NyArMjQyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppbmZsYXRlU3QKICAg
ICByZWN0LmluZmxhdGUoZGVsdGEpOwogfQogCi1jb25zdCBGb250JiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmFjY2Vzc0ZvbnQoKQorY29uc3QgRm9udENhc2NhZGUmIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6YWNjZXNzRm9udCgpCiB7CiAgICAgY2FudmFzKCktPmRvY3VtZW50KCkudXBk
YXRlU3R5bGVJZk5lZWRlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMTc4NDU2KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVz
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC0yNzAs
NyArMjcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogCiAg
ICAgICAgIFN0cmluZyBtX3VucGFyc2VkRm9udDsKLSAgICAgICAgRm9udCBtX2ZvbnQ7CisgICAg
ICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICAgICAgYm9vbCBtX3JlYWxpemVkRm9udDsKICAg
ICB9OwogCkBAIC0zMDgsNyArMzA4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1RleHRJ
bnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwg
ZmxvYXQgbWF4V2lkdGggPSAwLCBib29sIHVzZU1heFdpZHRoID0gZmFsc2UpOwogCi0gICAgY29u
c3QgRm9udCYgYWNjZXNzRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBhY2Nlc3NGb250
KCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgdm9pZCBjbGVhclBhdGhG
b3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTc4
NDU2KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBTdHJpbmcgTWF0aE1MTWVuY2xvc2VF
bGVtZW50Ojpsb25nRGl2TGVmCiAgICAgVGV4dFJ1biBydW4oY2xvc2luZ0JyYWNlLmltcGwoKSwg
Y2xvc2luZ0JyYWNlLmxlbmd0aCgpKTsKICAgICBOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOwog
ICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYg
Zm9udCA9IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuZm9udCgpOworICAgICAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuZm9udENhc2NhZGUo
KTsKICAgICAgICAgcGFkZGluZy5hcHBlbmROdW1iZXIoZm9udC53aWR0aChydW4pKTsKICAgICAg
ICAgcGFkZGluZy5hcHBlbmRMaXRlcmFsKCJweCIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkRP
TVRpbWVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZv
bnRHZW5lcmljRmFtaWxpZXMuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJl
SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OCArMjgsOCBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJK
U0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNkZWZpbmUgUG9wdXBNZW51U3R5bGVfaAogCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJMZW5ndGguaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAKQEAgLTQzLDcgKzQzLDcg
QEAgcHVibGljOgogICAgICAgICBQb3B1cE1lbnVTaXplTWluaQogICAgIH07CiAKLSAgICBQb3B1
cE1lbnVTdHlsZShjb25zdCBDb2xvciYgZm9yZWdyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmQsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgdmlzaWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBi
b29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5ndGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3Vu
ZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwg
UG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVT
aXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKKyAgICBQb3B1cE1lbnVTdHlsZShjb25zdCBDb2xv
ciYgZm9yZWdyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBib29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0
QXBwZWFyYW5jZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
biwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRDb2xvclR5cGUgYmFj
a2dyb3VuZENvbG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5cGUg
bWVudVR5cGUgPSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVwTWVu
dVNpemVOb3JtYWwpCiAgICAgICAgIDogbV9mb3JlZ3JvdW5kQ29sb3IoZm9yZWdyb3VuZCkKICAg
ICAgICAgLCBtX2JhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kKQogICAgICAgICAsIG1fZm9udChm
b250KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDb2xvciYgZm9yZWdy
b3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb3JlZ3JvdW5kQ29sb3I7IH0KICAgICBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29s
b3I7IH0KLSAgICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9Cisg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIGJvb2wg
aXNEaXNwbGF5Tm9uZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEaXNwbGF5Tm9uZTsgfQogICAgIGJv
b2wgaGFzRGVmYXVsdEFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlZmF1bHRBcHBl
YXJhbmNlOyB9CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ29sb3Ig
bV9mb3JlZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgRm9u
dCBtX2ZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9mb250OwogICAgIGJvb2wgbV92aXNpYmxlOwog
ICAgIGJvb2wgbV9pc0Rpc3BsYXlOb25lOwogICAgIGJvb2wgbV9oYXNEZWZhdWx0QXBwZWFyYW5j
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29u
dHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVy
KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgpAQCAtNDIsNyArNDIsNyBAQCBMZW5ndGhCb3ggVGhlbWU6OmNv
bnRyb2xCb3JkZXIoQ29udHJvbFBhCiAgICAgfQogfQogCi1MZW5ndGhCb3ggVGhlbWU6OmNvbnRy
b2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gm
IHpvb21lZEJveCwgZmxvYXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xQYWRkaW5n
KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBj
YXNlIE1lbnVsaXN0UGFydDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24g
MTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb250
cm9sU3RhdGVzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgogI2luY2x1ZGUg
Ikxlbmd0aFNpemUuaCIKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIENT
UyBzeXN0ZW0gY29sb3JzIGFuZCBmb250cwogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3Io
VGhlbWVDb2xvcikgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQotICAgIHZpcnR1YWwgRm9udCBz
eXN0ZW1Gb250KFRoZW1lRm9udCwgRm9udERlc2NyaXB0aW9uJikgY29uc3QgeyByZXR1cm4gRm9u
dCgpOyB9CisgICAgdmlydHVhbCBGb250Q2FzY2FkZSBzeXN0ZW1Gb250KFRoZW1lRm9udCwgRm9u
dERlc2NyaXB0aW9uJikgY29uc3QgeyByZXR1cm4gRm9udENhc2NhZGUoKTsgfQogICAgIAogICAg
IC8vIEhvdyBmYXN0IHRoZSBjYXJldCBibGlua3MgaW4gdGV4dCBmaWVsZHMuCiAgICAgdmlydHVh
bCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QgeyByZXR1cm4gMC41OyB9CkBAIC04
MiwxNyArODIsMTcgQEAgcHVibGljOgogICAgIC8vIE1ldGhvZHMgdXNlZCB0byBhZGp1c3QgdGhl
IFJlbmRlclN0eWxlcyBvZiBjb250cm9scy4KICAgICAKICAgICAvLyBUaGUgZm9udCBkZXNjcmlw
dGlvbiByZXN1bHQgc2hvdWxkIGhhdmUgYSB6b29tZWQgZm9udCBzaXplLgotICAgIHZpcnR1YWwg
Rm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiBmb250
LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5mb250RGVzY3JpcHRp
b24oKTsgfQorICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQ
YXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0
IHsgcmV0dXJuIGZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KICAgICAKICAgICAvLyBUaGUgc2l6
ZSBoZXJlIGlzIGluIHpvb21lZCBjb29yZGluYXRlcyBhbHJlYWR5LiAgSWYgYSBuZXcgc2l6ZSBp
cyByZXR1cm5lZCwgaXQgYWxzbyBuZWVkcyB0byBiZSBpbiB6b29tZWQgY29vcmRpbmF0ZXMuCi0g
ICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250
JiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNv
bnN0IHsgcmV0dXJuIHpvb21lZFNpemU7IH0KKyAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJv
bFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYg
em9vbWVkU2l6ZSwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIHpvb21lZFNp
emU7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgY29udHJv
bCBpbiB6b29tZWQgY29vcmRpbmF0ZXMuICAKLSAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11
bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgLyp6b29tRmFjdG9y
Ki8pIGNvbnN0IHsgcmV0dXJuIExlbmd0aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSk7IH0KKyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25z
dCB7IHJldHVybiBMZW5ndGhTaXplKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCkp
OyB9CiAgICAgCiAgICAgLy8gQWxsb3dzIHRoZSB0aGVtZSB0byBtb2RpZnkgdGhlIGV4aXN0aW5n
IHBhZGRpbmcvYm9yZGVyLgotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0
IHpvb21GYWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIo
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRp
bmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29t
ZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNv
bnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3Ro
Qm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogICAgIAogICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHdoaXRlc3BhY2U6IHByZSBzaG91bGQgYmUgZm9yY2VkIG9uIGFsd2F5cy4K
ICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFy
dCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5o
CShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEN1cnNvcjsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRl
OwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZv
cm1Nb3VzZUV2ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNDIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAg
IChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5j
bHVkZSAiV2lkdGhJdGVyYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdI
YXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi11c2luZyBuYW1l
c3BhY2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXVEYgewot
Ci0vLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExheW91dD4gaW4gc291cmNlIGZp
bGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRMYXlvdXQgY2xhc3MgZGVmaW5p
dGlvbgotdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0
PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCi17Ci0gICAgV2ViQ29yZTo6Rm9udDo6ZGVsZXRl
TGF5b3V0KHB0cik7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUmVm
PEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7Ci0KLWNvbnN0IHVpbnQ4X3QgRm9u
dDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewotICAgIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAxIC8qc3BhY2Uq
LywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKj8qLywKLSAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwKLSAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07Ci0KLXN0
YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4pCi17Ci0gICAg
cmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Ci19Ci0KLXN0YXRpYyBib29sIHVzZUJhY2tz
bGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAg
ICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0YXRp
YyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKLSAgICBpZiAoIXNldCkgewotICAgICAgICBz
ZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OwotICAgICAgICBzZXQtPmFkZCgiTVMgUEdv
dGhpYyIpOwotICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdvdGhpY1tdID0gezB4RkYyRCwg
MHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcsIDB4MzBDMywgMHgzMEFGfTsK
LSAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNQR290aGljLCBXVEZf
QVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwotCi0gICAgICAgIHNldC0+YWRk
KCJNUyBQTWluY2hvIik7Ci0gICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNQTWluY2hvW10gPSB7
MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUsIDB4NjcxRH07Ci0gICAgICAg
IHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1pbmNobywgV1RGX0FSUkFZX0xF
TkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgR290
aGljIik7Ci0gICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3RoaWNbXSA9IHsweEZGMkQsIDB4
RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBz
ZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhpYywgV1RGX0FSUkFZX0xFTkdU
SCh1bmljb2RlTmFtZU1TR290aGljKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBNaW5jaG8i
KTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1tdID0gezB4RkYyRCwgMHhGRjMz
LCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5n
KHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU01pbmNo
bykpKTsKLQotICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Ci0gICAgICAgIFVDaGFyIHVuaWNv
ZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBFQSwgMHgzMEFBfTsKLSAgICAg
ICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVpcnlvLCBXVEZfQVJSQVlfTEVO
R1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0LT5jb250YWlu
cyhmYW1pbHkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpzX2NvZGVQYXRoID0gQXV0bzsK
LQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
ID0gMDsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZvbnQg
SW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24pCi0vLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1Gb250OjpGb250KCkKLSAgICA6IG1fbGV0dGVyU3Bh
Y2luZygwKQotICAgICwgbV93b3JkU3BhY2luZygwKQotICAgICwgbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbChmYWxzZSkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcygwKQotewotfQotCi1G
b250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcs
IGZsb2F0IHdvcmRTcGFjaW5nKQotICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCi0gICAgLCBt
X2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKLSAgICAsIG1fd29yZFNwYWNpbmcod29yZFNw
YWNpbmcpCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKHVzZUJhY2tzbGFzaEFzWWVu
U2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQotewotfQotCi0vLyBGSVhNRTogV2Ug
c2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6
OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9u
dCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCi0gICAgOiBtX2dseXBocyhG
b250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQotICAgICwgbV9sZXR0
ZXJTcGFjaW5nKDApCi0gICAgLCBtX3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sKGZhbHNlKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVU
eXBlc2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJp
bnRlckZvbnQoaXNQcmludGVyRm9udCk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Rm9udFNt
b290aGluZyhmb250U21vb3RoaW5nTW9kZSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250
KCkpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6
ZShmb250RGF0YS5mb250KCkpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0SXRh
bGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRC
b2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0jZW5kaWYKLX0KLQotLy8gRklYTUU6IFdlIHNob3Vs
ZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCi0jaWYgUExBVEZP
Uk0oSU9TKQotRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fZ2x5cGhzKEZvbnRH
bHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCi0gICAgLCBtX2xldHRlclNw
YWNpbmcoMCkKLSAgICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQotewotICAgIENURm9udFJlZiBwcmlt
YXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKLSAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1h
cnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0
V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJh
aXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgbV9mb250
RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9udCgpKTsK
LSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERlc2Ny
aXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwotfQotI2VuZGlmCi0KLUZvbnQ6OkZvbnQoY29u
c3QgRm9udCYgb3RoZXIpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5tX2ZvbnREZXNj
cmlwdGlvbikKLSAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQotICAgICwgbV9sZXR0ZXJT
cGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKLSAgICAsIG1fd29yZFNwYWNpbmcob3RoZXIu
bV93b3JkU3BhY2luZykKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wob3RoZXIubV91
c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKLSAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21w
dXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQotewotfQotCi1Gb250JiBGb250OjpvcGVyYXRvcj0o
Y29uc3QgRm9udCYgb3RoZXIpCi17Ci0gICAgbV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbjsKLSAgICBtX2dseXBocyA9IG90aGVyLm1fZ2x5cGhzOwotICAgIG1fbGV0
dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKLSAgICBtX3dvcmRTcGFjaW5nID0g
b3RoZXIubV93b3JkU3BhY2luZzsKLSAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gb3Ro
ZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMg
PSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1i
b29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYg
KGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fZm9udERlc2NyaXB0aW9uICE9IG90
aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2luZyAhPSBvdGhlci5tX2xldHRl
clNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dvcmRTcGFjaW5nKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzID09IG90aGVyLm1fZ2x5cGhzKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fZ2x5cGhzIHx8ICFvdGhlci5tX2dseXBocykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkg
IT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVob3cgb2NjdXI/IEFsbCBmb250
cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJlY2FsYy4KLSAgICBpZiAobV9n
bHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVj
dG9yVmVyc2lvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5n
ZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRpb24oKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdHJ1Y3QgRm9udEdseXBoc0NhY2hl
S2V5IHsKLSAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBzaGFyZWQgd2l0aCB0aGUgbG93
ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9iamVjdHMpLgotICAgIEZvbnRE
ZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0aW9uQ2FjaGVLZXk7Ci0gICAg
VmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7Ci0gICAgdW5zaWduZWQgZm9udFNlbGVj
dG9ySWQ7Ci0gICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKLSAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JGbGFnczsKLX07Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVFbnRyeSB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRm9udEdseXBoc0NhY2hl
RW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRHbHlwaHM+JiYgZykKLSAgICAg
ICAgOiBrZXkoV1RGOjptb3ZlKGspKQotICAgICAgICAsIGdseXBocyhXVEY6Om1vdmUoZykpCi0g
ICAgeyB9Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBSZWY8Rm9udEdseXBocz4g
Z2x5cGhzOwotfTsKLQotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8
Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBGb250R2x5cGhzQ2FjaGU7Ci0K
LXN0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBhLCBjb25z
dCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCi17Ci0gICAgaWYgKGEuZm9udERlc2NyaXB0aW9uQ2Fj
aGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNlbGVjdG9ySWQgfHwgYS5mb250
U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lvbiB8fCBhLmZvbnRTZWxlY3Rv
ckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYS5mYW1pbGllcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGEuZmFtaWxpZXNbaV0u
aW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRm9udEdseXBoc0NhY2hlJiBm
b250R2x5cGhzQ2FjaGUoKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChG
b250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7Ci0gICAgcmV0dXJuIGNhY2hlOwotfQotCi12b2lk
IGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQotewotICAgIGZvbnRHbHlwaHNDYWNoZSgpLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgY2xlYXJXaWR0aENhY2hlcygpCi17Ci0gICAgZm9yIChhdXRvIGl0
ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkud2lk
dGhDYWNoZSgpLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBtYWtlRm9udFNlbGVjdG9y
RmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlwdCgpKSA8PCAxIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKTsKLX0KLQotc3RhdGljIHZv
aWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2FjaGVLZXkmIGtleSwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Ip
Ci17Ci0gICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0gRm9udERlc2NyaXB0aW9uRm9u
dERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKLSAgICAgICAga2V5LmZhbWlsaWVzLmFw
cGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7Ci0gICAga2V5LmZvbnRTZWxlY3RvcklkID0g
Zm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgpIDogMDsKLSAgICBrZXkuZm9u
dFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+dmVyc2lvbigp
IDogMDsKLSAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250U2VsZWN0b3IgJiYgZm9udFNl
bGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikgPyBtYWtlRm9udFNlbGVjdG9y
RmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVGb250
R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYga2V5KQotewotICAgIFZl
Y3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOwotICAgIGhhc2hDb2Rlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKLQotICAgIGhhc2hDb2Rlcy51bmNo
ZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5LmNvbXB1dGVIYXNoKCkpOwot
ICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvcklkKTsKLSAgICBo
YXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0b3JWZXJzaW9uKTsKLSAgICBo
YXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0b3JGbGFncyk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXplKCk7ICsraSkKLSAgICAgICAg
aGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNbaV0uaW1wbCgpID8gQ2FzZUZv
bGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsKLQotICAgIHJldHVybiBTdHJp
bmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAq
IHNpemVvZih1bnNpZ25lZCkpOwotfQotCi12b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zy
b21Gb250R2x5cGhzQ2FjaGUoKQotewotICAgIFZlY3Rvcjx1bnNpZ25lZCwgNTA+IHRvUmVtb3Zl
OwotICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0gZm9udEdseXBoc0NhY2hlKCku
ZW5kKCk7Ci0gICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZm9udEdseXBo
c0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFs
dWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVu
ZChpdC0+a2V5KTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3Zl
LnNpemUoKTsgKytpKQotICAgICAgICBmb250R2x5cGhzQ2FjaGUoKS5yZW1vdmUodG9SZW1vdmVb
aV0pOwotfQotCi1zdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBQYXNzUmVmUHRy
PEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotewotICAgIEZvbnRHbHlwaHNDYWNoZUtleSBr
ZXk7Ci0gICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZvbnREZXNjcmlwdGlvbiwgZm9u
dFNlbGVjdG9yLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udEdseXBo
c0NhY2hlSGFzaChrZXkpOwotICAgIEZvbnRHbHlwaHNDYWNoZTo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBo
c0NhY2hlRW50cnk+KCkpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKLSAgICAgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxG
b250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLSAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udEdseXBoc0NhY2hlRW50cnk+
KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9udFNlbGVjdG9yKSk7Ci0gICAg
UmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlwaHMuZ2V0KCk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwotICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIHBydW5lQ291bnRlcjsKLSAgICAvLyBSZWZlcmVuY2VkIEZvbnRHbHlwaHMgd291bGQgZXhp
c3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5LgotICAgIGlmICgh
KCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCkpCi0gICAgICAgIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKLSAgICAvLyBQcmV2
ZW50IHBhdGhvbG9naWNhbCBncm93dGguCi0gICAgaWYgKGZvbnRHbHlwaHNDYWNoZSgpLnNpemUo
KSA+IG1heGltdW1FbnRyaWVzKQotICAgICAgICBmb250R2x5cGhzQ2FjaGUoKS5yZW1vdmUoZm9u
dEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7Ci0gICAgcmV0dXJuIGdseXBoczsKLX0KLQotdm9pZCBG
b250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QK
LXsKLSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERl
c2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5T
eW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1pbHkoKSk7Ci0g
ICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKTsK
LX0KLQotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25z
dAotewotICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3Rv
bSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAotICAgIC8vIGV4Y2Vw
dCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBp
dCB3aWxsIHVzZSBhIGZhbGxiYWNrCi0gICAgLy8gZm9udCkuCi0gICAgaWYgKGlzTG9hZGluZ0N1
c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZv
bnROb3RSZWFkeSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1
bi5sZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0
aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFu
ZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8v
d2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYg
dHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAg
IGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29t
cGxleCkKLSAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQs
IGZyb20sIHRvKTsKLQotICAgIHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBw
b2ludCwgZnJvbSwgdG8pOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAotewotICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAodG8gPCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKLQotICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0g
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgZHJhd0VtcGhhc2lzTWFy
a3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBlbHNlCi0gICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwg
cnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotfQotCi1mbG9hdCBGb250Ojp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAgICBDb2RlUGF0
aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAh
PSBDb21wbGV4KSB7Ci0gICAgICAgIC8vIFRoZSBjb21wbGV4IHBhdGggaXMgbW9yZSByZXN0cmlj
dGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhhbiB0aGUgc2ltcGxlIHBhdGgs
IHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRoZWlyIGJlaGF2aW9ycyBtYXRj
aC4KLSAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKSkK
LSAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOwotICAgICAgICAvLyBUaGUgc2ltcGxlIHBh
dGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92ZXJmbG93IGlzIG5vdCBvYnNl
cnZhYmxlLgotICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBTaW1wbGVXaXRoR2x5cGhPdmVy
ZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcykp
Ci0gICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKLSAgICB9Ci0KLSAgICBib29sIGhhc0tl
cm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIChLZXJuaW5nIHwgTGln
YXR1cmVzKTsKLSAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nID0gd29yZFNw
YWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7Ci0gICAgZmxvYXQqIGNhY2hlRW50cnkgPSBtX2ds
eXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpx
dWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVy
U3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7Ci0gICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNu
YW4oKmNhY2hlRW50cnkpKQotICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7Ci0KLSAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOwotICAgIGlmICgh
ZmFsbGJhY2tGb250cykKLSAgICAgICAgZmFsbGJhY2tGb250cyA9ICZsb2NhbEZhbGxiYWNrRm9u
dHM7Ci0KLSAgICBmbG9hdCByZXN1bHQ7Ci0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgPT0gQ29tcGxl
eCkKLSAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJh
Y2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwot
Ci0gICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+aXNFbXB0eSgpKQotICAgICAg
ICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mbG9hdCBG
b250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5n
JiBnbHlwaE5hbWUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoaXNE
cmF3bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIHJldHVybiBydW4ucmVuZGVyaW5nQ29udGV4
dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4sIGNoYXJzQ29uc3VtZWQsIGds
eXBoTmFtZSk7Ci0jZW5kaWYKLQotICAgIGNoYXJzQ29uc3VtZWQgPSBydW4ubGVuZ3RoKCk7Ci0g
ICAgZ2x5cGhOYW1lID0gIiI7Ci0gICAgcmV0dXJuIHdpZHRoKHJ1bik7Ci19Ci0KLUdseXBoRGF0
YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9u
dERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Ci17Ci0gICAgaWYgKHZhcmlhbnQgPT0gQXV0b1Zh
cmlhbnQpIHsKLSAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFw
cmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgewotICAgICAgICAgICAgVUNoYXIzMiB1cHBl
ckMgPSB1X3RvdXBwZXIoYyk7Ci0gICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKLSAgICAg
ICAgICAgICAgICBjID0gdXBwZXJDOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBTbWFsbENh
cHNWYXJpYW50OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdmFyaWFudCA9
IE5vcm1hbFZhcmlhbnQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFyaWFudCA9IE5v
cm1hbFZhcmlhbnQ7Ci0gICAgfQotCi0gICAgaWYgKG1pcnJvcikKLSAgICAgICAgYyA9IHVfY2hh
ck1pcnJvcihjKTsKLQotICAgIHJldHVybiBtX2dseXBocy0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKLX0KLQotI2lmICFQTEFURk9STShDT0NP
QSkKLVBhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQq
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBG
b250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCi17Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRo
KFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiopCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0jZW5kaWYKLQotCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aFtdID0gewotICAgICJBbWVyaWNhbiBUeXBld3JpdGVyIiwKLSAgICAiQXJpYWwg
SGVicmV3IiwKLSAgICAiQ2hhbGtib2FyZCIsCi0gICAgIkNvY2hpbiIsCi0gICAgIkNvcnNpdmEg
SGVicmV3IiwKLSAgICAiQ291cmllciIsCi0gICAgIkV1cGhlbWlhIFVDQVMiLAotICAgICJHZW5l
dmEiLAotICAgICJHaWxsIFNhbnMiLAotICAgICJIZWkiLAotICAgICJIZWx2ZXRpY2EiLAotICAg
ICJIb2VmbGVyIFRleHQiLAotICAgICJJbmFpTWF0aGkiLAotICAgICJLYWkiLAotICAgICJMdWNp
ZGEgR3JhbmRlIiwKLSAgICAiTWFya2VyIEZlbHQiLAotICAgICJNb25hY28iLAotICAgICJNc2h0
YWthbiIsCi0gICAgIk5ldyBQZW5pbmltIE1UIiwKLSAgICAiT3Nha2EiLAotICAgICJSYWFuYW5h
IiwKLSAgICAiU1RIZWl0aSIsCi0gICAgIlN5bWJvbCIsCi0gICAgIlRpbWVzIiwKLSAgICAiQXBw
bGUgQnJhaWxsZSIsCi0gICAgIkFwcGxlIExpR290aGljIiwKLSAgICAiQXBwbGUgTGlTdW5nIiwK
LSAgICAiQXBwbGUgU3ltYm9scyIsCi0gICAgIkFwcGxlR290aGljIiwKLSAgICAiQXBwbGVNeXVu
Z2pvIiwKLSAgICAiI0d1bmdTZW8iLAotICAgICIjSGVhZExpbmVBIiwKLSAgICAiI1BDTXl1bmdq
byIsCi0gICAgIiNQaWxHaSIsCi19OwotCi0vLyBGb3IgZm9udCBmYW1pbGllcyB3aGVyZSBhbnkg
b2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBpbiB0aGUgT1MvMiB0YWJsZQot
Ly8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxlZ2FjeSB3ZWJraXQgYmVoYXZp
b3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCi0vLyBmcm9tIHRoZSB3aWR0aCBvZiBhICcw
Jy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBmb250
cywKLS8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBwbGF0
Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCi0vLyBhbGwgcGxhdGZvcm1zLgotYm9vbCBGb250
OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAotewotICAgIEF0b21pY1N0cmluZyBm
YW1pbHkgPSBmaXJzdEZhbWlseSgpOwotICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKLSAg
ICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxzbyBoYXZlIGFuIGludmFsaWQg
ZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCi0gICAgaWYgKHByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAg
IHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoTWFwID0gMDsKLQotICAgIGlmICghZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lk
dGhNYXApIHsKLSAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSBu
ZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aCk7ICsr
aSkKLSAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5hZGQo
QXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW2ldKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+Y29u
dGFpbnMoZmFtaWx5KTsKLX0KLQotYm9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZh
aWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBoYXNWYWxp
ZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgd2lkdGggPSBy
b3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkpOyAvLyBGSVhNRTogcHJpbWFy
eUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmlyc3RGYW1pbHkoKS4KLSAgICBy
ZXR1cm4gc3VjY2VzczsKLX0KLQotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0
byk7Ci0KLSAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKLSAgICAv
LyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBy
dW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8x
MDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVh
dHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5n
dGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICBjb2RlUGF0aFRvVXNl
ID0gQ29tcGxleDsKLQotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpCi0gICAgICAg
IHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHNlbGVjdGlvblJl
Y3QsIGZyb20sIHRvKTsKLQotICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Ci19Ci0KLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBh
dGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJl
cy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoKHJ1bikg
IT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8fCBpc0RyYXduV2l0aFNWR0Zv
bnQocnVuKSkpCi0gICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQo
cnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICByZXR1cm4gb2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIFN0cmluZyBu
b3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBub3JtYWxpemVkOwotICAgIG5v
cm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnQ6Om5v
cm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7Ci0KLSAgICByZXR1cm4gbm9ybWFsaXplZC50
b1N0cmluZygpOwotfQotCi1TdHJpbmcgRm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNw
YWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci19Ci0KLVN0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsK
LX0KLQotc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7Ci0KLXZvaWQg
Rm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9
IHNob3VsZFVzZVNtb290aGluZzsKLX0KLQotYm9vbCBGb250OjpzaG91bGRVc2VTbW9vdGhpbmco
KQotewotICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5nOwotfQotCi12b2lkIEZvbnQ6
OnNldENvZGVQYXRoKENvZGVQYXRoIHApCi17Ci0gICAgc19jb2RlUGF0aCA9IHA7Ci19Ci0KLUZv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKLXsKLSAgICByZXR1cm4gc19jb2RlUGF0aDsK
LX0KLQotdm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhUeXBlc2V0dGlu
Z0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCi17Ci0gICAgc19kZWZhdWx0VHlwZXNldHRp
bmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Ci19Ci0KLVR5cGVzZXR0aW5nRmVhdHVy
ZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQotewotICAgIHJldHVybiBzX2Rl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250Ojpjb2Rl
UGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgaWYgKHNfY29kZVBhdGggIT0g
QXV0bykKLSAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgcmV0dXJuIFNpbXBs
ZTsKLSNlbmRpZgotCi0gICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygp
ICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpLT5zaXplKCkgPiAwKQotICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLSAgICAKLSAgICBpZiAocnVuLmxlbmd0aCgpID4gMSAmJiAh
V2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICBpZiAoIXJ1bi5jaGFyYWN0ZXJTY2FuRm9yQ29kZVBh
dGgoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZTsKLQotICAgIGlmIChydW4uaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBTaW1wbGU7Ci0KLSAgICAvLyBTdGFydCBmcm9tIDAgc2luY2UgZHJhd2lu
ZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hhcmFjdGVycyBiZWZvcmUgcnVu
LT5mcm9tLgotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJz
MTYoKSwgcnVuLmxlbmd0aCgpKTsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVy
UmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQotewot
ICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1Ug
aXMgdXNlZC4gTm90ZSB0aGF0IHdlIAotICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNo
YXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwotICAgIC8vIGFy
ZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdvIHRvIHRoZSBjb21wbGV4IHBh
dGguCi0gICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdlbGwgY29uc2lkZXIgYmluYXJ5
IHNlYXJjaCBvdmVyIGEgc29ydGVkCi0gICAgLy8gbGlzdCBvZiByYW5nZXMuCi0gICAgQ29kZVBh
dGggcmVzdWx0ID0gU2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkr
KykgewotICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgaWYg
KGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChNb2RpZmllciBMZXR0ZXJzIDog
VG9uZSBsZXR0ZXJzKSAgCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0g
MHgyRTkpIAotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAw
eDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJr
cwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MzZGKQotICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDA1OTEgfHwgYyA9PSAw
eDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRpbmcgVSswNUJFIEhlYnJldyBj
b21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNlcSwgU29mIFBhc3VxIGFuZCBO
dW4gSGFmdWtoYQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MDVD
RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIC8vIFUrMDYwMCB0aHJv
dWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28sIFNhbWFyaXRhbiwgTWFuZGFp
YywKLSAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3VybXVraGksIEd1amFyYXRpLCBP
cml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCi0gICAgICAgIC8vIE1hbGF5YWxhbSwgU2lu
aGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCi0gICAgICAgIGlmIChjIDwgMHgwNjAw
KSAKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDEwOUYpCi0gICAg
ICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICAvLyBVKzExMDAgdGhyb3VnaCBVKzEx
RkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hvdWxkIGJlIGxlZnQgaGVyZSBp
ZiB5b3UgcHJlY29tcG9zZTsKLSAgICAgICAgLy8gTW9kZXJuIEtvcmVhbiB3aWxsIGJlIHByZWNv
bXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKLSAgICAgICAgaWYgKGMgPCAweDExMDApCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxMUZGKQotICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDEzNUQpIC8vIFUrMTM1RCB0
aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDEzNUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgwIHRocm91Z2ggVSsxOEFGIFRh
Z2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwgTW9uZ29saWFuCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOEFGKQotICAgICAgICAgICAgcmV0
dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDE5MDApIC8vIFUrMTkwMCB0aHJvdWdo
IFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHgxOTRGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUrMTlERiBOZXcgVGFpIEx1ZQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTlERikKLSAgICAgICAg
ICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxQTAwKSAvLyBVKzFBMDAg
dGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxpbmVzZSwgQmF0YWssIExlcGNo
YSwgVmVkaWMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDFDRkYp
Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MURDMCkg
Ly8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNyaXRpY2FsIG1hcmsgc3VwcGxl
bWVudAotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MURGRikKLSAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIC8vIFUrMUUwMCB0aHJvdWdoIFUr
MjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3RhY2tlZCBkaWFjcml0aWNzCi0g
ICAgICAgIGlmIChjIDw9IDB4MjAwMCkgewotICAgICAgICAgICAgcmVzdWx0ID0gU2ltcGxlV2l0
aEdseXBoT3ZlcmZsb3c7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBVKzIwRkYgQ29tYmluaW5nIG1h
cmtzIGZvciBzeW1ib2xzCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0g
MHgyMEZGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAw
eDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5pbmcgbWFya3MgZm9yIENvcHRp
YwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MkNGMSkKLSAgICAg
ICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgzMDJBKSAvLyBVKzMw
MkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1bCBUb25lIG1hcmtzCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzMDJGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEE2N0MpIC8vIFUrQTY3QyB0aHJv
dWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJpbGxpYwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4QTY3RCkKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBVK0E2RjAgdGhyb3VnaCBVK0E2
RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHhBNkYxKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBE
ZXZhbmFnYXJpIEV4dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5l
c2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKLSAgICAgICAg
aWYgKGMgPCAweEE4MDApIAotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9
IDB4QUJGRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwg
MHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3VsIEphbW8gRXh0LiBCCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhEN0ZGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPD0gMHhEQkZGKSB7Ci0gICAgICAgICAg
ICAvLyBIaWdoIHN1cnJvZ2F0ZQotCi0gICAgICAgICAgICBpZiAoaSA9PSBsZW4gLSAxKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBVQ2hhciBuZXh0ID0gY2hhcmFj
dGVyc1srK2ldOwotICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJBSUwobmV4dCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyMzIgc3VwcGxlbWVudGFyeUNo
YXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0KTsKLQotICAgICAgICAgICAg
aWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAvLyBVKzFGMUU2IHRocm91Z2gg
VSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPD0gMHgxRjFGRikK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICAgICAgaWYgKHN1cHBs
ZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAwIHRocm91Z2ggVStFMDFFRiBV
bmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweEUwMUVGKQotICAgICAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sg
Zm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsxMTA4MCBibG9jaykgYW5kIG90
aGVyIGNvbXBsZXggc2NyaXB0cwotICAgICAgICAgICAgLy8gaW4gcGxhbmUgMSBvciBoaWdoZXIu
Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAw
eEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3Rv
cnMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEZFMEYpCi0gICAg
ICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4RkUyMCkgLy8gVStG
RTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtzCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGgoVUNoYXIzMiBjKQotewotICAgIC8vIFRoZSBiYXNpYyBDSksgVW5pZmllZCBJZGVvZ3Jh
cGhzIGJsb2NrLgotICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9IDB4OUZGRikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNp
b24gQS4KLSAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDREQkYpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIC8vIENKSyBSYWRpY2FscyBTdXBwbGVtZW50LgotICAgIGlmIChj
ID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gS2FuZ3hpIFJhZGljYWxzLgotICAgIGlmIChjID49IDB4MkYwMCAmJiBjIDw9IDB4MkZE
RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFN0cm9rZXMuCi0gICAg
aWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzLgotICAgIGlmIChjID49IDB4
RjkwMCAmJiBjIDw9IDB4RkFGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8g
Q0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KLSAgICBpZiAoYyA+PSAweDIwMDAw
ICYmIGMgPD0gMHgyQTZERikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgIC8v
IENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCi0gICAgaWYgKGMgPj0gMHgyQTcw
MCAmJiBjIDw9IDB4MkI3M0YpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENK
SyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCi0gICAgaWYgKGMgPj0gMHgyQjc0MCAm
JiBjIDw9IDB4MkI4MUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KLSAgICBpZiAoYyA+PSAweDJGODAw
ICYmIGMgPD0gMHgyRkExRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCi17
Ci0gICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2UgM3JkIFRvbmUKLSAgICAvLyAw
eDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5kYXJpbiBDaGluZXNlIDJuZCBU
b25lCi0gICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZlIEFjY2VzcywgTWFuZGFyaW4g
Q2hpbmVzZSA0dGggVG9uZSAKLSAgICAvLyAweDJEOSBEb3QgQWJvdmUsIE1hbmRhcmluIENoaW5l
c2UgNXRoIFRvbmUgCi0gICAgaWYgKChjID09IDB4MkM3KSB8fCAoYyA9PSAweDJDQSkgfHwgKGMg
PT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChjID09IDB4MjAzMCkgfHwgKGMg
PT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCi0gICAgICAgIHx8IChjID09IDB4MjA0MikgfHwg
KGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09IDB4MjA0OSkgfHwgKGMgPT0g
MHgyMDUxKQotICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChjID09IDB4MjBERSkgfHwgKGMg
PT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4MjEwNSkKLSAgICAgICAgfHwg
KGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09IDB4MjExMykgfHwgKGMgPT0g
MHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCi0gICAgICAgIHx8IChjID09IDB4MjEyQikgfHwgKGMg
PT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4MjE1MSkgfHwgKGMgPT0gMHgy
MTUyKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNTYgJiYgYyA8
PSAweDIxNUEpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTYwICYm
IGMgPD0gMHgyMTZCKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE3
MCAmJiBjIDw9IDB4MjE3QikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0g
MHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMwNykgfHwgKGMgPT0gMHgyMzEy
KSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0NDKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09IDB4MjQyMykpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNDYwICYmIGMgPD0gMHgyNDkyKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjQ5QyAmJiBjIDw9IDB4MjRGRikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNUEwKSB8fCAoYyA9PSAw
eDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFBKSB8fCAoYyA9PSAweDI1QUIp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QjEpIHx8IChjID09
IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1QjYpIHx8IChjID09IDB4MjVC
NykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKLSAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9PSAweDI1QzEpIHx8IChjID09
IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1QzkpIHx8IChjID09IDB4MjVD
QikgfHwgKGMgPT0gMHgyNUNDKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+
PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChjID09IDB4MjVFRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAw
eDI2MDAgJiYgYyA8PSAweDI2MDMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChj
ID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAweDI2MEUpIHx8IChjID09IDB4
MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDApIHx8IChjID09IDB4MjY0Mikp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjYwICYmIGMgPD0gMHgy
NjZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjY3MiAmJiBjIDw9
IDB4MjY3RCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNkEwKSB8
fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMgPT0gMHgyNzEzKSB8fCAoYyA9
PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgyNzQwKSB8fCAoYyA9PSAweDI3
NTYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4Mjc3NiAmJiBjIDw9
IDB4Mjc3RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA9PSAweDJCMUEpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hh
cmFjdGVycy4KLSAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiwgZXhj
bHVkaW5nIDB4MzAzMC4KLSAgICBpZiAoYyA+PSAweDMwMDAgJiYgYyA8IDB4MzAzMCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+IDB4MzAzMCAmJiBjIDw9IDB4MzAzRikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIaXJhZ2FuYQotICAgIGlmIChjID49IDB4MzA0
MCAmJiBjIDw9IDB4MzA5RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBLYXRha2Fu
YSAKLSAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gQm9wb21vZm8KLSAgICBpZiAoYyA+PSAweDMxMDAgJiYgYyA8PSAweDMx
MkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgzMTkwICYmIGMgPD0g
MHgzMTlGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEJvcG9tb2ZvIEV4dGVuZGVk
Ci0gICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAKLSAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzLgotICAgIGlmIChj
ID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCi0gICAgaWYgKGMgPj0gMHgzMzAwICYmIGMgPD0gMHgz
M0ZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4Rjg2MCAmJiBjIDw9
IDB4Rjg2MikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBDSksgQ29tcGF0aWJpbGl0
eSBGb3Jtcy4KLSAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAweEZFNEYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKChjID09IDB4RkUxMCkgfHwgKGMgPT0gMHhGRTExKSB8fCAo
YyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8fCAoYyA9PSAweEZGMUMpIHx8
IChjID09IDB4RkYxRSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEhhbGZ3aWR0
aCBhbmQgRnVsbHdpZHRoIEZvcm1zCi0gICAgLy8gVXN1YWxseSBvbmx5IHVzZWQgaW4gQ0pLCi0g
ICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIC8vIEVtb2ppLgotICAgIGlmIChjID09IDB4MUYxMDApCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4MUYxMjkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBjIDw9IDB4MUYxNDkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjE1MCAmJiBjIDw9IDB4MUYxNjkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjE3MCAmJiBjIDw9IDB4
MUYxODkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgxRjIwMCAmJiBj
IDw9IDB4MUY2QzUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGlzQ0pLSWRl
b2dyYXBoKGMpOwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKLSAgICBpZiAoZGlyZWN0aW9uID09IExUUikgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcnNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAg
ICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkpIHsKLSAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpIC0gMV0pKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24g
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXVuc2ln
bmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wm
IGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dy
YXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7Ci0gICAgdW5z
aWduZWQgY291bnQgPSAwOwotICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFyMzIg
Y2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2Uo
Y2hhcmFjdGVyKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAg
aXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQoY2hhcmFjdGVyKSAmJiBpICsg
MSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tpICsgMV0pKSB7Ci0gICAgICAg
ICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlciwgY2hh
cmFjdGVyc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JT
eW1ib2woY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lv
bikKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lv
biA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIg
PSBjaGFyYWN0ZXJzW2kgLSAxXTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFj
dGVyKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRl
ckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJhY3RlcikgJiYgaSA+IDEgJiYg
VTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7Ci0gICAgICAgICAgICAgICAgY2hhcmFj
dGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbaSAtIDJdLCBjaGFyYWN0ZXIp
OwotICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChl
eHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVy
KSkgewotICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lvbikKLSAgICAgICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAg
ICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKLXsKLSAgICBpZiAo
c3RyaW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmluZ1ZpZXcubGVuZ3Ro
KCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci0gICAgcmV0dXJuIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdW
aWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwotfQotCi1ib29sIEZv
bnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQotewotICAgIGlmIChVX0dFVF9H
Q19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNLIHwgVV9HQ19DQ19NQVNLIHwg
VV9HQ19DRl9NQVNLKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWRkaXRpb25h
bCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBDU1MgVGV4dCBMZXZlbCAzIEVk
aXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KLSAgICBpZiAoYyA9PSBldGhpb3BpY1dvcmRz
cGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8IGMgPT0gYWVnZWFuV29yZFNl
cGFyYXRvckRvdAotICAgICAgICB8fCBjID09IHVnYXJpdGljV29yZERpdmlkZXIgfHwgYyA9PSB0
aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRpYmV0YW5NYXJrRGVsaW1pdGVy
VHNoZWdCc3RhcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAotewotICAgIHJldHVy
biBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKLX0KLSAgICAK
LUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxp
bmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGluZGV4KQotewotICAgIC8vIEluIGdlbmVyYWwsIHdlIHdhbnQgdG8gc2tpcCBk
ZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJzIG9uIENKSyBjaGFyYWN0ZXJz
IGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCi0gICAgLy8gc28gd2Ugd2FudCB0byBk
cmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBi
YXNpcykuCi0gICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwotICAgIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5kZXgpOwotCi0gICAgaWYgKG9m
ZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkgewotICAgICAgICAvLyBXZSBo
YXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhpcyBnbHlwaC4gQmFpbC4KLSAg
ICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpE
cmF3T3ZlckdseXBoOwotICAgIH0KLSAgICAKLSAgICBpZiAodGV4dFJ1bi5pczhCaXQoKSkKLSAg
ICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVyczgoKVtvZmZzZXRJblN0cmlu
Z107Ci0gICAgZWxzZQotICAgICAgICBVMTZfTkVYVCh0ZXh0UnVuLmNoYXJhY3RlcnMxNigpLCBv
ZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgCi0g
ICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJfSURFT0dSQVBISUMgZG9lc24n
dCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNvZGVwb2ludHMuCi0gICAgLy8g
SW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2NhdGlvbiBibG9jayIgZm9yIHRo
ZSBjaGFyYWN0ZXIuCi0gICAgVUJsb2NrQ29kZSBibG9ja0NvZGUgPSB1YmxvY2tfZ2V0Q29kZShi
YXNlQ2hhcmFjdGVyKTsKLSAgICBzd2l0Y2ggKGJsb2NrQ29kZSkgewotICAgIGNhc2UgVUJMT0NL
X0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgotICAgIGNhc2UgVUJMT0NLX0NKS19TWU1CT0xTX0FO
RF9QVU5DVFVBVElPTjoKLSAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9DSktfTEVUVEVSU19BTkRf
TU9OVEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZOgotICAgIGNhc2UgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6Ci0gICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIUzoKLSAgICBjYXNlIFVCTE9DS19DSktfQ09NUEFUSUJJTElU
WV9JREVPR1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0ZPUk1TOgot
ICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0I6Ci0gICAg
Y2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19TVVBQTEVNRU5UOgotICAg
IGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgotICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lE
RU9HUkFQSFNfRVhURU5TSU9OX0M6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dS
QVBIU19FWFRFTlNJT05fRDoKLSAgICBjYXNlIFVCTE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElP
Tl9DSEFSQUNURVJTOgotICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9CX0lERU9HUkFNUzoKLSAgICBj
YXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVNRU5UOgotICAgIGNhc2UgVUJM
T0NLX0hJUkFHQU5BOgotICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5BOgotICAgIGNhc2UgVUJMT0NL
X0JPUE9NT0ZPOgotICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VYVEVOREVEOgotICAgIGNhc2Ug
VUJMT0NLX0hBTkdVTF9KQU1POgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9DT01QQVRJQklMSVRZ
X0pBTU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxFUzoKLSAgICBjYXNlIFVCTE9D
S19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VY
VEVOREVEX0I6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5k
ZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
R2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OlNraXBEZXNjZW5kZXJz
OwotICAgIH0KLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMp
IDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMp
IDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDYsIDIwMDcsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIEZvbnRfaAotI2RlZmluZSBGb250X2gKLQotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgot
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKLSNp
bmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJU
ZXh0RGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotCi0vLyAiWDExL1guaCIgZGVmaW5lcyBDb21w
bGV4IHRvIDAgYW5kIGNvbmZsaWN0cwotLy8gd2l0aCBDb21wbGV4IHZhbHVlIGluIENvZGVQYXRo
IGVudW0uCi0jaWZkZWYgQ29tcGxleAotI3VuZGVmIENvbXBsZXgKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBGb250RGF0YTsKLWNsYXNzIEZvbnRNZXRyaWNzOwotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsK
LWNsYXNzIEZvbnRTZWxlY3RvcjsKLWNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwotY2xhc3MgTGF5b3V0UmVjdDsKLWNsYXNzIFJlbmRlclRleHQ7Ci1jbGFzcyBUZXh0
TGF5b3V0OwotY2xhc3MgVGV4dFJ1bjsKLQotc3RydWN0IEdseXBoRGF0YTsKLQotc3RydWN0IEds
eXBoT3ZlcmZsb3cgewotICAgIEdseXBoT3ZlcmZsb3coKQotICAgICAgICA6IGxlZnQoMCkKLSAg
ICAgICAgLCByaWdodCgwKQotICAgICAgICAsIHRvcCgwKQotICAgICAgICAsIGJvdHRvbSgwKQot
ICAgICAgICAsIGNvbXB1dGVCb3VuZHMoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFsZWZ0ICYmICFyaWdodCAm
JiAhdG9wICYmICFib3R0b207Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgZXh0ZW5kVG8oY29u
c3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICBsZWZ0ID0gc3RkOjptYXgo
bGVmdCwgb3RoZXIubGVmdCk7Ci0gICAgICAgIHJpZ2h0ID0gc3RkOjptYXgocmlnaHQsIG90aGVy
LnJpZ2h0KTsKLSAgICAgICAgdG9wID0gc3RkOjptYXgodG9wLCBvdGhlci50b3ApOwotICAgICAg
ICBib3R0b20gPSBzdGQ6Om1heChib3R0b20sIG90aGVyLmJvdHRvbSk7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxlZnQgIT0gb3RoZXIubGVmdCB8fCByaWdodCAhPSBvdGhlci5yaWdodCB8fCB0
b3AgIT0gb3RoZXIudG9wIHx8IGJvdHRvbSAhPSBvdGhlci5ib3R0b207Ci0gICAgfQotCi0gICAg
aW50IGxlZnQ7Ci0gICAgaW50IHJpZ2h0OwotICAgIGludCB0b3A7Ci0gICAgaW50IGJvdHRvbTsK
LSAgICBib29sIGNvbXB1dGVCb3VuZHM7Ci19OwotCi1jbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0
b3IgewotcHVibGljOgotICAgIGVudW0gY2xhc3MgR2x5cGhVbmRlcmxpbmVUeXBlIHtTa2lwRGVz
Y2VuZGVycywgU2tpcEdseXBoLCBEcmF3T3ZlckdseXBofTsKLSAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnNNb3JlUGF0aHMoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXRoIHBhdGgoKSA9IDA7Ci0gICAg
dmlydHVhbCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBleHRlbnRzKCkgPSAwOwotICAgIHZpcnR1
YWwgR2x5cGhVbmRlcmxpbmVUeXBlIHVuZGVybGluZVR5cGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGFkdmFuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB+R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCkg
eyB9Ci19OwotR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0
ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGlu
ZGV4KTsKLQotY2xhc3MgRm9udCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQg
bGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwotICAgIC8vIFRoaXMgY29uc3RydWN0
b3IgaXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0
aXZlIGZvbnQuCi0gICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiwgYm9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwot
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0t
aW5kZXBlbmRlbnQuCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7Ci0jZW5kaWYKLSAgICB+Rm9udCgp
OwotCi0gICAgRm9udChjb25zdCBGb250Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3Bl
cmF0b3I9KGNvbnN0IEZvbnQmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQotCi0gICAgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREZXNjcmlwdGlvbjsgfQotCi0gICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7IH0KLSAgICBmbG9hdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KLQotICAg
IHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPikgY29uc3Q7Ci0KLSAgICBlbnVt
IEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNl
RmFsbGJhY2tJZkZvbnROb3RSZWFkeSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jiwg
aW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9O
b3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSkgY29uc3Q7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9u
c1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBj
b25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIGZs
b2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5
cGhOYW1lKSBjb25zdDsKLQotICAgIFBhc3NPd25QdHI8VGV4dExheW91dD4gY3JlYXRlTGF5b3V0
KFJlbmRlclRleHQqLCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7
Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKTsKLSAgICBzdGF0aWMg
ZmxvYXQgd2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICBp
bnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJl
Y3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKLQotICAgIGJvb2wgaXNTbWFsbENhcHMoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQotCi0gICAgZmxv
YXQgd29yZFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3dvcmRTcGFjaW5nOyB9Ci0gICAgZmxv
YXQgbGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQotICAg
IHZvaWQgc2V0V29yZFNwYWNpbmcoZmxvYXQgcykgeyBtX3dvcmRTcGFjaW5nID0gczsgfQotICAg
IHZvaWQgc2V0TGV0dGVyU3BhY2luZyhmbG9hdCBzKSB7IG1fbGV0dGVyU3BhY2luZyA9IHM7IH0K
LSAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwotICAgIGJvb2wgaXNQcmludGVyRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnVzZVByaW50ZXJGb250KCk7IH0KLSAg
ICAKLSAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpOyB9Ci0KLSAgICBUeXBlc2V0dGluZ0Zl
YXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlc2V0dGluZ0ZlYXR1cmVzPihtX3R5cGVzZXR0aW5nRmVhdHVyZXMpOyB9Ci0KLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKTsgfQotICAgIHVuc2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgfQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24uZmFtaWx5QXQoaSk7IH0KLQotICAgIEZvbnRJdGFsaWMgaXRhbGljKCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uaXRhbGljKCk7IH0KLSAgICBGb250V2VpZ2h0IHdl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndlaWdodCgpOyB9Ci0gICAg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNj
cmlwdGlvbi53aWR0aFZhcmlhbnQoKTsgfQotCi0gICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9Ci0KLSAgICBjb25z
dCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERh
dGEoKS5mb250TWV0cmljcygpOyB9Ci0gICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIHByaW1hcnlGb250RGF0YSgpLnNwYWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQot
ICAgIGZsb2F0IHRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgdW5zaWduZWQgdGFiU2l6
ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0OwotICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9u
dERhdGEoKSwgdGFiU2l6ZSwgcG9zaXRpb24pOyB9Ci0gICAgYm9vbCBoYXNWYWxpZEF2ZXJhZ2VD
aGFyV2lkdGgoKSBjb25zdDsKLSAgICBib29sIGZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFi
bGUoZmxvYXQgJndpZHRoKSBjb25zdDsgLy8gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MKLQotICAg
IGludCBlbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0gICAg
aW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0gICAg
aW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLQotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKLSAgICBjb25z
dCBGb250UmFuZ2VzJiBmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkKSBjb25zdDsKLSAgICBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250RGF0
YVZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7Ci0gICAgCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQpIGNv
bnN0OwotI2VuZGlmCi0KLSAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIpOwotCi0gICAg
Ly8gQkVXQVJFOiBJZiBpc0FmdGVyRXhwYW5zaW9uIGlzIHRydWUgYWZ0ZXIgdGhpcyBmdW5jdGlv
biBjYWxsLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZSBpbmNsdWRlcyBhIHRyYWlsaW5nIG9wcG9y
dHVuaXR5Ci0gICAgLy8gd2hpY2ggbWF5IG9yIG1heSBub3QgYWN0dWFsbHkgYmUgcHJlc2VudC4g
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVu
dCgpIGNvbXBlbnNhdGVzCi0gICAgLy8gZm9yIHRoaXMgYnkgZGVjcmVtZW50aW5nIHRoZSByZXR1
cm5lZCB2YWx1ZSBpZiBpc0FmdGVyRXhwYW5zaW9uIGlzIHRydWUgYXQgdGhlIGVuZCBvZiBhIGxp
bmUuCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3Qg
U3RyaW5nVmlldyYsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOwot
Ci0gICAgZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEds
eXBoT3ZlcmZsb3cgfTsKLSAgICBDb2RlUGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29u
c3Q7Ci0gICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENo
YXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9Ci0gICAgc3RhdGljIENvZGVQYXRoIGNo
YXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwotCi0gICAg
Ym9vbCBwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBlbnVtIEZvclRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVtcGhhc2lzLCBGb3JUZXh0
RW1waGFzaXMgfTsKLQotICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFu
Y2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09y
Tm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICBmbG9hdCBkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1w
bGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAg
ICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhC
dWZmZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cq
ID0gMCkgY29uc3Q7Ci0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25z
dCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
OwotCi0gICAgYm9vbCBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5n
JiwgR2x5cGhEYXRhJikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgYm9vbCBjYW5SZXR1cm5GYWxsYmFj
a0ZvbnRzRm9yQ29tcGxleFRleHQoKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBp
bi1zdHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZv
clRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICBmbG9h
dCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGly
ZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBmcmllbmQg
c3RydWN0IFdpZHRoSXRlcmF0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0OwotCi1wdWJsaWM6Ci0jaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0g
ICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmVxdWFsRm9yVGV4dEF1dG9T
aXppbmcob3RoZXIubV9mb250RGVzY3JpcHRpb24pCi0gICAgICAgICAgICAmJiBtX2xldHRlclNw
YWNpbmcgPT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nCi0gICAgICAgICAgICAmJiBtX3dvcmRTcGFj
aW5nID09IG90aGVyLm1fd29yZFNwYWNpbmc7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBVc2Vm
dWwgZm9yIGRlYnVnZ2luZyB0aGUgZGlmZmVyZW50IGZvbnQgcmVuZGVyaW5nIGNvZGUgcGF0aHMu
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0Q29kZVBhdGgoQ29kZVBhdGgpOwot
ICAgIHN0YXRpYyBDb2RlUGF0aCBjb2RlUGF0aCgpOwotICAgIHN0YXRpYyBDb2RlUGF0aCBzX2Nv
ZGVQYXRoOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RGVmYXVsdFR5cGVz
ZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyk7Ci0gICAgc3RhdGljIFR5cGVzZXR0
aW5nRmVhdHVyZXMgZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKLQotICAgIHN0YXRpYyBj
b25zdCB1aW50OF90IHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XTsKLSAgICBzdGF0
aWMgYm9vbCBpc1JvdW5kaW5nSGFja0NoYXJhY3RlcihVQ2hhcjMyIGMpCi0gICAgewotICAgICAg
ICByZXR1cm4gIShjICYgfjB4RkYpICYmIHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbY107
Ci0gICAgfQotCi0gICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKLSAgICBz
dGF0aWMgYm9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9
PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09IG5vQnJlYWtTcGFjZTsgfQotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVyb1dp
ZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoYykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIwMGQ7
IH0KLSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQo
VUNoYXIgYykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwg
YyA9PSBzb2Z0SHlwaGVuIHx8IGMgPT0gemVyb1dpZHRoU3BhY2UgfHwgKGMgPj0gMHgyMDBlICYm
IGMgPD0gMHgyMDBmKSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0gemVy
b1dpZHRoTm9CcmVha1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7IH0K
LSAgICBzdGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7Ci0KLSAg
ICBzdGF0aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCi0g
ICAgewotICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3BhY2U7Ci0KLSAgICAgICAgaWYgKHRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHplcm9XaWR0aFNwYWNlOwotCi0gICAgICAgIHJldHVy
biBjaGFyYWN0ZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMo
Y29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFs
aXplU3BhY2VzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIGJvb2wgdXNl
QmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdCB7IHJldHVybiBtX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sOyB9Ci0gICAgRm9udEdseXBocyogZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlw
aHMuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkg
Y29uc3Q7Ci0KLSAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1
cmVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJp
bmdNb2RlID0gbV9mb250RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAg
VHlwZXNldHRpbmdGZWF0dXJlcyBmZWF0dXJlcyA9IHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXM7Ci0KLSAgICAgICAgc3dpdGNoICh0ZXh0UmVuZGVyaW5nTW9kZSkgewotICAgICAgICBjYXNl
IEF1dG9UZXh0UmVuZGVyaW5nOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3B0
aW1pemVTcGVlZDoKLSAgICAgICAgICAgIGZlYXR1cmVzICY9IH4oS2VybmluZyB8IExpZ2F0dXJl
cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZW9tZXRyaWNQcmVjaXNpb246
Ci0gICAgICAgIGNhc2UgT3B0aW1pemVMZWdpYmlsaXR5OgotICAgICAgICAgICAgZmVhdHVyZXMg
fD0gS2VybmluZyB8IExpZ2F0dXJlczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCkpIHsKLSAgICAgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgotICAgICAgICAgICAgZmVhdHVyZXMg
Jj0gfktlcm5pbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3Jp
cHRpb246Ok5vcm1hbEtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2Vy
bmluZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICht
X2ZvbnREZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2Ug
Rm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgZmVh
dHVyZXMgJj0gfkxpZ2F0dXJlczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZv
bnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgZmVhdHVy
ZXMgfD0gTGlnYXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIH0KLQotICAgIHN0YXRpYyBU
eXBlc2V0dGluZ0ZlYXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7Ci0KLSAgICBG
b250RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247Ci0gICAgbXV0YWJsZSBSZWZQdHI8Rm9u
dEdseXBocz4gbV9nbHlwaHM7Ci0gICAgZmxvYXQgbV9sZXR0ZXJTcGFjaW5nOwotICAgIGZsb2F0
IG1fd29yZFNwYWNpbmc7Ci0gICAgbXV0YWJsZSBib29sIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1i
b2w7Ci0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgOiAyOyAvLyAo
VHlwZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBjb21wdXRlZCBmcm9tIG1fZm9udERl
c2NyaXB0aW9uLgotfTsKLQotdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7Ci12b2lk
IHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgY2xl
YXJXaWR0aENhY2hlcygpOwotCi1pbmxpbmUgRm9udDo6fkZvbnQoKQotewotfQotCi1pbmxpbmUg
Y29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVG
b250RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250OjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAotewotICAgIEFT
U0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwotfQotCi1pbmxpbmUgYm9vbCBGb250Ojpp
c0ZpeGVkUGl0Y2goKSBjb25zdAotewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJu
IG1fZ2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwotfQotCi1pbmxpbmUg
Rm9udFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBt
X2dseXBocyA/IG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSA6IDA7Ci19Ci0KLWlubGluZSBmbG9h
dCBGb250Ojp0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIHVuc2lnbmVk
IHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAotewotICAgIGlmICghdGFiU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNp
emUgKiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7Ci0gICAgZmxvYXQg
dGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsKLSAg
ICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRh
YldpZHRoIDogdGFiRGVsdGFXaWR0aDsKLX0KLQotfQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVt
cGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3Jl
OjpUZXh0TGF5b3V0Kik7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250
Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgog
I2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAj
aW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9u
dENhc2NhZGU7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3MgRm9udFNlbGVjdG9yOwog
Y2xhc3MgT3BlblR5cGVWZXJ0aWNhbERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShyZXZpc2lvbiAxNzg0MTgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOjE3ODQxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIK
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVz
cGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV1RGIHsKKworLy8gYWxsb3cgY29tcGlsYXRpb24g
b2YgT3duUHRyPFRleHRMYXlvdXQ+IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNj
ZXNzIHRvIHRoZSBUZXh0TGF5b3V0IGNsYXNzIGRlZmluaXRpb24KK3RlbXBsYXRlIDw+IHZvaWQg
ZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCog
cHRyKQoreworICAgIFdlYkNvcmU6OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworfQorCit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9y
QWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4pOworCitjb25zdCB1aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFj
dGVyVGFibGVbMjU2XSA9IHsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQq
LywgMSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDEgLyo/Ki8sCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMSAvKm5v
LWJyZWFrIHNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgYm9vbCBpc0RyYXduV2l0aFNW
R0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKQoreworICAgIHJldHVybiBydW4ucmVuZGVyaW5nQ29u
dGV4dCgpOworfQorCitzdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+
KiBzZXQ7CisgICAgaWYgKCFzZXQpIHsKKyAgICAgICAgc2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPjsKKyAgICAgICAgc2V0LT5hZGQoIk1TIFBHb3RoaWMiKTsKKyAgICAgICAgVUNoYXIg
dW5pY29kZU5hbWVNU1BHb3RoaWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZGMzAs
IDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07CisgICAgICAgIHNldC0+YWRkKEF0b21p
Y1N0cmluZyh1bmljb2RlTmFtZU1TUEdvdGhpYywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFt
ZU1TUEdvdGhpYykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTVMgUE1pbmNobyIpOworICAgICAg
ICBVQ2hhciB1bmljb2RlTmFtZU1TUE1pbmNob1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAs
IDB4RkYzMCwgMHg2NjBFLCAweDY3MUR9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmco
dW5pY29kZU5hbWVNU1BNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU1BNaW5j
aG8pKSk7CisKKyAgICAgICAgc2V0LT5hZGQoIk1TIEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1
bmljb2RlTmFtZU1TR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHgzMEI0LCAw
eDMwQjcsIDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVu
aWNvZGVOYW1lTVNHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU0dvdGhpYykp
KTsKKworICAgICAgICBzZXQtPmFkZCgiTVMgTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNv
ZGVOYW1lTVNNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDY2MEUsIDB4Njcx
RH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TTWluY2hvLCBX
VEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNNaW5jaG8pKSk7CisKKyAgICAgICAgc2V0LT5h
ZGQoIk1laXJ5byIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1laXJ5b1tdID0gezB4MzBF
MSwgMHgzMEE0LCAweDMwRUEsIDB4MzBBQX07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmlu
Zyh1bmljb2RlTmFtZU1laXJ5bywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1laXJ5bykp
KTsKKyAgICB9CisgICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworRm9udDo6
Q29kZVBhdGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87CisKK1R5cGVzZXR0aW5nRmVhdHVyZXMg
Rm9udDo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7CisKKy8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBGb250IEltcGxlbWVudGF0aW9uIChDcm9zcy1Q
bGF0Zm9ybSBQb3J0aW9uKQorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KworRm9udDo6Rm9udCgpCisgICAgOiBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNw
YWNpbmcoMCkKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCisgICAgLCBt
X3R5cGVzZXR0aW5nRmVhdHVyZXMoMCkKK3sKK30KKworRm9udDo6Rm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKKyAg
ICA6IG1fZm9udERlc2NyaXB0aW9uKGZkKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNw
YWNpbmcpCisgICAgLCBtX3dvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKQorICAgICwgbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbCh1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmQuZmlyc3RG
YW1pbHkoKSkpCisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5n
RmVhdHVyZXMoKSkKK3sKK30KKworLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3Ry
dWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQorICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAsIG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93
b3JkU3BhY2luZygwKQorICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAg
ICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQor
eworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQp
OworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01v
ZGUpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Zm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwp
OworI2VuZGlmCit9CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9y
IHBsYXRmb3JtLWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKK0ZvbnQ6OkZvbnQoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9y
bUZvbnQoZm9udERhdGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRT
cGFjaW5nKDApCisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5n
RmVhdHVyZXMoKSkKK3sKKyAgICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250RGF0YS5mb250
KCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXpl
KHByaW1hcnlGb250KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENU
Rm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0
YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9s
ZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50
ZXJGb250KGZvbnREYXRhLmlzUHJpbnRlckZvbnQoKSk7CisgICAgbV9nbHlwaHMgPSByZXRyaWV2
ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdl
dCgpKTsKK30KKyNlbmRpZgorCitGb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorICAgIDog
bV9mb250RGVzY3JpcHRpb24ob3RoZXIubV9mb250RGVzY3JpcHRpb24pCisgICAgLCBtX2dseXBo
cyhvdGhlci5tX2dseXBocykKKyAgICAsIG1fbGV0dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNw
YWNpbmcpCisgICAgLCBtX3dvcmRTcGFjaW5nKG90aGVyLm1fd29yZFNwYWNpbmcpCisgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wp
CisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMo
KSkKK3sKK30KKworRm9udCYgRm9udDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQorewor
ICAgIG1fZm9udERlc2NyaXB0aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247CisgICAgbV9n
bHlwaHMgPSBvdGhlci5tX2dseXBoczsKKyAgICBtX2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xl
dHRlclNwYWNpbmc7CisgICAgbV93b3JkU3BhY2luZyA9IG90aGVyLm1fd29yZFNwYWNpbmc7Cisg
ICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5T
eW1ib2w7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gb3RoZXIubV90eXBlc2V0dGluZ0Zl
YXR1cmVzOworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBGb250OjpvcGVyYXRvcj09KGNv
bnN0IEZvbnQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygp
IHx8IG90aGVyLmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbiAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbiB8
fCBtX2xldHRlclNwYWNpbmcgIT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nIHx8IG1fd29yZFNwYWNp
bmcgIT0gb3RoZXIubV93b3JkU3BhY2luZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX2dseXBocyA9PSBvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKCFtX2dseXBocyB8fCAhb3RoZXIubV9nbHlwaHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250
U2VsZWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIENhbiB0aGVzZSBjYXNl
cyBhY3R1YWxseSBzb21laG93IG9jY3VyPyBBbGwgZm9udHMgc2hvdWxkIGdldCB3aXBlZCBvdXQg
YnkgZnVsbCBzdHlsZSByZWNhbGMuCisgICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJz
aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBocy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1f
Z2x5cGhzLT5nZW5lcmF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7CisgICAgLy8gVGhpcyBwYXJ0
IG9mIHRoZSBrZXkgaXMgc2hhcmVkIHdpdGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2Fj
aGluZyBGb250RGF0YSBvYmplY3RzKS4KKyAgICBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hl
S2V5IGZvbnREZXNjcmlwdGlvbkNhY2hlS2V5OworICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDM+
IGZhbWlsaWVzOworICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOworICAgIHVuc2lnbmVkIGZv
bnRTZWxlY3RvclZlcnNpb247CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmxhZ3M7Cit9Owor
CitzdHJ1Y3QgRm9udEdseXBoc0NhY2hlRW50cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIEZvbnRHbHlwaHNDYWNoZUVudHJ5KEZvbnRHbHlwaHNDYWNoZUtl
eSYmIGssIFJlZjxGb250R2x5cGhzPiYmIGcpCisgICAgICAgIDoga2V5KFdURjo6bW92ZShrKSkK
KyAgICAgICAgLCBnbHlwaHMoV1RGOjptb3ZlKGcpKQorICAgIHsgfQorICAgIEZvbnRHbHlwaHND
YWNoZUtleSBrZXk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBoczsKK307CisKK3R5cGVkZWYg
SGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5Piwg
QWxyZWFkeUhhc2hlZD4gRm9udEdseXBoc0NhY2hlOworCitzdGF0aWMgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYSwgY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBi
KQoreworICAgIGlmIChhLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ICE9IGIuZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mb250U2VsZWN0
b3JJZCAhPSBiLmZvbnRTZWxlY3RvcklkIHx8IGEuZm9udFNlbGVjdG9yVmVyc2lvbiAhPSBiLmZv
bnRTZWxlY3RvclZlcnNpb24gfHwgYS5mb250U2VsZWN0b3JGbGFncyAhPSBiLmZvbnRTZWxlY3Rv
ckZsYWdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuZmFtaWxpZXMuc2l6ZSgp
ICE9IGIuZmFtaWxpZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGEuZmFtaWxpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KCFlcXVhbElnbm9yaW5nQ2FzZShhLmZhbWlsaWVzW2ldLmltcGwoKSwgYi5mYW1pbGllc1tpXS5p
bXBsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIEZvbnRHbHlwaHNDYWNoZSYgZm9udEdseXBoc0NhY2hlKCkKK3sKKyAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRm9udEdseXBoc0NhY2hlLCBjYWNoZSwg
KCkpOworICAgIHJldHVybiBjYWNoZTsKK30KKwordm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0Nh
Y2hlKCkKK3sKKyAgICBmb250R2x5cGhzQ2FjaGUoKS5jbGVhcigpOworfQorCit2b2lkIGNsZWFy
V2lkdGhDYWNoZXMoKQoreworICAgIGZvciAoYXV0byBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJl
Z2luKCksIGVuZCA9IGZvbnRHbHlwaHNDYWNoZSgpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgpLndpZHRoQ2FjaGUoKS5jbGVhcigpOworfQor
CitzdGF0aWMgdW5zaWduZWQgbWFrZUZvbnRTZWxlY3RvckZsYWdzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
ZXNjcmlwdGlvbi5zY3JpcHQoKSkgPDwgMSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlw
dGlvbi5zbWFsbENhcHMoKSk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VGb250R2x5cGhzQ2FjaGVL
ZXkoRm9udEdseXBoc0NhY2hlS2V5JiBrZXksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQoreworICAgIGtleS5mb250RGVzY3Jp
cHRpb25DYWNoZUtleSA9IEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkoZGVzY3JpcHRp
b24pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3Vu
dCgpOyArK2kpCisgICAgICAgIGtleS5mYW1pbGllcy5hcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5
QXQoaSkpOworICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxl
Y3Rvci0+dW5pcXVlSWQoKSA6IDA7CisgICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250
U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CisgICAga2V5LmZvbnRTZWxl
Y3RvckZsYWdzID0gZm9udFNlbGVjdG9yICYmIGZvbnRTZWxlY3Rvci0+cmVzb2x2ZXNGYW1pbHlG
b3IoZGVzY3JpcHRpb24pID8gbWFrZUZvbnRTZWxlY3RvckZsYWdzKGRlc2NyaXB0aW9uKSA6IDA7
Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChjb25zdCBG
b250R2x5cGhzQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQsIDc+IGhhc2hD
b2RlczsKKyAgICBoYXNoQ29kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0ICsga2V5LmZhbWls
aWVzLnNpemUoKSk7CisKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250RGVz
Y3JpcHRpb25DYWNoZUtleS5jb21wdXRlSGFzaCgpKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2Vk
QXBwZW5kKGtleS5mb250U2VsZWN0b3JJZCk7CisgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVu
ZChrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7CisgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVu
ZChrZXkuZm9udFNlbGVjdG9yRmxhZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXkuZmFtaWxpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBl
bmQoa2V5LmZhbWlsaWVzW2ldLmltcGwoKSA/IENhc2VGb2xkaW5nSGFzaDo6aGFzaChrZXkuZmFt
aWxpZXNbaV0pIDogMCk7CisKKyAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhh
c2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKK30K
Kwordm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCkKK3sK
KyAgICBWZWN0b3I8dW5zaWduZWQsIDUwPiB0b1JlbW92ZTsKKyAgICBGb250R2x5cGhzQ2FjaGU6
Oml0ZXJhdG9yIGVuZCA9IGZvbnRHbHlwaHNDYWNoZSgpLmVuZCgpOworICAgIGZvciAoRm9udEds
eXBoc0NhY2hlOjppdGVyYXRvciBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkuaGFzT25l
UmVmKCkpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7CisgICAgfQorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkKKyAgICAgICAg
Zm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKK30KKworc3RhdGljIFJlZjxG
b250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxl
Y3RvcikKK3sKKyAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OworICAgIG1ha2VGb250R2x5cGhz
Q2FjaGVLZXkoa2V5LCBmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CisKKyAg
ICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goa2V5KTsKKyAgICBG
b250R2x5cGhzQ2FjaGU6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBmb250R2x5cGhzQ2FjaGUoKS5h
ZGQoaGFzaCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PigpKTsKKyAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtl
eSA9PSBrZXkpCisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlw
aHMuZ2V0KCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+JiBu
ZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgbmV3RW50cnkgPSBzdGQ6
Om1ha2VfdW5pcXVlPEZvbnRHbHlwaHNDYWNoZUVudHJ5PihXVEY6Om1vdmUoa2V5KSwgRm9udEds
eXBoczo6Y3JlYXRlKGZvbnRTZWxlY3RvcikpOworICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHMg
PSBuZXdFbnRyeS0+Z2x5cGhzLmdldCgpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVu
cmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwgPSA1MDsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGlt
dW1FbnRyaWVzID0gNDAwOworICAgIHN0YXRpYyB1bnNpZ25lZCBwcnVuZUNvdW50ZXI7CisgICAg
Ly8gUmVmZXJlbmNlZCBGb250R2x5cGhzIHdvdWxkIGV4aXN0IGFueXdheSBzbyBwcnVuaW5nIHRo
ZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KKyAgICBpZiAoISgrK3BydW5lQ291bnRlciAlIHVucmVm
ZXJlbmNlZFBydW5lSW50ZXJ2YWwpKQorICAgICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNG
cm9tRm9udEdseXBoc0NhY2hlKCk7CisgICAgLy8gUHJldmVudCBwYXRob2xvZ2ljYWwgZ3Jvd3Ro
LgorICAgIGlmIChmb250R2x5cGhzQ2FjaGUoKS5zaXplKCkgPiBtYXhpbXVtRW50cmllcykKKyAg
ICAgICAgZm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCkp
OworICAgIHJldHVybiBnbHlwaHM7Cit9CisKK3ZvaWQgRm9udDo6dXBkYXRlKFBhc3NSZWZQdHI8
Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Cit7CisgICAgbV9nbHlwaHMgPSByZXRy
aWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9y
LmdldCgpKTsKKyAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gdXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KGZpcnN0RmFtaWx5KCkpOworICAgIG1fdHlwZXNldHRpbmdGZWF0dXJl
cyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7Cit9CisKK2Zsb2F0IEZvbnQ6OmRyYXdU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKK3sKKyAgICAvLyBEb24ndCBkcmF3
IGFueXRoaW5nIHdoaWxlIHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhl
IHByb2Nlc3Mgb2YgbG9hZGluZywKKyAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1l
bnQgaXMgc2V0IHRvIHRydWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawor
ICAgIC8vIGZvbnQpLgorICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpICYmIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAg
ICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTog
VXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgg
a2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAg
ICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAm
JiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYg
IWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxl
eDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpCisgICAgICAgIHJldHVybiBk
cmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CisKKyAgICByZXR1
cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKK30KKwor
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBpZiAoaXNMb2FkaW5n
Q3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRvIDwgMCkKKyAgICAg
ICAgdG8gPSBydW4ubGVuZ3RoKCk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCisgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChjb250ZXh0
LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgZWxzZQorICAgICAgICBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20s
IHRvKTsKK30KKworZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0Cit7CisgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQ
YXRoKHJ1bik7CisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgeworICAgICAgICAv
LyBUaGUgY29tcGxleCBwYXRoIGlzIG1vcmUgcmVzdHJpY3RpdmUgYWJvdXQgcmV0dXJuaW5nIGZh
bGxiYWNrIGZvbnRzIHRoYW4gdGhlIHNpbXBsZSBwYXRoLCBzbyB3ZSBuZWVkIGFuIGV4cGxpY2l0
IHRlc3QgdG8gbWFrZSB0aGVpciBiZWhhdmlvcnMgbWF0Y2guCisgICAgICAgIGlmICghY2FuUmV0
dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkpCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnRzID0gMDsKKyAgICAgICAgLy8gVGhlIHNpbXBsZSBwYXRoIGNhbiBvcHRpbWl6ZSB0aGUgY2Fz
ZSB3aGVyZSBnbHlwaCBvdmVyZmxvdyBpcyBub3Qgb2JzZXJ2YWJsZS4KKyAgICAgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgJiYgKGdseXBoT3ZlcmZsb3cg
JiYgIWdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpKQorICAgICAgICAgICAgZ2x5cGhPdmVy
ZmxvdyA9IDA7CisgICAgfQorCisgICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMgPSB0eXBl
c2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7CisgICAgYm9vbCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0dGVyU3BhY2lu
ZygpOworICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2FjaGUoKS5hZGQo
cnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tlcm5pbmdP
ckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBoT3ZlcmZsb3cp
OworICAgIGlmIChjYWNoZUVudHJ5ICYmICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkKKyAgICAg
ICAgcmV0dXJuICpjYWNoZUVudHJ5OworCisgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+IGxvY2FsRmFsbGJhY2tGb250czsKKyAgICBpZiAoIWZhbGxiYWNrRm9udHMpCisgICAgICAg
IGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOworCisgICAgZmxvYXQgcmVzdWx0
OworICAgIGlmIChjb2RlUGF0aFRvVXNlID09IENvbXBsZXgpCisgICAgICAgIHJlc3VsdCA9IGZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cp
OworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKworICAgIGlmIChjYWNoZUVudHJ5ICYm
IGZhbGxiYWNrRm9udHMtPmlzRW1wdHkoKSkKKyAgICAgICAgKmNhY2hlRW50cnkgPSByZXN1bHQ7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAorewor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4pKQor
ICAgICAgICByZXR1cm4gcnVuLnJlbmRlcmluZ0NvbnRleHQoKS0+ZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udCgqdGhpcywgcnVuLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOworI2VuZGlmCisKKyAg
ICBjaGFyc0NvbnN1bWVkID0gcnVuLmxlbmd0aCgpOworICAgIGdseXBoTmFtZSA9ICIiOworICAg
IHJldHVybiB3aWR0aChydW4pOworfQorCitHbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAoreworICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7CisgICAgICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkpIHsKKyAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gdV90b3VwcGVyKGMpOworICAg
ICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7CisgICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsK
KyAgICAgICAgICAgICAgICB2YXJpYW50ID0gU21hbGxDYXBzVmFyaWFudDsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OworICAgIH0KKwor
ICAgIGlmIChtaXJyb3IpCisgICAgICAgIGMgPSB1X2NoYXJNaXJyb3IoYyk7CisKKyAgICByZXR1
cm4gbV9nbHlwaHMtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwg
dmFyaWFudCk7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitQYXNzT3duUHRyPFRleHRMYXlv
dXQ+IEZvbnQ6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRM
YXlvdXQqKQoreworfQorCitmbG9hdCBGb250Ojp3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQs
IHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKworCitzdGF0aWMg
Y29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbXSA9IHsKKyAgICAi
QW1lcmljYW4gVHlwZXdyaXRlciIsCisgICAgIkFyaWFsIEhlYnJldyIsCisgICAgIkNoYWxrYm9h
cmQiLAorICAgICJDb2NoaW4iLAorICAgICJDb3JzaXZhIEhlYnJldyIsCisgICAgIkNvdXJpZXIi
LAorICAgICJFdXBoZW1pYSBVQ0FTIiwKKyAgICAiR2VuZXZhIiwKKyAgICAiR2lsbCBTYW5zIiwK
KyAgICAiSGVpIiwKKyAgICAiSGVsdmV0aWNhIiwKKyAgICAiSG9lZmxlciBUZXh0IiwKKyAgICAi
SW5haU1hdGhpIiwKKyAgICAiS2FpIiwKKyAgICAiTHVjaWRhIEdyYW5kZSIsCisgICAgIk1hcmtl
ciBGZWx0IiwKKyAgICAiTW9uYWNvIiwKKyAgICAiTXNodGFrYW4iLAorICAgICJOZXcgUGVuaW5p
bSBNVCIsCisgICAgIk9zYWthIiwKKyAgICAiUmFhbmFuYSIsCisgICAgIlNUSGVpdGkiLAorICAg
ICJTeW1ib2wiLAorICAgICJUaW1lcyIsCisgICAgIkFwcGxlIEJyYWlsbGUiLAorICAgICJBcHBs
ZSBMaUdvdGhpYyIsCisgICAgIkFwcGxlIExpU3VuZyIsCisgICAgIkFwcGxlIFN5bWJvbHMiLAor
ICAgICJBcHBsZUdvdGhpYyIsCisgICAgIkFwcGxlTXl1bmdqbyIsCisgICAgIiNHdW5nU2VvIiwK
KyAgICAiI0hlYWRMaW5lQSIsCisgICAgIiNQQ015dW5nam8iLAorICAgICIjUGlsR2kiLAorfTsK
KworLy8gRm9yIGZvbnQgZmFtaWxpZXMgd2hlcmUgYW55IG9mIHRoZSBmb250cyBkb24ndCBoYXZl
IGEgdmFsaWQgZW50cnkgaW4gdGhlIE9TLzIgdGFibGUKKy8vIGZvciBhdmdDaGFyV2lkdGgsIGZh
bGxiYWNrIHRvIHRoZSBsZWdhY3kgd2Via2l0IGJlaGF2aW9yIG9mIGdldHRpbmcgdGhlIGF2Z0No
YXJXaWR0aAorLy8gZnJvbSB0aGUgd2lkdGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBh
cHBseSB0byBhIGZpeGVkIG51bWJlciBvZiBNYWMgZm9udHMsCisvLyBidXQsIGluIG9yZGVyIHRv
IGdldCBzaW1pbGFyIHJlbmRlcmluZyBhY3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNr
IGZvcgorLy8gYWxsIHBsYXRmb3Jtcy4KK2Jvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldp
ZHRoKCkgY29uc3QKK3sKKyAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gZmlyc3RGYW1pbHkoKTsK
KyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCisgICAgLy8gSW50ZXJuYWwgZm9udHMgb24g
T1MgWCBhbmQgaU9TIGFsc28gaGF2ZSBhbiBpbnZhbGlkIGVudHJ5IGluIHRoZSB0YWJsZSBmb3Ig
YXZnQ2hhcldpZHRoLgorICAgIGlmIChwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNT
dHJpbmc+KiBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IDA7CisKKyAgICBp
ZiAoIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwKSB7CisgICAgICAgIGZvbnRG
YW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gbmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5n
PjsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGgpOyArK2kpCisgICAgICAgICAgICBmb250RmFt
aWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+YWRkKEF0b21pY1N0cmluZyhmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aFtpXSkpOworICAgIH0KKworICAgIHJldHVybiAhZm9udEZh
bWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRhaW5zKGZhbWlseSk7Cit9CisKK2Jv
b2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCYgd2lkdGgpIGNv
bnN0Cit7CisgICAgYm9vbCBzdWNjZXNzID0gaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCk7Cisg
ICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIHdpZHRoID0gcm91bmRmKHByaW1hcnlGb250RGF0YSgp
LmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250RGF0YSgpIG1pZ2h0IG5vdCBj
b3JyZXNwb25kIHRvIGZpcnN0RmFtaWx5KCkuCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3Zv
aWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAg
IHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOworCisgICAgQ29kZVBhdGggY29k
ZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBj
b2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxp
Z2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAgaWYgKGNvZGVQYXRo
VG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNW
R0ZvbnQocnVuKSkKKyAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CisKKyAgICBpZiAo
Y29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQorICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CisKKyAgICBy
ZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgZnJvbSwgdG8pOworfQorCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4
dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0
aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXggJiYgKCF0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgfHwgaXNEcmF3bldpdGhTVkdGb250KHJ1bikpKQorICAgICAgICByZXR1
cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpOworCisgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQocnVu
LCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBTdHJpbmcgbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IFN0cmluZ0J1aWxkZXIgbm9ybWFsaXplZDsKKyAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0
eShsZW5ndGgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICBub3JtYWxpemVkLmFwcGVuZChGb250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVy
c1tpXSkpOworCisgICAgcmV0dXJuIG5vcm1hbGl6ZWQudG9TdHJpbmcoKTsKK30KKworU3RyaW5n
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJz
LCBsZW5ndGgpOworfQorCitTdHJpbmcgRm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG5vcm1hbGl6ZVNw
YWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBib29sIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOworCit2b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290
aGluZyhib29sIHNob3VsZFVzZVNtb290aGluZykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7Cit9
CisKK2Jvb2wgRm9udDo6c2hvdWxkVXNlU21vb3RoaW5nKCkKK3sKKyAgICByZXR1cm4gc2hvdWxk
VXNlRm9udFNtb290aGluZzsKK30KKwordm9pZCBGb250OjpzZXRDb2RlUGF0aChDb2RlUGF0aCBw
KQoreworICAgIHNfY29kZVBhdGggPSBwOworfQorCitGb250OjpDb2RlUGF0aCBGb250Ojpjb2Rl
UGF0aCgpCit7CisgICAgcmV0dXJuIHNfY29kZVBhdGg7Cit9CisKK3ZvaWQgRm9udDo6c2V0RGVm
YXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzKQoreworICAgIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSB0eXBlc2V0dGlu
Z0ZlYXR1cmVzOworfQorCitUeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OmRlZmF1bHRUeXBlc2V0
dGluZ0ZlYXR1cmVzKCkKK3sKKyAgICByZXR1cm4gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJl
czsKK30KKworRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVu
KSBjb25zdAoreworICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCisgICAgICAgIHJldHVybiBz
X2NvZGVQYXRoOworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhT
VkdGb250KHJ1bikpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisjZW5kaWYKKworICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5m
ZWF0dXJlU2V0dGluZ3MoKS0+c2l6ZSgpID4gMCkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7Cisg
ICAgCisgICAgaWYgKHJ1bi5sZW5ndGgoKSA+IDEgJiYgIVdpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcygqdGhpcykpCisgICAgICAgIHJldHVybiBDb21wbGV4OworCisg
ICAgaWYgKCFydW4uY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKCkpCisgICAgICAgIHJldHVybiBT
aW1wbGU7CisKKyAgICBpZiAocnVuLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gU2ltcGxlOwor
CisgICAgLy8gU3RhcnQgZnJvbSAwIHNpbmNlIGRyYXdpbmcgYW5kIGhpZ2hsaWdodGluZyBhbHNv
IG1lYXN1cmUgdGhlIGNoYXJhY3RlcnMgYmVmb3JlIHJ1bi0+ZnJvbS4KKyAgICByZXR1cm4gY2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7Cit9
CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHVz
ZSBhIFVuaWNvZGVTZXQgaW4gcG9ydHMgd2hlcmUgSUNVIGlzIHVzZWQuIE5vdGUgdGhhdCB3ZSAK
KyAgICAvLyBjYW4ndCBzaW1wbHkgdXNlIFVuaWNvZGVDaGFyYWN0ZXIgUHJvcGVydHkvY2xhc3Mg
YmVjYXVzZSBzb21lIGNoYXJhY3RlcnMKKyAgICAvLyBhcmUgbm90ICdjb21iaW5pbmcnLCBidXQg
c3RpbGwgbmVlZCB0byBnbyB0byB0aGUgY29tcGxleCBwYXRoLgorICAgIC8vIEFsdGVybmF0aXZl
bHksIHdlIG1heSBhcyB3ZWxsIGNvbnNpZGVyIGJpbmFyeSBzZWFyY2ggb3ZlciBhIHNvcnRlZAor
ICAgIC8vIGxpc3Qgb2YgcmFuZ2VzLgorICAgIENvZGVQYXRoIHJlc3VsdCA9IFNpbXBsZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgY29uc3QgVUNo
YXIgYyA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgIGlmIChjIDwgMHgyRTUpIC8vIFUrMDJFNSB0
aHJvdWdoIFUrMDJFOSAoTW9kaWZpZXIgTGV0dGVycyA6IFRvbmUgbGV0dGVycykgIAorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MkU5KSAKKyAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHgzMDApIC8vIFUrMDMwMCB0aHJvdWdo
IFUrMDM2RiBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoYyA8PSAweDM2RikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgIGlmIChjIDwgMHgwNTkxIHx8IGMgPT0gMHgwNUJFKSAvLyBVKzA1OTEgdGhyb3Vn
aCBVKzA1Q0YgZXhjbHVkaW5nIFUrMDVCRSBIZWJyZXcgY29tYmluaW5nIG1hcmtzLCBIZWJyZXcg
cHVuY3R1YXRpb24gUGFzZXEsIFNvZiBQYXN1cSBhbmQgTnVuIEhhZnVraGEKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDA1Q0YpCisgICAgICAgICAgICByZXR1cm4g
Q29tcGxleDsKKworICAgICAgICAvLyBVKzA2MDAgdGhyb3VnaCBVKzEwOUYgQXJhYmljLCBTeXJp
YWMsIFRoYWFuYSwgTktvLCBTYW1hcml0YW4sIE1hbmRhaWMsCisgICAgICAgIC8vIERldmFuYWdh
cmksIEJlbmdhbGksIEd1cm11a2hpLCBHdWphcmF0aSwgT3JpeWEsIFRhbWlsLCBUZWx1Z3UsIEth
bm5hZGEsIAorICAgICAgICAvLyBNYWxheWFsYW0sIFNpbmhhbGEsIFRoYWksIExhbywgVGliZXRh
biwgTXlhbm1hcgorICAgICAgICBpZiAoYyA8IDB4MDYwMCkgCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxMDlGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
CisKKyAgICAgICAgLy8gVSsxMTAwIHRocm91Z2ggVSsxMUZGIEhhbmd1bCBKYW1vIChvbmx5IEFu
Y2llbnQgS29yZWFuIHNob3VsZCBiZSBsZWZ0IGhlcmUgaWYgeW91IHByZWNvbXBvc2U7CisgICAg
ICAgIC8vIE1vZGVybiBLb3JlYW4gd2lsbCBiZSBwcmVjb21wb3NlZCBhcyBhIHJlc3VsdCBvZiBz
dGVwIEEpCisgICAgICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChjIDw9IDB4MTFGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisg
ICAgICAgIGlmIChjIDwgMHgxMzVEKSAvLyBVKzEzNUQgdGhyb3VnaCBVKzEzNUYgRXRoaW9waWMg
Y29tYmluaW5nIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxMzVGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAw
eDE3MDApIC8vIFUrMTc4MCB0aHJvdWdoIFUrMThBRiBUYWdhbG9nLCBIYW51bm9vLCBCdWhpZCwg
VGFnaGFud2EsS2htZXIsIE1vbmdvbGlhbgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChjIDw9IDB4MThBRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAg
IGlmIChjIDwgMHgxOTAwKSAvLyBVKzE5MDAgdGhyb3VnaCBVKzE5NEYgTGltYnUgKFVuaWNvZGUg
NC4wKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MTk0RikKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHgxOTgwKSAvLyBV
KzE5ODAgdGhyb3VnaCBVKzE5REYgTmV3IFRhaSBMdWUKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoYyA8PSAweDE5REYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKwor
ICAgICAgICBpZiAoYyA8IDB4MUEwMCkgLy8gVSsxQTAwIHRocm91Z2ggVSsxQ0ZGIEJ1Z2luZXNl
LCBUYWkgVGhhbSwgQmFsaW5lc2UsIEJhdGFrLCBMZXBjaGEsIFZlZGljCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxQ0ZGKQorICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDFEQzApIC8vIFUrMURDMCB0aHJvdWdoIFUrMURG
RiBDb21pbmluZyBkaWFjcml0aWNhbCBtYXJrIHN1cHBsZW1lbnQKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweDFERkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICAvLyBVKzFFMDAgdGhyb3VnaCBVKzIwMDAgY2hhcmFjdGVycyB3aXRoIGRp
YWNyaXRpY3MgYW5kIHN0YWNrZWQgZGlhY3JpdGljcworICAgICAgICBpZiAoYyA8PSAweDIwMDAp
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93OworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYyA8IDB4MjBEMCkgLy8g
VSsyMEQwIHRocm91Z2ggVSsyMEZGIENvbWJpbmluZyBtYXJrcyBmb3Igc3ltYm9scworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MjBGRikKKyAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHgyQ0VGKSAvLyBVKzJDRUYgdGhyb3Vn
aCBVKzJDRjEgQ29tYmluaW5nIG1hcmtzIGZvciBDb3B0aWMKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoYyA8PSAweDJDRjEpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
KworICAgICAgICBpZiAoYyA8IDB4MzAyQSkgLy8gVSszMDJBIHRocm91Z2ggVSszMDJGIElkZW9n
cmFwaGljIGFuZCBIYW5ndWwgVG9uZSBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MzAyRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIGlmIChjIDwgMHhBNjdDKSAvLyBVK0E2N0MgdGhyb3VnaCBVK0E2N0QgQ29tYmluaW5nIG1h
cmtzIGZvciBvbGQgQ3lyaWxsaWMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEE2N0QpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4QTZGMCkgLy8gVStBNkYwIHRocm91Z2ggVStBNkYxIENvbWJpbmluZyBtYXJrIGZvciBC
YW11bQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QTZGMSkKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgLy8gVStBODAwIHRocm91Z2ggVStB
QkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRlbmRlZCwKKyAg
ICAgICAvLyBIYW5ndWwgSmFtbyBFeHQuIEEsIEphdmFuZXNlLCBNeWFubWFyIEV4dGVuZGVkIEEs
IFRhaSBWaWV0LCBNZWV0ZWkgTWF5ZWssCisgICAgICAgIGlmIChjIDwgMHhBODAwKSAKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEFCRkYpCisgICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4RDdCMCkgLy8gVStEN0IwIHRocm91
Z2ggVStEN0ZGIEhhbmd1bCBKYW1vIEV4dC4gQgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4RDdGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIGlmIChjIDw9IDB4REJGRikgeworICAgICAgICAgICAgLy8gSGlnaCBzdXJyb2dhdGUKKwor
ICAgICAgICAgICAgaWYgKGkgPT0gbGVuIC0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgVUNoYXIgbmV4dCA9IGNoYXJhY3RlcnNbKytpXTsKKyAgICAgICAgICAg
IGlmICghVTE2X0lTX1RSQUlMKG5leHQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBVQ2hhcjMyIHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBM
RU1FTlRBUlkoYywgbmV4dCk7CisKKyAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFj
dGVyIDwgMHgxRjFFNikgLy8gVSsxRjFFNiB0aHJvdWdoIFUrMUYxRkYgUmVnaW9uYWwgSW5kaWNh
dG9yIFN5bWJvbHMKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4MUYxRkYpCisgICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDwgMHhF
MDEwMCkgLy8gVStFMDEwMCB0aHJvdWdoIFUrRTAxRUYgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0
b3JzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1l
bnRhcnlDaGFyYWN0ZXIgPD0gMHhFMDFFRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGZvciBCcmFobWkgKFUrMTEwMDAgYmxv
Y2spLCBLYWl0aGkgKFUrMTEwODAgYmxvY2spIGFuZCBvdGhlciBjb21wbGV4IHNjcmlwdHMKKyAg
ICAgICAgICAgIC8vIGluIHBsYW5lIDEgb3IgaGlnaGVyLgorCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHhGRTAwKSAvLyBVK0ZFMDAgdGhyb3Vn
aCBVK0ZFMEYgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0b3JzCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTBGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
CisKKyAgICAgICAgaWYgKGMgPCAweEZFMjApIC8vIFUrRkUyMCB0aHJvdWdoIFUrRkUyRiBDb21i
aW5pbmcgaGFsZiBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9
IDB4RkUyRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKK3sKKyAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KKyAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEuCisgICAgaWYgKGMgPj0gMHgz
NDAwICYmIGMgPD0gMHg0REJGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBD
SksgUmFkaWNhbHMgU3VwcGxlbWVudC4KKyAgICBpZiAoYyA+PSAweDJFODAgJiYgYyA8PSAweDJF
RkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIEthbmd4aSBSYWRpY2Fscy4K
KyAgICBpZiAoYyA+PSAweDJGMDAgJiYgYyA8PSAweDJGREYpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIC8vIENKSyBTdHJva2VzLgorICAgIGlmIChjID49IDB4MzFDMCAmJiBjIDw9
IDB4MzFFRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGli
aWxpdHkgSWRlb2dyYXBocy4KKyAgICBpZiAoYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMg
RXh0ZW5zaW9uIEIuCisgICAgaWYgKGMgPj0gMHgyMDAwMCAmJiBjIDw9IDB4MkE2REYpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhz
IEV4dGVuc2lvbiBDLgorICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4
dGVuc2lvbiBELgorICAgIGlmIChjID49IDB4MkI3NDAgJiYgYyA8PSAweDJCODFGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
IFN1cHBsZW1lbnQuCisgICAgaWYgKGMgPj0gMHgyRjgwMCAmJiBjIDw9IDB4MkZBMUYpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBjKQoreworICAgIC8vIDB4MkM3IENhcm9uLCBN
YW5kYXJpbiBDaGluZXNlIDNyZCBUb25lCisgICAgLy8gMHgyQ0EgTW9kaWZpZXIgTGV0dGVyIEFj
dXRlIEFjY2VudCwgTWFuZGFyaW4gQ2hpbmVzZSAybmQgVG9uZQorICAgIC8vIDB4MkNCIE1vZGlm
aWVyIExldHRlciBHcmF2ZSBBY2Nlc3MsIE1hbmRhcmluIENoaW5lc2UgNHRoIFRvbmUgCisgICAg
Ly8gMHgyRDkgRG90IEFib3ZlLCBNYW5kYXJpbiBDaGluZXNlIDV0aCBUb25lIAorICAgIGlmICgo
YyA9PSAweDJDNykgfHwgKGMgPT0gMHgyQ0EpIHx8IChjID09IDB4MkNCKSB8fCAoYyA9PSAweDJE
OSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjAyMCkgfHwgKGMg
PT0gMHgyMDIxKSB8fCAoYyA9PSAweDIwMzApIHx8IChjID09IDB4MjAzQikgfHwgKGMgPT0gMHgy
MDNDKQorICAgICAgICB8fCAoYyA9PSAweDIwNDIpIHx8IChjID09IDB4MjA0NykgfHwgKGMgPT0g
MHgyMDQ4KSB8fCAoYyA9PSAweDIwNDkpIHx8IChjID09IDB4MjA1MSkKKyAgICAgICAgfHwgKGMg
PT0gMHgyMEREKSB8fCAoYyA9PSAweDIwREUpIHx8IChjID09IDB4MjEwMCkgfHwgKGMgPT0gMHgy
MTAzKSB8fCAoYyA9PSAweDIxMDUpCisgICAgICAgIHx8IChjID09IDB4MjEwOSkgfHwgKGMgPT0g
MHgyMTBBKSB8fCAoYyA9PSAweDIxMTMpIHx8IChjID09IDB4MjExNikgfHwgKGMgPT0gMHgyMTIx
KQorICAgICAgICB8fCAoYyA9PSAweDIxMkIpIHx8IChjID09IDB4MjEzQikgfHwgKGMgPT0gMHgy
MTUwKSB8fCAoYyA9PSAweDIxNTEpIHx8IChjID09IDB4MjE1MikpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGMgPj0gMHgyMTU2ICYmIGMgPD0gMHgyMTVBKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjE2MCAmJiBjIDw9IDB4MjE2QikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDIxNzAgJiYgYyA8PSAweDIxN0IpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjE3RikgfHwgKGMgPT0gMHgyMTg5
KSB8fCAoYyA9PSAweDIzMDcpIHx8IChjID09IDB4MjMxMikgfHwgKGMgPT0gMHgyM0JFKSB8fCAo
YyA9PSAweDIzQkYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjND
MCAmJiBjIDw9IDB4MjNDQykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0g
MHgyM0NFKSB8fCAoYyA9PSAweDI0MjMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChjID49IDB4MjQ2MCAmJiBjIDw9IDB4MjQ5MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoYyA+PSAweDI0OUMgJiYgYyA8PSAweDI0RkYpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKChjID09IDB4MjVBMCkgfHwgKGMgPT0gMHgyNUExKSB8fCAoYyA9PSAweDI1QTIp
IHx8IChjID09IDB4MjVBQSkgfHwgKGMgPT0gMHgyNUFCKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyNUIxKSB8fCAoYyA9PSAweDI1QjIpIHx8IChjID09IDB4MjVC
MykgfHwgKGMgPT0gMHgyNUI2KSB8fCAoYyA9PSAweDI1QjcpIHx8IChjID09IDB4MjVCQykgfHwg
KGMgPT0gMHgyNUJEKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKChjID09
IDB4MjVDMCkgfHwgKGMgPT0gMHgyNUMxKSB8fCAoYyA9PSAweDI1QzYpIHx8IChjID09IDB4MjVD
NykgfHwgKGMgPT0gMHgyNUM5KSB8fCAoYyA9PSAweDI1Q0IpIHx8IChjID09IDB4MjVDQykpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUNFICYmIGMgPD0gMHgyNUQz
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjVFMiAmJiBjIDw9IDB4
MjVFNikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA9PSAweDI1RUYpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNjAwICYmIGMgPD0gMHgyNjAzKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDI2MDUpIHx8IChjID09IDB4
MjYwNikgfHwgKGMgPT0gMHgyNjBFKSB8fCAoYyA9PSAweDI2MTYpIHx8IChjID09IDB4MjYxNykg
fHwgKGMgPT0gMHgyNjQwKSB8fCAoYyA9PSAweDI2NDIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChjID49IDB4MjY2MCAmJiBjIDw9IDB4MjY2RikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI2NzIgJiYgYyA8PSAweDI2N0QpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKChjID09IDB4MjZBMCkgfHwgKGMgPT0gMHgyNkJEKSB8fCAoYyA9
PSAweDI2QkUpIHx8IChjID09IDB4MjcxMykgfHwgKGMgPT0gMHgyNzFBKSB8fCAoYyA9PSAweDI3
M0YpIHx8IChjID09IDB4Mjc0MCkgfHwgKGMgPT0gMHgyNzU2KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI3NzYgJiYgYyA8PSAweDI3N0YpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGMgPT0gMHgyQjFBKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMuCisgICAgaWYgKGMgPj0g
MHgyRkYwICYmIGMgPD0gMHgyRkZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAv
LyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24sIGV4Y2x1ZGluZyAweDMwMzAuCisgICAgaWYg
KGMgPj0gMHgzMDAwICYmIGMgPCAweDMwMzApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPiAweDMwMzAgJiYgYyA8PSAweDMwM0YpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gSGlyYWdhbmEKKyAgICBpZiAoYyA+PSAweDMwNDAgJiYgYyA8PSAweDMwOUYpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gS2F0YWthbmEgCisgICAgaWYgKGMgPj0gMHgzMEEw
ICYmIGMgPD0gMHgzMEZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEJvcG9tb2Zv
CisgICAgaWYgKGMgPj0gMHgzMTAwICYmIGMgPD0gMHgzMTJGKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmIChjID49IDB4MzE5MCAmJiBjIDw9IDB4MzE5RikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBCb3BvbW9mbyBFeHRlbmRlZAorICAgIGlmIChjID49IDB4MzFBMCAm
JiBjIDw9IDB4MzFCRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgCisgICAgLy8gRW5jbG9zZWQg
Q0pLIExldHRlcnMgYW5kIE1vbnRocy4KKyAgICBpZiAoYyA+PSAweDMyMDAgJiYgYyA8PSAweDMy
RkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5
LgorICAgIGlmIChjID49IDB4MzMwMCAmJiBjIDw9IDB4MzNGRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweEY4NjAgJiYgYyA8PSAweEY4NjIpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMuCisgICAgaWYgKGMgPj0g
MHhGRTMwICYmIGMgPD0gMHhGRTRGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgo
YyA9PSAweEZFMTApIHx8IChjID09IDB4RkUxMSkgfHwgKGMgPT0gMHhGRTEyKSB8fCAoYyA9PSAw
eEZFMTkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweEZGMEQpIHx8
IChjID09IDB4RkYxQikgfHwgKGMgPT0gMHhGRjFDKSB8fCAoYyA9PSAweEZGMUUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtcwor
ICAgIC8vIFVzdWFsbHkgb25seSB1c2VkIGluIENKSworICAgIGlmIChjID49IDB4RkYwMCAmJiBj
IDw9IDB4RkZFRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBFbW9qaS4KKyAgICBp
ZiAoYyA9PSAweDFGMTAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4
MUYxMTAgJiYgYyA8PSAweDFGMTI5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MUYxMzAgJiYgYyA8PSAweDFGMTQ5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChjID49IDB4MUYxNTAgJiYgYyA8PSAweDFGMTY5KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChjID49IDB4MUYxNzAgJiYgYyA8PSAweDFGMTg5KQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChjID49IDB4MUYyMDAgJiYgYyA8PSAweDFGNkM1KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBpc0NKS0lkZW9ncmFwaChjKTsKK30KKwordW5zaWdu
ZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYg
aXNBZnRlckV4cGFuc2lvbikKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYgKGRp
cmVjdGlvbiA9PSBMVFIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ldKSkgewor
ICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lv
biA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhw
YW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcnNbaSAtIDFdKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCit1bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQorewor
ICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBp
ZiAoZGlyZWN0aW9uID09IExUUikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNb
aV07CisgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKKyAgICAgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVl
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKFUxNl9JU19MRUFEKGNoYXJhY3RlcikgJiYgaSArIDEgPCBsZW5ndGggJiYgVTE2X0lTX1RS
QUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgeworICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUx
Nl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXIsIGNoYXJhY3RlcnNbaSArIDFdKTsKKyAgICAg
ICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXhwYW5kQXJv
dW5kSWRlb2dyYXBocyAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCisgICAgICAgICAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpIC0gMV07Cisg
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgICAg
ICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXIpICYmIGkgPiAxICYmIFUxNl9JU19MRUFEKGNoYXJhY3RlcnNb
aSAtIDJdKSkgeworICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVO
VEFSWShjaGFyYWN0ZXJzW2kgLSAyXSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpLS07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAm
JiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gY291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
Y29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmll
dy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJF
eHBhbnNpb24pOworICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwo
c3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9u
LCBpc0FmdGVyRXhwYW5zaW9uKTsKK30KKworYm9vbCBGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhh
c2lzKFVDaGFyMzIgYykKK3sKKyAgICBpZiAoVV9HRVRfR0NfTUFTSyhjKSAmIChVX0dDX1pfTUFT
SyB8IFVfR0NfQ05fTUFTSyB8IFVfR0NfQ0NfTUFTSyB8IFVfR0NfQ0ZfTUFTSykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEFkZGl0aW9uYWwgd29yZC1zZXBhcmF0b3IgY2hhcmFj
dGVycyBsaXN0ZWQgaW4gQ1NTIFRleHQgTGV2ZWwgMyBFZGl0b3IncyBEcmFmdCAzIE5vdmVtYmVy
IDIwMTAuCisgICAgaWYgKGMgPT0gZXRoaW9waWNXb3Jkc3BhY2UgfHwgYyA9PSBhZWdlYW5Xb3Jk
U2VwYXJhdG9yTGluZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JEb3QKKyAgICAgICAgfHwg
YyA9PSB1Z2FyaXRpY1dvcmREaXZpZGVyIHx8IGMgPT0gdGliZXRhbk1hcmtJbnRlcnN5bGxhYmlj
VHNoZWcgfHwgYyA9PSB0aWJldGFuTWFya0RlbGltaXRlclRzaGVnQnN0YXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZvbnQ6OmlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9nbHlwaHMgJiYgbV9nbHlwaHMt
PmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7Cit9CisgICAgCitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBpbmRleCkKK3sKKyAg
ICAvLyBJbiBnZW5lcmFsLCB3ZSB3YW50IHRvIHNraXAgZGVzY2VuZGVycy4gSG93ZXZlciwgc2tp
cHBpbmcgZGVzY2VuZGVycyBvbiBDSksgY2hhcmFjdGVycyBsZWFkcyB0byB1bmRlc2lyYWJsZSBy
ZW5kZXJpbmdzLAorICAgIC8vIHNvIHdlIHdhbnQgdG8gZHJhdyB0aHJvdWdoIENKSyBjaGFyYWN0
ZXJzIChvbiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgYmFzaXMpLgorICAgIFVDaGFyMzIgYmFz
ZUNoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IGdseXBoQnVmZmVyLm9m
ZnNldEluU3RyaW5nKGluZGV4KTsKKworICAgIGlmIChvZmZzZXRJblN0cmluZyA9PSBHbHlwaEJ1
ZmZlcjo6bm9PZmZzZXQpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBubyBpZGVhIHdoaWNoIGNoYXJh
Y3RlciBzcGF3bmVkIHRoaXMgZ2x5cGguIEJhaWwuCisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0
aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHRleHRSdW4uaXM4Qml0KCkpCisgICAgICAgIGJhc2VDaGFyYWN0ZXIgPSB0
ZXh0UnVuLmNoYXJhY3RlcnM4KClbb2Zmc2V0SW5TdHJpbmddOworICAgIGVsc2UKKyAgICAgICAg
VTE2X05FWFQodGV4dFJ1bi5jaGFyYWN0ZXJzMTYoKSwgb2Zmc2V0SW5TdHJpbmcsIHRleHRSdW4u
bGVuZ3RoKCksIGJhc2VDaGFyYWN0ZXIpOworICAgIAorICAgIC8vIHVfZ2V0SW50UHJvcGVydHlW
YWx1ZSB3aXRoIFVDSEFSX0lERU9HUkFQSElDIGRvZXNuJ3QgcmV0dXJuIHRydWUgZm9yIEphcGFu
ZXNlIG9yIEtvcmVhbiBjb2RlcG9pbnRzLgorICAgIC8vIEluc3RlYWQsIHdlIGNhbiB1c2UgdGhl
ICJVbmljb2RlIGFsbG9jYXRpb24gYmxvY2siIGZvciB0aGUgY2hhcmFjdGVyLgorICAgIFVCbG9j
a0NvZGUgYmxvY2tDb2RlID0gdWJsb2NrX2dldENvZGUoYmFzZUNoYXJhY3Rlcik7CisgICAgc3dp
dGNoIChibG9ja0NvZGUpIHsKKyAgICBjYXNlIFVCTE9DS19DSktfUkFESUNBTFNfU1VQUExFTUVO
VDoKKyAgICBjYXNlIFVCTE9DS19DSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT046CisgICAgY2Fz
ZSBVQkxPQ0tfRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUzoKKyAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWToKKyAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JB
UEhTX0VYVEVOU0lPTl9BOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFM6
CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUzoKKyAgICBjYXNl
IFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9GT1JNUzoKKyAgICBjYXNlIFVCTE9DS19DSktfVU5J
RklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9COgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJ
QklMSVRZX0lERU9HUkFQSFNfU1VQUExFTUVOVDoKKyAgICBjYXNlIFVCTE9DS19DSktfU1RST0tF
UzoKKyAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9DOgor
ICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0Q6CisgICAg
Y2FzZSBVQkxPQ0tfSURFT0dSQVBISUNfREVTQ1JJUFRJT05fQ0hBUkFDVEVSUzoKKyAgICBjYXNl
IFVCTE9DS19MSU5FQVJfQl9JREVPR1JBTVM6CisgICAgY2FzZSBVQkxPQ0tfRU5DTE9TRURfSURF
T0dSQVBISUNfU1VQUExFTUVOVDoKKyAgICBjYXNlIFVCTE9DS19ISVJBR0FOQToKKyAgICBjYXNl
IFVCTE9DS19LQVRBS0FOQToKKyAgICBjYXNlIFVCTE9DS19CT1BPTU9GTzoKKyAgICBjYXNlIFVC
TE9DS19CT1BPTU9GT19FWFRFTkRFRDoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNTzoKKyAg
ICBjYXNlIFVCTE9DS19IQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1POgorICAgIGNhc2UgVUJMT0NL
X0hBTkdVTF9TWUxMQUJMRVM6CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURf
QToKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9COgorICAgICAgICByZXR1
cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5
cGg7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6
R2x5cGhVbmRlcmxpbmVUeXBlOjpTa2lwRGVzY2VuZGVyczsKKyAgICB9Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgpAQCAt
NDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIGFsbG93IGNvbXBpbGF0aW9uIG9mIE93
blB0cjxUZXh0TGF5b3V0PiBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGFjY2VzcyB0
byB0aGUgVGV4dExheW91dCBjbGFzcyBkZWZpbml0aW9uCiB0ZW1wbGF0ZSA8PiB2b2lkIGRlbGV0
ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqIHB0cikK
IHsKLSAgICBXZWJDb3JlOjpGb250OjpkZWxldGVMYXlvdXQocHRyKTsKKyAgICBXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KHB0cik7CiB9CiAKIH0KQEAgLTUyLDcgKzUyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JB
ZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPik7CiAKLWNvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0
ZXJUYWJsZVsyNTZdID0geworY29uc3QgdWludDhfdCBGb250Q2FzY2FkZTo6c19yb3VuZGluZ0hh
Y2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKj8qLywKICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLApAQCAtOTgsMTUgKzk4LDE1IEBAIHN0YXRpYyBib29sIHVz
ZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWkKICAgICByZXR1cm4gc2V0LT5jb250YWlucyhmYW1p
bHkpOwogfQogCi1Gb250OjpDb2RlUGF0aCBGb250OjpzX2NvZGVQYXRoID0gQXV0bzsKK0ZvbnRD
YXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6c19jb2RlUGF0aCA9IEF1dG87CiAKLVR5cGVz
ZXR0aW5nRmVhdHVyZXMgRm9udDo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7CitU
eXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzID0gMDsKIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZv
bnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24pCisvLyBGb250Q2FzY2Fk
ZSBJbXBsZW1lbnRhdGlvbiAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKIC8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUZvbnQ6OkZvbnQoKQorRm9udENhc2NhZGU6OkZv
bnRDYXNjYWRlKCkKICAgICA6IG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2lu
ZygwKQogICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKQEAgLTExNCw3ICsx
MTQsNyBAQCBGb250OjpGb250KCkKIHsKIH0KIAotRm9udDo6Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKK0ZvbnRD
YXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBmbG9hdCBsZXR0
ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKICAgICA6IG1fZm9udERlc2NyaXB0aW9uKGZk
KQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpCiAgICAgLCBtX3dvcmRTcGFj
aW5nKHdvcmRTcGFjaW5nKQpAQCAtMTI0LDcgKzEyNCw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmZCwgZmwKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMg
Y29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCi1Gb250OjpGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIGZvbnRTbW9vdGhpbmdNb2RlKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3Jl
YXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQog
ICAgICwgbV93b3JkU3BhY2luZygwKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAgRm9udDo6Rm9udChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RAogI2lmIFBMQVRGT1JNKElPUykKICAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9u
dCgpKSk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNp
emUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFs
aWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwogICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVj
dG9yKQogICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZv
bnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygw
KQpAQCAtMTUyLDE0ICsxNTIsMTQgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBmb250RAogICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKICAg
ICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFy
eUZvbnQpKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0
U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwor
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRz
KHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RG
b250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CiAgICAg
bV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9u
dCgpKTsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9u
dERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogfQogI2VuZGlmCiAKLUZvbnQ6OkZv
bnQoY29uc3QgRm9udCYgb3RoZXIpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9u
dENhc2NhZGUmIG90aGVyKQogICAgIDogbV9mb250RGVzY3JpcHRpb24ob3RoZXIubV9mb250RGVz
Y3JpcHRpb24pCiAgICAgLCBtX2dseXBocyhvdGhlci5tX2dseXBocykKICAgICAsIG1fbGV0dGVy
U3BhY2luZyhvdGhlci5tX2xldHRlclNwYWNpbmcpCkBAIC0xNjksNyArMTY5LDcgQEAgRm9udDo6
Rm9udChjb25zdCBGb250JiBvdGhlcikKIHsKIH0KIAotRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGUmIEZvbnRDYXNjYWRlOjpvcGVyYXRvcj0oY29u
c3QgRm9udENhc2NhZGUmIG90aGVyKQogewogICAgIG1fZm9udERlc2NyaXB0aW9uID0gb3RoZXIu
bV9mb250RGVzY3JpcHRpb247CiAgICAgbV9nbHlwaHMgPSBvdGhlci5tX2dseXBoczsKQEAgLTE4
MCw3ICsxODAsNyBAQCBGb250JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYg
b3RoZXIpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNj
YWRlJiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSB8fCBv
dGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
MjMsMTQgKzMyMywxNCBAQCBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNo
CiAgICAgcmV0dXJuIGdseXBoczsKIH0KIAotdm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OnVwZGF0
ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAogewogICAgIG1f
Z2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24s
IGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVz
ZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKICAgICBtX3R5cGVz
ZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwogfQogCi1mbG9h
dCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAogewog
ICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBmb250
cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAogICAgIC8vIGV4Y2VwdCBpZiB0
aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxs
IHVzZSBhIGZhbGxiYWNrCkBAIC0zNTEsNyArMzUxLDcgQEAgZmxvYXQgRm9udDo6ZHJhd1RleHQo
R3JhcGhpY3NDb250ZXh0KiBjbwogICAgIHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4dCwg
cnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MCw3
ICszNzAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29uCiAgICAg
ICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBw
b2ludCwgZnJvbSwgdG8pOwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb2Rl
UGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSAhPSBDb21wbGV4KSB7CkBAIC00MDMsNyArNDAzLDcgQEAgZmxvYXQgRm9udDo6d2lkdGgoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWZsb2F0IEZvbnQ6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBy
dW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKFNWR19GT05UUykKICAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCkBAIC00
MTUsNyArNDE1LDcgQEAgZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbgog
ICAgIHJldHVybiB3aWR0aChydW4pOwogfQogCi1HbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50
KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNo
YXIzMiBjLCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CiB7CiAg
ICAgaWYgKHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKICAgICAgICAgaWYgKG1fZm9udERlc2Ny
aXB0aW9uLnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgewpA
QCAtNDM2LDE2ICs0MzYsMTYgQEAgR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxUZXh0TGF5b3V0PiBG
b250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBjb25zdAorUGFzc093
blB0cjxUZXh0TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBm
bG9hdCwgYm9vbCkgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBGb250
OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit2b2lkIEZvbnRDYXNjYWRlOjpkZWxldGVMYXlv
dXQoVGV4dExheW91dCopCiB7CiB9CiAKLWZsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1
bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCitmbG9h
dCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciog
Zm9udEZhbWlsaWVzV2l0aEludmFsCiAvLyBmcm9tIHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBv
bmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBmb250cywKIC8vIGJ1
dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdl
IGRvIHRoaXMgY2hlY2sgZm9yCiAvLyBhbGwgcGxhdGZvcm1zLgotYm9vbCBGb250OjpoYXNWYWxp
ZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6aGFzVmFsaWRBdmVy
YWdlQ2hhcldpZHRoKCkgY29uc3QKIHsKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gZmlyc3RG
YW1pbHkoKTsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTUyMCw3ICs1MjAsNyBAQCBi
b29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvCiAgICAgcmV0dXJuICFmb250
RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKIH0KIAot
Ym9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkg
Y29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUo
ZmxvYXQmIHdpZHRoKSBjb25zdAogewogICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQpAQCAtNTI4LDcgKzUyOCw3IEBAIGJvb2wg
Rm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWIKICAgICByZXR1cm4gc3VjY2VzczsK
IH0KIAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0CiB7CiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7CiAKQEAgLTU0
Myw3ICs1NDMsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvCiAg
ICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVjdGlv
blJlY3QsIGZyb20sIHRvKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
K2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgcnVuLCBm
bG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0
aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAog
ICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXggJiYgKCF0eXBlc2V0dGluZ0ZlYXR1cmVz
KCkgfHwgaXNEcmF3bldpdGhTVkdGb250KHJ1bikpKQpAQCAtNTU5LDU1ICs1NTksNTUgQEAgc3Rh
dGljIGlubGluZSBTdHJpbmcgbm9ybWFsaXplU3BhY2VzSW50ZQogICAgIG5vcm1hbGl6ZWQucmVz
ZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNl
cyhjaGFyYWN0ZXJzW2ldKSk7CisgICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnRDYXNjYWRl
Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOwogCiAgICAgcmV0dXJuIG5vcm1hbGl6
ZWQudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIEZvbnRDYXNjYWRlOjpu
b3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3Ro
KTsKIH0KIAotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFj
ZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICByZXR1
cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogc3Rh
dGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7CiAKLXZvaWQgRm9udDo6c2V0
U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQordm9pZCBGb250Q2Fz
Y2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9
IHNob3VsZFVzZVNtb290aGluZzsKIH0KIAotYm9vbCBGb250OjpzaG91bGRVc2VTbW9vdGhpbmco
KQorYm9vbCBGb250Q2FzY2FkZTo6c2hvdWxkVXNlU21vb3RoaW5nKCkKIHsKICAgICByZXR1cm4g
c2hvdWxkVXNlRm9udFNtb290aGluZzsKIH0KIAotdm9pZCBGb250OjpzZXRDb2RlUGF0aChDb2Rl
UGF0aCBwKQordm9pZCBGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKIHsKICAg
ICBzX2NvZGVQYXRoID0gcDsKIH0KIAotRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoKQor
Rm9udENhc2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjb2RlUGF0aCgpCiB7CiAgICAgcmV0
dXJuIHNfY29kZVBhdGg7CiB9CiAKLXZvaWQgRm9udDo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVh
dHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKQordm9pZCBGb250
Q2FzY2FkZTo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJl
cyB0eXBlc2V0dGluZ0ZlYXR1cmVzKQogewogICAgIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzOwogfQogCi1UeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6
OmRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCkKK1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udENh
c2NhZGU6OmRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCkKIHsKICAgICByZXR1cm4gc19kZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBh
dGgoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdAorRm9udENhc2NhZGU6OkNvZGVQYXRoIEZvbnRD
YXNjYWRlOjpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0CiB7CiAgICAgaWYgKHNf
Y29kZVBhdGggIT0gQXV0bykKICAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7CkBAIC02MzMsNyAr
NjMzLDcgQEAgRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAogICAgIHJl
dHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0
aCgpKTsKIH0KIAotRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQorRm9udENhc2NhZGU6OkNvZGVQ
YXRoIEZvbnRDYXNjYWRlOjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW4pCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCB1c2UgYSBVbmlj
b2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRoYXQgd2UgCiAgICAgLy8g
Y2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5L2NsYXNzIGJlY2F1c2Ug
c29tZSBjaGFyYWN0ZXJzCkBAIC03MzQsOCArNzM0LDggQEAgRm9udDo6Q29kZVBhdGggRm9udDo6
Y2hhcmFjdGVyUmFuZ2VDb2RlUAogICAgICAgICBpZiAoYyA8PSAweEE2RjEpCiAgICAgICAgICAg
ICByZXR1cm4gQ29tcGxleDsKIAotICAgICAgIC8vIFUrQTgwMCB0aHJvdWdoIFUrQUJGRiBOYWdy
aSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5kZWQsCi0gICAgICAgLy8g
SGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRlbmRlZCBBLCBUYWkgVmll
dCwgTWVldGVpIE1heWVrLAorICAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmks
IFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgICAvLyBI
YW5ndWwgSmFtbyBFeHQuIEEsIEphdmFuZXNlLCBNeWFubWFyIEV4dGVuZGVkIEEsIFRhaSBWaWV0
LCBNZWV0ZWkgTWF5ZWssCiAgICAgICAgIGlmIChjIDwgMHhBODAwKSAKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBpZiAoYyA8PSAweEFCRkYpCkBAIC03ODcsNyArNzg3LDcgQEAgRm9u
dDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQorYm9vbCBGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQogewogICAgIC8vIFRoZSBiYXNpYyBDSksg
VW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgogICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9IDB4
OUZGRikKQEAgLTgxMiwxMSArODEyLDExIEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNo
YXIzMiBjKQogICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCiAgICAgaWYgKGMg
Pj0gMHhGOTAwICYmIGMgPD0gMHhGQUZGKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwog
ICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIuCiAgICAgaWYgKGMgPj0g
MHgyMDAwMCAmJiBjIDw9IDB4MkE2REYpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAK
KwogICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCiAgICAgaWYgKGMg
Pj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODMy
LDcgKzgzMiw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFy
MzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBj
KQogewogICAgIC8vIDB4MkM3IENhcm9uLCBNYW5kYXJpbiBDaGluZXNlIDNyZCBUb25lCiAgICAg
Ly8gMHgyQ0EgTW9kaWZpZXIgTGV0dGVyIEFjdXRlIEFjY2VudCwgTWFuZGFyaW4gQ2hpbmVzZSAy
bmQgVG9uZQpAQCAtOTE0LDcgKzkxNCw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMKICAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgog
ICAgIGlmIChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCisKICAgICAvLyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24sIGV4Y2x1ZGluZyAw
eDMwMzAuCiAgICAgaWYgKGMgPj0gMHgzMDAwICYmIGMgPCAweDMwMzApCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtOTQwLDcgKzk0MCw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMKICAgICAvLyBCb3BvbW9mbyBFeHRlbmRlZAogICAgIGlmIChjID49IDB4MzFB
MCAmJiBjIDw9IDB4MzFCRikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gCisKICAgICAvLyBFbmNs
b3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzLgogICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9
IDB4MzJGRikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05ODksNyArOTg5LDcgQEAgYm9vbCBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMwogICAgIHJldHVybiBpc0NKS0lkZW9n
cmFwaChjKTsKIH0KIAotdW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3Vuc2lnbmVkIEZvbnRDYXNj
YWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0Fm
dGVyRXhwYW5zaW9uKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBpZiAoZGlyZWN0
aW9uID09IExUUikgewpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudAogICAgIHJldHVybiBjb3VudDsKIH0KIAotdW5zaWduZWQgRm9u
dDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRl
ckV4cGFuc2lvbikKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQogewogICAgIHN0YXRp
YyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhz
SW5Db21wbGV4VGV4dCgpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTEwNjIsMTQgKzEw
NjIsMTQgQEAgdW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudAogICAgIHJl
dHVybiBjb3VudDsKIH0KIAotdW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlOjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQogewogICAgIGlmIChzdHJpbmdW
aWV3LmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGly
ZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVu
Z3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiB9CiAKLWJvb2wgRm9udDo6Y2Fu
UmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjpjYW5SZWNl
aXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYykKIHsKICAgICBpZiAoVV9HRVRfR0NfTUFTSyhjKSAm
IChVX0dDX1pfTUFTSyB8IFVfR0NfQ05fTUFTSyB8IFVfR0NfQ0NfTUFTSyB8IFVfR0NfQ0ZfTUFT
SykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwODIsNyArMTA4Miw3IEBAIGJvb2wgRm9u
dDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBGb250Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Citib29sIEZvbnRDYXNjYWRl
Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ2x5cGhzICYm
IG1fZ2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCShyZXZpc2lvbiAxNzg0MTgp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoxNzg0MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRfaAorI2Rl
ZmluZSBGb250X2gKKworI2luY2x1ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1ZGUgIkZvbnREZXNj
cmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisj
aW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0
ZXJOYW1lcy5oPgorCisvLyAiWDExL1guaCIgZGVmaW5lcyBDb21wbGV4IHRvIDAgYW5kIGNvbmZs
aWN0cworLy8gd2l0aCBDb21wbGV4IHZhbHVlIGluIENvZGVQYXRoIGVudW0uCisjaWZkZWYgQ29t
cGxleAorI3VuZGVmIENvbXBsZXgKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGb250RGF0YTsKK2NsYXNz
IEZvbnRNZXRyaWNzOworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIEZvbnRTZWxlY3Rv
cjsKK2NsYXNzIEdseXBoQnVmZmVyOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgTGF5
b3V0UmVjdDsKK2NsYXNzIFJlbmRlclRleHQ7CitjbGFzcyBUZXh0TGF5b3V0OworY2xhc3MgVGV4
dFJ1bjsKKworc3RydWN0IEdseXBoRGF0YTsKKworc3RydWN0IEdseXBoT3ZlcmZsb3cgeworICAg
IEdseXBoT3ZlcmZsb3coKQorICAgICAgICA6IGxlZnQoMCkKKyAgICAgICAgLCByaWdodCgwKQor
ICAgICAgICAsIHRvcCgwKQorICAgICAgICAsIGJvdHRvbSgwKQorICAgICAgICAsIGNvbXB1dGVC
b3VuZHMoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBib29sIGlzRW1wdHkoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFsZWZ0ICYmICFyaWdodCAmJiAhdG9wICYmICFib3R0b207
CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgZXh0ZW5kVG8oY29uc3QgR2x5cGhPdmVyZmxvdyYg
b3RoZXIpCisgICAgeworICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgb3RoZXIubGVmdCk7
CisgICAgICAgIHJpZ2h0ID0gc3RkOjptYXgocmlnaHQsIG90aGVyLnJpZ2h0KTsKKyAgICAgICAg
dG9wID0gc3RkOjptYXgodG9wLCBvdGhlci50b3ApOworICAgICAgICBib3R0b20gPSBzdGQ6Om1h
eChib3R0b20sIG90aGVyLmJvdHRvbSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxlZnQgIT0g
b3RoZXIubGVmdCB8fCByaWdodCAhPSBvdGhlci5yaWdodCB8fCB0b3AgIT0gb3RoZXIudG9wIHx8
IGJvdHRvbSAhPSBvdGhlci5ib3R0b207CisgICAgfQorCisgICAgaW50IGxlZnQ7CisgICAgaW50
IHJpZ2h0OworICAgIGludCB0b3A7CisgICAgaW50IGJvdHRvbTsKKyAgICBib29sIGNvbXB1dGVC
b3VuZHM7Cit9OworCitjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3IgeworcHVibGljOgorICAg
IGVudW0gY2xhc3MgR2x5cGhVbmRlcmxpbmVUeXBlIHtTa2lwRGVzY2VuZGVycywgU2tpcEdseXBo
LCBEcmF3T3ZlckdseXBofTsKKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNNb3JlUGF0aHMoKSA9
IDA7CisgICAgdmlydHVhbCBQYXRoIHBhdGgoKSA9IDA7CisgICAgdmlydHVhbCBzdGQ6OnBhaXI8
ZmxvYXQsIGZsb2F0PiBleHRlbnRzKCkgPSAwOworICAgIHZpcnR1YWwgR2x5cGhVbmRlcmxpbmVU
eXBlIHVuZGVybGluZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UoKSA9IDA7
CisgICAgdmlydHVhbCB+R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCkgeyB9Cit9OworR2x5cGhUb1Bh
dGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGluZGV4KTsKKworY2xhc3MgRm9u
dCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxv
YXQgd29yZFNwYWNpbmcpOworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGlm
IHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZlIGZvbnQuCisgICAgV0VC
Q09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc1ByaW50aW5n
LCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOworCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQ
dHI8Rm9udFNlbGVjdG9yPik7CisjZW5kaWYKKyAgICB+Rm9udCgpOworCisgICAgRm9udChjb25z
dCBGb250Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQm
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhl
cikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbjsgfQor
CisgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNv
bXB1dGVkUGl4ZWxTaXplKCk7IH0KKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gZm9u
dERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KKworICAgIHZvaWQgdXBkYXRlKFBhc3NS
ZWZQdHI8Rm9udFNlbGVjdG9yPikgY29uc3Q7CisKKyAgICBlbnVtIEN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJZkZvbnROb3RS
ZWFkeSB9OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJl
YWR5KSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7
CisKKyAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxp
bmVFeHRlbnRzKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IHdpZHRoKGNvbnN0
IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMg
PSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRl
eHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdDsKKwor
ICAgIFBhc3NPd25QdHI8VGV4dExheW91dD4gY3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9h
dCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7CisgICAgc3RhdGljIHZvaWQg
ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKTsKKyAgICBzdGF0aWMgZmxvYXQgd2lkdGgoVGV4dExh
eW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CisKKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRp
b24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSA9IDAsIGludCB0byA9
IC0xKSBjb25zdDsKKworICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQorCisgICAgZmxvYXQgd29yZFNwYWNpbmcoKSBj
b25zdCB7IHJldHVybiBtX3dvcmRTcGFjaW5nOyB9CisgICAgZmxvYXQgbGV0dGVyU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQorICAgIHZvaWQgc2V0V29yZFNwYWNp
bmcoZmxvYXQgcykgeyBtX3dvcmRTcGFjaW5nID0gczsgfQorICAgIHZvaWQgc2V0TGV0dGVyU3Bh
Y2luZyhmbG9hdCBzKSB7IG1fbGV0dGVyU3BhY2luZyA9IHM7IH0KKyAgICBib29sIGlzRml4ZWRQ
aXRjaCgpIGNvbnN0OworICAgIGJvb2wgaXNQcmludGVyRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLnVzZVByaW50ZXJGb250KCk7IH0KKyAgICAKKyAgICBGb250UmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24u
cmVuZGVyaW5nTW9kZSgpOyB9CisKKyAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5n
RmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlc2V0dGluZ0ZlYXR1cmVz
PihtX3R5cGVzZXR0aW5nRmVhdHVyZXMpOyB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZp
cnN0RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KTsgfQorICAgIHVuc2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24uZmFtaWx5Q291bnQoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmFtaWx5QXQo
aSk7IH0KKworICAgIEZvbnRJdGFsaWMgaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24uaXRhbGljKCk7IH0KKyAgICBGb250V2VpZ2h0IHdlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERlc2NyaXB0aW9uLndlaWdodCgpOyB9CisgICAgRm9udFdpZHRoVmFyaWFudCB3
aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlh
bnQoKTsgfQorCisgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9CisKKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEoKS5mb250TWV0cmljcygp
OyB9CisgICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0
YSgpLnNwYWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQorICAgIGZsb2F0IHRhYldpZHRo
KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24p
IGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0
aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udERhdGEoKSwgdGFiU2l6ZSwg
cG9zaXRpb24pOyB9CisgICAgYm9vbCBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdDsK
KyAgICBib29sIGZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQgJndpZHRoKSBj
b25zdDsgLy8gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MKKworICAgIGludCBlbXBoYXNpc01hcmtB
c2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgaW50IGVtcGhhc2lzTWFya0Rl
c2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgaW50IGVtcGhhc2lzTWFya0hl
aWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKKyAgICBjb25zdCBGb250UmFuZ2VzJiBmYWxs
YmFja1Jhbmdlc0F0KHVuc2lnbmVkKSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgPSBBdXRvVmFy
aWFudCkgY29uc3Q7CisgICAgCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNo
YXIqLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQpIGNvbnN0OworI2VuZGlmCisKKyAg
ICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIpOworCisgICAgLy8gQkVXQVJFOiBJZiBpc0Fm
dGVyRXhwYW5zaW9uIGlzIHRydWUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxsLCB0aGVuIHRoZSBy
ZXR1cm5lZCB2YWx1ZSBpbmNsdWRlcyBhIHRyYWlsaW5nIG9wcG9ydHVuaXR5CisgICAgLy8gd2hp
Y2ggbWF5IG9yIG1heSBub3QgYWN0dWFsbHkgYmUgcHJlc2VudC4gUmVuZGVyQmxvY2tGbG93Ojpj
b21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudCgpIGNvbXBlbnNhdGVzCisg
ICAgLy8gZm9yIHRoaXMgYnkgZGVjcmVtZW50aW5nIHRoZSByZXR1cm5lZCB2YWx1ZSBpZiBpc0Fm
dGVyRXhwYW5zaW9uIGlzIHRydWUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuCisgICAgc3RhdGljIHVu
c2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYsIFRleHRE
aXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOworCisgICAgZW51bSBDb2RlUGF0
aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgfTsKKyAg
ICBDb2RlUGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CisgICAgc3RhdGljIENv
ZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gU2ltcGxlOyB9CisgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOworCisgICAgYm9vbCBwcmltYXJ5Rm9udERh
dGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIEZvclRleHRFbXBo
YXNpc09yTm90IHsgTm90Rm9yVGV4dEVtcGhhc2lzLCBGb3JUZXh0RW1waGFzaXMgfTsKKworICAg
IC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwg
aW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVt
cGhhc2lzKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQg
cG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OworICAgIHZvaWQgYWRq
dXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworCisgICAgYm9vbCBnZXRF
bXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiwgR2x5cGhEYXRhJikgY29u
c3Q7CisKKyAgICBzdGF0aWMgYm9vbCBjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRl
eHQoKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4
VGV4dCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4K
KyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90
ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAg
IGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyog
PSAwKSBjb25zdDsKKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJu
YWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0Fm
dGVyRXhwYW5zaW9uKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwg
Ym9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisKKyAgICBmcmllbmQgc3RydWN0IFdpZHRoSXRlcmF0
b3I7CisgICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OworCitwdWJs
aWM6CisjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCBlcXVhbEZvclRl
eHRBdXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZm9udERlc2NyaXB0aW9uLmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIubV9mb250
RGVzY3JpcHRpb24pCisgICAgICAgICAgICAmJiBtX2xldHRlclNwYWNpbmcgPT0gb3RoZXIubV9s
ZXR0ZXJTcGFjaW5nCisgICAgICAgICAgICAmJiBtX3dvcmRTcGFjaW5nID09IG90aGVyLm1fd29y
ZFNwYWNpbmc7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBVc2VmdWwgZm9yIGRlYnVnZ2luZyB0
aGUgZGlmZmVyZW50IGZvbnQgcmVuZGVyaW5nIGNvZGUgcGF0aHMuCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0Q29kZVBhdGgoQ29kZVBhdGgpOworICAgIHN0YXRpYyBDb2RlUGF0
aCBjb2RlUGF0aCgpOworICAgIHN0YXRpYyBDb2RlUGF0aCBzX2NvZGVQYXRoOworCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlw
ZXNldHRpbmdGZWF0dXJlcyk7CisgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMgZGVmYXVs
dFR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKKworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHNfcm91
bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XTsKKyAgICBzdGF0aWMgYm9vbCBpc1JvdW5kaW5n
SGFja0NoYXJhY3RlcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgICByZXR1cm4gIShjICYgfjB4
RkYpICYmIHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbY107CisgICAgfQorCisgICAgRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCB0cmVhdEFz
U3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xu
JyB8fCBjID09IG5vQnJlYWtTcGFjZTsgfQorICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lk
dGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhT
Y3JpcHQoYykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIwMGQ7IH0KKyAgICBzdGF0aWMgYm9v
bCB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoVUNoYXIgYykgeyByZXR1cm4g
YyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9PSBzb2Z0SHlwaGVuIHx8
IGMgPT0gemVyb1dpZHRoU3BhY2UgfHwgKGMgPj0gMHgyMDBlICYmIGMgPD0gMHgyMDBmKSB8fCAo
YyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0gemVyb1dpZHRoTm9CcmVha1NwYWNl
IHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBj
YW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CisKKyAgICBzdGF0aWMgaW5saW5lIFVD
aGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBpZiAo
dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICByZXR1cm4gc3BhY2U7CisKKyAg
ICAgICAgaWYgKHRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHplcm9XaWR0aFNwYWNlOworCisgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7CisgICAg
fQorCisgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TeW1i
b2woKSBjb25zdCB7IHJldHVybiBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOyB9CisgICAgRm9u
dEdseXBocyogZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMuZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICBib29sIGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3Q7CisKKyAgICBUeXBl
c2V0dGluZ0ZlYXR1cmVzIGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlID0gbV9mb250RGVz
Y3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKTsKKyAgICAgICAgVHlwZXNldHRpbmdGZWF0dXJl
cyBmZWF0dXJlcyA9IHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CisKKyAgICAgICAgc3dp
dGNoICh0ZXh0UmVuZGVyaW5nTW9kZSkgeworICAgICAgICBjYXNlIEF1dG9UZXh0UmVuZGVyaW5n
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT3B0aW1pemVTcGVlZDoKKyAgICAg
ICAgICAgIGZlYXR1cmVzICY9IH4oS2VybmluZyB8IExpZ2F0dXJlcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHZW9tZXRyaWNQcmVjaXNpb246CisgICAgICAgIGNhc2UgT3B0
aW1pemVMZWdpYmlsaXR5OgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZyB8IExpZ2F0
dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICht
X2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCkpIHsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok5vbmVLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgJj0gfktlcm5pbmc7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1hbEtlcm5p
bmc6CisgICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5j
b21tb25MaWdhdHVyZXNTdGF0ZSgpKSB7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpE
aXNhYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgZmVhdHVyZXMgJj0gfkxpZ2F0dXJl
czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RW5h
YmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gTGlnYXR1cmVzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZlYXR1cmVzOworICAgIH0KKworICAgIHN0YXRpYyBUeXBlc2V0dGluZ0ZlYXR1cmVz
IHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CisKKyAgICBGb250RGVzY3JpcHRpb24gbV9m
b250RGVzY3JpcHRpb247CisgICAgbXV0YWJsZSBSZWZQdHI8Rm9udEdseXBocz4gbV9nbHlwaHM7
CisgICAgZmxvYXQgbV9sZXR0ZXJTcGFjaW5nOworICAgIGZsb2F0IG1fd29yZFNwYWNpbmc7Cisg
ICAgbXV0YWJsZSBib29sIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7CisgICAgbXV0YWJsZSB1
bnNpZ25lZCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNldHRpbmdGZWF0dXJl
cykgQ2FjaGVzIHZhbHVlcyBjb21wdXRlZCBmcm9tIG1fZm9udERlc2NyaXB0aW9uLgorfTsKKwor
dm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIHBydW5lVW5yZWZlcmVuY2Vk
RW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKK3ZvaWQgY2xlYXJXaWR0aENhY2hlcygpOwor
CitpbmxpbmUgRm9udDo6fkZvbnQoKQoreworfQorCitpbmxpbmUgY29uc3QgU2ltcGxlRm9udERh
dGEmIEZvbnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZ2x5cGhz
KTsKKyAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YShtX2ZvbnREZXNj
cmlwdGlvbik7Cit9CisKK2lubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250OjpmYWxsYmFja1Jh
bmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChtX2dseXBocyk7Cisg
ICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlw
dGlvbiwgaW5kZXgpOworfQorCitpbmxpbmUgYm9vbCBGb250Ojppc0ZpeGVkUGl0Y2goKSBjb25z
dAoreworICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5pc0ZpeGVk
UGl0Y2gobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250
Ojpmb250U2VsZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2dseXBocyA/IG1fZ2x5cGhz
LT5mb250U2VsZWN0b3IoKSA6IDA7Cit9CisKK2lubGluZSBmbG9hdCBGb250Ojp0YWJXaWR0aChj
b25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdAoreworICAgIGlmICghdGFiU2l6ZSkKKyAgICAgICAgcmV0dXJuIGxldHRl
clNwYWNpbmcoKTsKKyAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUgKiBmb250RGF0YS5zcGFj
ZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRh
YldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsKKyAgICByZXR1cm4gKHRhYkRlbHRh
V2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFX
aWR0aDsKK30KKworfQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gdm9pZCBkZWxl
dGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0Kik7CisK
K30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICAqCiAgKi8KIAotI2lmbmRlZiBGb250X2gKLSNkZWZpbmUgRm9udF9oCisjaWZuZGVmIEZvbnRD
YXNjYWRlX2gKKyNkZWZpbmUgRm9udENhc2NhZGVfaAogCiAjaW5jbHVkZSAiRGFzaEFycmF5Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0xMDYsMjQgKzEwNiwyNCBAQCBwdWJs
aWM6CiB9OwogR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0
ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGlu
ZGV4KTsKIAotY2xhc3MgRm9udCB7CitjbGFzcyBGb250Q2FzY2FkZSB7CiBwdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRm9udCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxv
YXQgd29yZFNwYWNpbmcpOwogICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGlm
IHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZlIGZvbnQuCi0gICAgV0VC
Q09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc1ByaW50aW5n
LCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZv
bnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFU
Rk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KTsKKyAgICBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
UGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKICNlbmRpZgotICAgIH5Gb250KCk7CisgICAgfkZv
bnRDYXNjYWRlKCk7CiAKLSAgICBGb250KGNvbnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9udCYpOworICAgIEZvbnRDYXNjYWRlKGNvbnN0IEZv
bnRDYXNjYWRlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUmIG9wZXJhdG9yPShj
b25zdCBGb250Q2FzY2FkZSYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3Q7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb247IH0KIApA
QCAtMjQzLDcgKzI0Myw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICNpZiBFTkFCTEUoSU9TX1RF
WFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9u
dCYgb3RoZXIpIGNvbnN0CisgICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ZvbnREZXNj
cmlwdGlvbi5lcXVhbEZvclRleHRBdXRvU2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQog
ICAgICAgICAgICAgJiYgbV9sZXR0ZXJTcGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZwpA
QCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0cmVhdEFzU3BhY2Uo
VUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBj
ID09IG5vQnJlYWtTcGFjZTsgfQogICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFj
ZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQo
YykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIwMGQ7IH0KICAgICBzdGF0aWMgYm9vbCB0cmVh
dEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoVUNoYXIgYykgeyByZXR1cm4gYyA8IDB4
MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9PSBzb2Z0SHlwaGVuIHx8IGMgPT0g
emVyb1dpZHRoU3BhY2UgfHwgKGMgPj0gMHgyMDBlICYmIGMgPD0gMHgyMDBmKSB8fCAoYyA+PSAw
eDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0gemVyb1dpZHRoTm9CcmVha1NwYWNlIHx8IGMg
PT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7IH0KLSAgICBzdGF0aWMgYm9vbCBjYW5SZWNl
aXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgbm9ybWFsaXpl
U3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKICAgICB7CkBAIC0zNDcsMzQgKzM0NywzNCBAQCB2b2lk
IGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRy
aWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwogdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKLWlu
bGluZSBGb250Ojp+Rm9udCgpCitpbmxpbmUgRm9udENhc2NhZGU6On5Gb250Q2FzY2FkZSgpCiB7
CiB9CiAKLWlubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRh
KCkgY29uc3QKK2lubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udENhc2NhZGU6OnByaW1h
cnlGb250RGF0YSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKICAgICByZXR1cm4g
bV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAK
LWlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250OjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVk
IGluZGV4KSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlOjpmYWxs
YmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBo
cyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnRE
ZXNjcmlwdGlvbiwgaW5kZXgpOwogfQogCi1pbmxpbmUgYm9vbCBGb250Ojppc0ZpeGVkUGl0Y2go
KSBjb25zdAoraW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKICAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4ZWRQaXRj
aChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBGb250U2VsZWN0b3IqIEZvbnQ6OmZv
bnRTZWxlY3RvcigpIGNvbnN0CitpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250Q2FzY2FkZTo6Zm9u
dFNlbGVjdG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9u
dFNlbGVjdG9yKCkgOiAwOwogfQogCi1pbmxpbmUgZmxvYXQgRm9udDo6dGFiV2lkdGgoY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3QKK2lubGluZSBmbG9hdCBGb250Q2FzY2FkZTo6dGFiV2lkdGgoY29uc3QgU2ltcGxl
Rm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29u
c3QKIHsKICAgICBpZiAoIXRhYlNpemUpCiAgICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250
R2x5cGhzLmgiCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gbWF5IG5vdCB3b3JrIGlmIHRoZSBlbXBoYXNpcyBtYXJrIHVzZXMg
YSBjb21wbGV4IHNjcmlwdCwgYnV0IG5vbmUgb2YgdGhlCiAvLyBzdGFuZGFyZCBlbXBoYXNpcyBt
YXJrcyBkbyBzby4KLWJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0Citib29sIEZvbnRD
YXNjYWRlOjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBHbHlwaERhdGEmIGdseXBoRGF0YSkgY29uc3QKIHsKICAgICBpZiAobWFyay5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY2LDcgKzY2LDcgQEAgYm9vbCBGb250OjpnZXRF
bXBoYXNpc01hcmtHbHlwaERhdGEoY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgRm9u
dDo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKK2lu
dCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aykgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0YTsKICAgICBpZiAoIWdldEVt
cGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKQEAgLTgwLDcgKzgwLDcg
QEAgaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taQogICAgIHJldHVybiBt
YXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiB9CiAKLWludCBGb250OjplbXBo
YXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKK2ludCBGb250
Q2FzY2FkZTo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNv
bnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CiAgICAgaWYgKCFnZXRFbXBoYXNp
c01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCkBAIC05NCw3ICs5NCw3IEBAIGlu
dCBGb250OjplbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b20KICAgICByZXR1cm4gbWFya0Zv
bnREYXRhLT5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lz
TWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2Nh
ZGU6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7
CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtH
bHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCkBAIC0xMDgsNyArMTA4LDcgQEAgaW50IEZv
bnQ6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taQogICAgIHJldHVybiBtYXJrRm9udERh
dGEtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQg
dG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4
dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lz
KSBjb25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC0xMzgsNyArMTM4LDcg
QEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbAogICAgIHJldHVybiBp
bml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdTaW1w
bGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBU
aGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0YSBmb3Ig
ZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTE1NCw3ICsxNTQs
NyBAQCBmbG9hdCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRlCiAgICAgcmV0dXJu
IHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01h
cmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01h
cmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxl
VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4CiAg
ICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxv
YXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAKLXZv
aWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogI2lmICFFTkFCTEUoU1ZH
X0ZPTlRTKQogICAgIFVOVVNFRF9QQVJBTShydW4pOwpAQCAtMjMxLDcgKzIzMSw3IEBAIGlubGlu
ZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXAKICAgICByZXR1cm4gb2Zmc2V0VG9N
aWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaSksIGdseXBoQnVmZmVyLmdseXBo
QXQoaSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlmICghZ2V0RW1w
aGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtMjYwLDcgKzI2MCw3
IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb24KICAgICBkcmF3R2x5
cGhCdWZmZXIoY29udGV4dCwgcnVuLCBtYXJrQnVmZmVyLCBzdGFydFBvaW50KTsKIH0KIAotZmxv
YXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNp
bXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7
CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3Zl
cmZsb3cpOwogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMjc2LDcgKzI3Niw3IEBA
IGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnMKICAgICByZXR1cm4gaXQu
bV9ydW5XaWR0aFNvRmFyOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0
aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlw
aEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVAogICAgIHNlbGVj
dGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAotaW50IEZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZs
b2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgZmxvYXQgZGVsdGEg
PSB4OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAKLSNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjY0
LDcgKzI2NCw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW0KICAg
ICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCiAgICAgICAgIHJldHVybiBHbHlwaERhdGEo
KTsKIAotICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5oYXNWZXJ0
aWNhbEdseXBocygpICYmIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgaWYg
KHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkg
JiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgIHZhcmlh
bnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwogCiAgICAgR2x5cGhEYXRhIGZhbGxiYWNrR2x5
cGhEYXRhOwpAQCAtMjc0LDcgKzI3NCw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERh
dGFGb3JTeXN0ZW0KICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0Zv
bnREYXRhLT52YXJpYW50Rm9udERhdGEoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CiAKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZh
bGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICghRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9u
dERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgaWYgKCFGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJh
Y2tHbHlwaERhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKICAgICAg
ICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0
aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigp
LCBmYWxsYmFja0dseXBoRGF0YSk7CiAgICAgfQogCkBAIC0zMjIsNyArMzIyLDcgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBHbHlwaERhdGEgZGF0
YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAgaWYgKGRhdGEuZm9u
dERhdGEpIHsKICAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRh
dGlvbkZhbGxiYWNrKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dy
YXBoT3JTeW1ib2woYykpCisgICAgICAgICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChjKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0
YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5v
bkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWRh
dGEuZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNp
b24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkKIC8vIHRoZSB3aWR0aCBvZiB0aGUgZHJhd24g
dGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5vdGljZWFibGUgZGlmZmVyZW5jZXMgaW4g
bGF5b3V0LgogI2lmICFQTEFURk9STShJT1MpCiAjaWYgIVVTRShXSU5HREkpCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MzksNyArNDM5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbgogfQogI2VuZGlm
CiAjZWxzZQotZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTQ0OCw3ICs0NDgsNyBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
ZXh0KGNvbnN0IEZvCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU2ltcGxlRm9udERhdGEm
IGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEYKICAgICBmb250LmRyYXdHbHlwaHModGhpcywgJmZv
bnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNp
c01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtNDY1LDEyICs0NjUsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01h
cmtzKAogfQogCiAvLyBGSVhNRTogQmV0dGVyIG1lcmdlIHRoZSBpT1MgYW5kIG5vbi1pT1MgZGlm
ZmVyZW5jZXMuIEluIHBhcnRpY3VsYXIsIG1ha2UgdGhpcyBtZXRob2QgdXNlIHRoZQotLy8gcmV0
dXJuZWQgd2lkdGggb2YgdGhlIGRyYXduIHRleHQsIEZvbnQ6OmRyYXdUZXh0KCksIGluc3RlYWQg
b2YgY29tcHV0aW5nIGl0LiBFbnN1cmUgdGhhdCB0aGVyZQorLy8gcmV0dXJuZWQgd2lkdGggb2Yg
dGhlIGRyYXduIHRleHQsIEZvbnRDYXNjYWRlOjpkcmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1
dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKIC8vIGFyZW4ndCBub3RpY2VhYmxlIGRpZmZlcmVu
Y2VzIGluIGxheW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCiAjaWYgIVBMQVRGT1JNKElPUykKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udDo6Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogI2Vsc2UKLWZsb2F0IEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50IGxl
bmd0aCkKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiwgQmlkaVN0YXR1cyogc3RhdHVzLCBpbnQgbGVuZ3RoKQogI2VuZGlmCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTUxNSw3ICs1MTUsNyBAQCBmbG9hdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdCaWRpVGV4dChjb25zCiAgICAgICAgIGZvbnQuZHJhd1RleHQodGhpcywgc3Vi
cnVuLCBjdXJyUG9pbnQsIDAsIC0xLCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwogCiAgICAg
ICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBIYXZlIEZv
bnQ6OmRyYXdUZXh0IHJldHVybiB0aGUgd2lkdGggb2Ygd2hhdCBpdCBkcmV3IHNvIHRoYXQgd2Ug
ZG9uJ3QgaGF2ZSB0byByZS1tZWFzdXJlIGhlcmUuCisgICAgICAgIC8vIEZJWE1FOiBIYXZlIEZv
bnRDYXNjYWRlOjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQgaXQgZHJldyBzbyB0
aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgogICAgICAgICBpZiAoYmlkaVJ1
bikKICAgICAgICAgICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQud2lkdGgoc3VicnVuKSwgMCk7CiAj
ZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkRhc2hBcnJheS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCkBAIC0zNTYsMTYgKzM1NiwxNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAg
ICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3VGV4
dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jiwg
aW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAjZWxzZQotICAgICAgICBmbG9hdCBkcmF3VGV4
dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJv
bSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpOwogI2VuZGlmCi0gICAgICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgZHJhd0VtcGhh
c2lzTWFya3MoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Cisg
ICAgICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFNpbXBsZUZv
bnREYXRhJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYgLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNpZiAhUExBVEZP
Uk0oSU9TKQotICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOworICAgICAgICB2b2lkIGRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpE
b05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogI2Vsc2UKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQg
ZmxvYXQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOworICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAtMSk7CiAjZW5kaWYKICAgICAgICAgZW51
bSBSb3VuZGluZ01vZGUgewogICAgICAgICAgICAgUm91bmRBbGxTaWRlcywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJ
KHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+IDEwODApCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKICNlbmRpZgotI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDE5LDcgKzQxOSw3
IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnMKICAgICAgICAgVUNo
YXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBp
ZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gRm9u
dDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNbMF0g
PSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBj
b2RlVW5pdHNMZW5ndGggPSAxOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29kZVVu
aXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAkocmV2aXNpb24gMTc4
NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE5Miw3
ICsxOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbGVmdFRydW5jYXRlVG9CdWZmZXIoY29uCiAgICAg
cmV0dXJuIGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsKIH0KIAotc3RhdGljIGZsb2F0IHN0
cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGluZ0hhY2tzKQorc3RhdGljIGZsb2F0
IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiByZW5kZXJlciwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcykKIHsK
ICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIGlmIChkaXNhYmxlUm91
bmRpbmdIYWNrcykKQEAgLTIwMCw3ICsyMDAsNyBAQCBzdGF0aWMgZmxvYXQgc3RyaW5nV2lkdGgo
Y29uc3QgRm9udCYgcmVuCiAgICAgcmV0dXJuIHJlbmRlcmVyLndpZHRoKHJ1bik7CiB9CiAKLXN0
YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1h
eFdpZHRoLCBjb25zdCBGb250JiBmb250LCBUcnVuY2F0aW9uRnVuY3Rpb24gdHJ1bmNhdGVUb0J1
ZmZlciwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcywgZmxvYXQqIHJlc3VsdFdpZHRoID0gbnVs
bHB0ciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsICBmbG9hdCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKQorc3Rh
dGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBUcnVuY2F0aW9uRnVuY3Rpb24gdHJ1bmNh
dGVUb0J1ZmZlciwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcywgZmxvYXQqIHJlc3VsdFdpZHRo
ID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsICBmbG9hdCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNl
KQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwpA
QCAtMjk1LDQyICsyOTUsNDIgQEAgc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBT
dHJpbgogICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLCB0cnVuY2F0ZWRMZW5ndGgpOwog
fQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcm
IHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgs
IGZvbnQsIGNlbnRlclRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0K
IAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0
cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmln
aHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcykKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9u
dCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcyk7CiB9CiAKLWZs
b2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IEZv
bnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQor
ZmxvYXQgU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aChjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGlu
Z0hhY2tzKQogewogICAgIHJldHVybiBzdHJpbmdXaWR0aChmb250LCBTdHJpbmdWaWV3KHN0cmlu
ZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgIWVuYWJsZVJvdW5k
aW5nSGFja3MpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShj
b25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVu
YWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0
V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25F
bGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShjb25z
dCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJl
c3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1h
eFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNr
cywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVs
ZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBF
bmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3Vs
dFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9u
RWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShjb25z
dCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJl
c3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1h
eFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tz
LCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6bGVmdFRydW5jYXRlKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5h
YmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRX
aWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVs
ZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBT
dHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBF
bmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3Vs
dFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9u
RWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1heFdp
ZHRoLCBmb250LCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZy
ZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb0NoYXJhY3Rl
cihjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQs
IEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVz
dWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRp
b25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb0NoYXJh
Y3Rlcihjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywg
ZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhz
dHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlciwgIWVuYWJs
ZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1c3Rv
bVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpy
aWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxvYXQg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKK1N0cmlu
ZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJpbmcmIHN0cmluZywg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hh
Y2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNo
b3VsZEluc2VydEVsbGlwc2lzLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwg
Ym9vbCBhbHdheXNUcnVuY2F0ZSkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5n
LCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9Xb3JkQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdI
YWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlv
bkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1bmNhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgJKHJldmlzaW9uIDE3
ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMyArMzMsMjMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIAotICAgIGNsYXNzIEZvbnQ7Ci0gICAgCi0gICAgY2xhc3MgU3RyaW5nVHJ1bmNh
dG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IHsgRGlzYWJsZVJvdW5kaW5nSGFja3MsIEVuYWJsZVJvdW5kaW5nSGFja3MgfTsKLQotICAgICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmlu
ZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRpbmdIYWNrcyk7
Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShj
b25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
ID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOwotICAgICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5n
JiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3Qs
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZs
b2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFN0cmluZyBsZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1
bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRy
dW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyByaWdodENsaXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0
aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDApOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3Ry
aW5nIHJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29s
IHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1l
bnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSk7CitjbGFzcyBGb250Q2Fz
Y2FkZTsKKworY2xhc3MgU3RyaW5nVHJ1bmNhdG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFibGVSb3VuZGlu
Z0hhY2tzIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNlbnRlclRydW5j
YXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVu
YWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0
cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0
aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRp
b25FbGVtZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJp
Z2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wg
c2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVu
dFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBsZWZ0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5h
YmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5z
ZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0g
MCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb0NoYXJhY3Rl
cihjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAw
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0Q2xpcFRvV29yZChjb25z
dCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3Vu
ZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxp
cHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29s
IGFsd2F5c1RydW5jYXRlID0gZmFsc2UpOwogCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgIH07CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGZsb2F0IHdpZHRoKGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworfTsK
ICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNz
IEZsb2F0UmVjdDsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEdseXBoQnVmZmVyOwogY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+UmVuZGVy
aW5nQ29udGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgdmlydHVh
bCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJh
dG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rl
ciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmlu
Z0NhY2hlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVz
aW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1l
ZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBmbG9hdCBm
bG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYs
IGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0ID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdp
ZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCA9IDA7CiAgICAgICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gY3JlYXRlR2x5
cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVGV4dFJ1bios
IGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiTGF0aW4xVGV4
dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTM0LDcgKzM0LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgYm9v
bCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQorV2lkdGhJdGVy
YXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1f
Zm9udChmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKDAp
CkBAIC01Nyw3ICs1Nyw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9u
dCoKICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7CiAg
ICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1faXNBZnRlckV4cGFuc2lvbjsKLSAgICAg
ICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNB
ZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCks
IG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgaWYg
KGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1fcnVuLmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkpCiAg
ICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LS07CiAKQEAgLTIyOSw5ICsyMjks
OSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAg
ICBpZiAod2lkdGggJiYgbV9mb250LT5sZXR0ZXJTcGFjaW5nKCkpCiAgICAgICAgICAgICAgICAg
d2lkdGggKz0gbV9mb250LT5sZXR0ZXJTcGFjaW5nKCk7CiAKLSAgICAgICAgICAgIHN0YXRpYyBi
b29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpOwotICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250
Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2Ug
fHwgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJv
bChjaGFyYWN0ZXIpKSkgeworICAgICAgICAgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRl
b2dyYXBocyA9IEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4
VGV4dCgpOworICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJl
YXRBc1NwYWNlKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IChl
eHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGNoYXJhY3RlcikpKSB7CiAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVu
J3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGll
cyBpbiB0aGUgcnVuLgogICAgICAgICAgICAgICAgIGlmIChtX2V4cGFuc2lvbikgewogICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhwYW5zaW9uOwpAQCAt
MjY4LDkgKzI2OCwxMCBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUlu
CiAgICAgICAgICAgICAgICAgbV9pc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpICYmIGdseXBoQnVmZmVy
ICYmIEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICBpZiAoc2hvdWxkQXBw
bHlGb250VHJhbnNmb3JtcygpICYmIGdseXBoQnVmZmVyICYmIEZvbnRDYXNjYWRlOjp0cmVhdEFz
U3BhY2UoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+c2l6ZSgpLAogICAgICAgICAgICAg
ICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZShjaGFyYWN0ZXIg
PT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhCdWZmZXItPmFkdmFuY2VBdChnbHlw
aEJ1ZmZlci0+c2l6ZSgpIC0gMSkud2lkdGgoKSA6IDAsIHdpZHRoKSkpOworICAgICAgICB9CiAK
ICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRzKSB7CiAgICAgICAgICAgICBib3Vu
ZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwpAQCAtMjc4LDcgKzI3OSw3IEBA
IGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAg
ICBtX2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgIUZvbnQ6OmNh
blJlY2VpdmVUZXh0RW1waGFzaXMoY2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICFGb250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaGFyYWN0ZXIp
KQogICAgICAgICAgICAgZ2x5cGggPSAwOwogCiAgICAgICAgIC8vIEFkdmFuY2UgcGFzdCB0aGUg
Y2hhcmFjdGVyIHdlIGp1c3QgZGVhbHQgd2l0aC4KQEAgLTI4OCw3ICsyODksNyBAQCBpbmxpbmUg
dW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAKICAgICAgICAgLy8gRm9yY2UgY2hh
cmFjdGVycyB0aGF0IGFyZSB1c2VkIHRvIGRldGVybWluZSB3b3JkIGJvdW5kYXJpZXMgZm9yIHRo
ZSByb3VuZGluZyBoYWNrCiAgICAgICAgIC8vIHRvIGJlIGludGVnZXIgd2lkdGgsIHNvIGZvbGxv
d2luZyB3b3JkcyB3aWxsIHN0YXJ0IG9uIGFuIGludGVnZXIgYm91bmRhcnkuCi0gICAgICAgIGlm
IChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFj
dGVyKGNoYXJhY3RlcikpIHsKKyAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkg
JiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHsKICAg
ICAgICAgICAgIHdpZHRoID0gY2VpbGYod2lkdGgpOwogCiAgICAgICAgICAgICAvLyBTaW5jZSB3
aWR0aFNpbmNlTGFzdFJvdW5kaW5nIGNhbiBsb3NlIHByZWNpc2lvbiBpZiB3ZSBpbmNsdWRlIG1l
YXN1cmVtZW50cyBmb3IKQEAgLTMwMSw3ICszMDIsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJ
dGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgInJvdW5kaW5nIGhhY2sgY2hhcmFj
dGVyIiwgaWYgc28sIGFkanVzdAogICAgICAgICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90
YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4KLSAgICAgICAgICAg
IGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSkgPCBtX3J1bi5sZW5ndGgoKSAmJiBGb250
Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcigqKHRleHRJdGVyYXRvci5jaGFyYWN0ZXJzKCkpKSkK
KyAgICAgICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSkgPCBtX3J1bi5sZW5n
dGgoKSAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpKSkpCiAgICAgICAgICAgICAgICAgfHwgKG1fcnVuLmFwcGx5UnVuUm91
bmRpbmcoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFy
YWN0ZXIoKSkgPj0gbV9ydW4ubGVuZ3RoKCkpKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgdG90
YWxXaWR0aCA9IHdpZHRoU2luY2VMYXN0Um91bmRpbmcgKyB3aWR0aDsKICAgICAgICAgICAgICAg
ICB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nID0gY2VpbGYodG90YWxXaWR0aCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCShyZXZp
c2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5kZWYgV2lkdGhJ
dGVyYXRvcl9oCiAjZGVmaW5lIFdpZHRoSXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHR2x5cGguaCIKICNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTMwLDcgKzMwLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7
CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogY2xhc3MgVGV4dFJ1
bjsKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IEdseXBoRGF0YTsKIHN0cnVjdCBXaWR0aEl0ZXJh
dG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXaWR0aEl0
ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMg
PSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAgV2lkdGhJdGVyYXRv
cihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5k
cyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIHVuc2lnbmVk
IGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wgYWR2YW5jZU9uZUNoYXJh
Y3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC01OCw3ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+JiBhcmFiaWNGb3JtcygpIHsgcmV0
dXJuIG1fYXJhYmljRm9ybXM7IH0KICNlbmRpZgogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNU
eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnQmIGZvbnQpCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIHsK
ICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogICAgICAgICBpZiAoIWZvbnQuaXNQcmludGVyRm9udCgp
KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBjb25zdCBG
b250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9udDsKIAogICAgIGNvbnN0
IFRleHRSdW4mIG1fcnVuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgi
CiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lSU9TLmgiCiAjaW1wb3J0IDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERh
dGFJT1MubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvcmVHcmFw
aGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1w
b3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0
ICJGb250U2VydmljZXNJT1MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJDb21wbGV4VGV4dENv
bnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCkBAIC00
MywxMyArNDMsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0TGF5b3V0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc05lZWRlZChSZW5kZXJUZXh0KiB0ZXh0LCBjb25z
dCBGb250JiBmb250KQorICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQqIHRleHQs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIHsKICAgICAgICAgVGV4dFJ1biBydW4gPSBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LCB0ZXh0LT5zdHls
ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZvbnQuY29kZVBhdGgocnVuKSA9PSBGb250OjpDb21wbGV4
OworICAgICAgICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnRDYXNjYWRlOjpDb21w
bGV4OwogICAgIH0KIAotICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9u
dCYgZm9udCwgZmxvYXQgeFBvcykKKyAgICBUZXh0TGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zKQogICAgICAgICA6IG1fZm9udChmb250
KQogICAgICAgICAsIG1fcnVuKGNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgeFBvcykpCiAg
ICAgICAgICwgbV9jb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGxleFRleHRDb250cm9s
bGVyPigmbV9mb250LCBtX3J1biwgdHJ1ZSkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShmcm9tLCAwLCBCeVdob2xlR2x5cGhz
LCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBtX2NvbnRyb2xs
ZXItPnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaWYgKG1fZm9udC53b3JkU3BhY2luZygpICYm
IGZyb20gJiYgRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkKKyAgICAgICAgaWYgKG1f
Zm9udC53b3JkU3BhY2luZygpICYmIGZyb20gJiYgRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSht
X3J1bltmcm9tXSkpCiAgICAgICAgICAgICBiZWZvcmVXaWR0aCArPSBtX2ZvbnQud29yZFNwYWNp
bmcoKTsKICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20gKyBsZW4sIDAsIEJ5V2hv
bGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBmbG9hdCBhZnRlcldpZHRoID0gbV9j
b250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB4UG9zKQorICAgIHN0YXRpYyBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgewogICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIHRleHQtPnN0eWxlKCkp
OwogICAgICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0LT50ZXh0TGVuZ3RoKCkpOwpA
QCAtNzgsMjUgKzc4LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBydW47CiAgICAgfQog
Ci0gICAgLy8gQ29tcGxleFRleHRDb250cm9sbGVyIGhhcyBvbmx5IHJlZmVyZW5jZXMgdG8gaXRz
IEZvbnQgYW5kIFRleHRSdW4gc28gdGhleSBtdXN0IGJlIGtlcHQgYWxpdmUgaGVyZS4KLSAgICBG
b250IG1fZm9udDsKKyAgICAvLyBDb21wbGV4VGV4dENvbnRyb2xsZXIgaGFzIG9ubHkgcmVmZXJl
bmNlcyB0byBpdHMgRm9udENhc2NhZGUgYW5kIFRleHRSdW4gc28gdGhleSBtdXN0IGJlIGtlcHQg
YWxpdmUgaGVyZS4KKyAgICBGb250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgVGV4dFJ1biBtX3J1bjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGxleFRleHRDb250cm9sbGVyPiBtX2NvbnRyb2xsZXI7
CiB9OwogCi1QYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnQ6OmNyZWF0ZUxheW91dChSZW5kZXJU
ZXh0KiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3QKK1Bh
c3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0
KiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3QKIHsKICAg
ICBpZiAoIWNvbGxhcHNlV2hpdGVTcGFjZSB8fCAhVGV4dExheW91dDo6aXNOZWVkZWQodGV4dCwg
KnRoaXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFRleHRMYXlvdXQodGV4dCwgKnRoaXMsIHhQb3MpKTsKIH0KIAotdm9pZCBGb250OjpkZWxldGVM
YXlvdXQoVGV4dExheW91dCogbGF5b3V0KQordm9pZCBGb250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0
KFRleHRMYXlvdXQqIGxheW91dCkKIHsKICAgICBkZWxldGUgbGF5b3V0OwogfQogCi1mbG9hdCBG
b250Ojp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQorZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMp
CiB7CiAgICAgcmV0dXJuIGxheW91dC53aWR0aChmcm9tLCBsZW4sIGZhbGxiYWNrRm9udHMpOwog
fQpAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbmxpbmUgQ0dGbG9hdCBjZWlsQ0dGbG9hdChD
R0Zsb2EKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY2VpbChmKSk7CiB9CiAKLUNv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnQqIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlv
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZv
clRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9s
bGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5
VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoKmZv
bnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2lzTFRST25seSh0cnVlKQpAQCAtMTQ0LDcg
KzE0NCw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm8KICAgICAg
ICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAgIGJv
b2wgaXNBZnRlckV4cGFuc2lvbiA9IG1fYWZ0ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVk
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNp
b24pOworICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENh
c2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIo
KSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhw
YW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAg
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwogCkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21wbGV4VGV4dFJ1bnNbciArIDFdLT5jaGFyYWN0
ZXJzKCkgKyBtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmluZGV4QXQoMCkpOwogCi0gICAgICAg
ICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnQ6OnRyZWF0QXNTcGFjZShjaCk7CisgICAgICAg
ICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOwog
ICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnREYXRhLnNwYWNl
R2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAgICAgIENHU2l6ZSBhZHZhbmNlID0gdHJlYXRB
c1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRoLCBhZHZhbmNlc1tpXS5oZWlnaHQpIDogYWR2
YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtNjI1LDcgKzYyNSw3IEBAIHZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKIAogICAgICAgICAgICAgaWYgKGNoID09
ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0
aCA9IG1fZm9udC50YWJXaWR0aChmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9z
KCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpICYmICF0cmVhdEFzU3BhY2Up
IHsKKyAgICAgICAgICAgIGVsc2UgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRo
ID0gMDsKICAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnREYXRhLnNwYWNlR2x5cGgoKTsKICAg
ICAgICAgICAgIH0KQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gbV9m
b250LmxldHRlclNwYWNpbmcoKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZp
Y2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFj
ZSB8fCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoKSkgeworICAgICAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UgfHwgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
Y2gpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFs
IGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhl
IHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9uKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhwYW5zaW9uOwpAQCAt
Njg1LDEyICs2ODUsMTMgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBo
cwogICAgICAgICAgICAgLy8gV2UgYWRqdXN0IHRoZSB3aWR0aCBvZiB0aGUgbGFzdCBjaGFyYWN0
ZXIgb2YgYSAid29yZCIgdG8gZW5zdXJlIGFuIGludGVnZXIgd2lkdGguIAogICAgICAgICAgICAg
Ly8gRm9yY2UgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIHRvIGRldGVybWluZSB3b3JkIGJvdW5k
YXJpZXMgZm9yIHRoZSByb3VuZGluZyBoYWNrIAogICAgICAgICAgICAgLy8gdG8gYmUgaW50ZWdl
ciB3aWR0aCwgc28gdGhlIGZvbGxvd2luZyB3b3JkcyB3aWxsIHN0YXJ0IG9uIGFuIGludGVnZXIg
Ym91bmRhcnkuIAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYg
Rm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoY2gpKSAKKyAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJh
Y3RlcihjaCkpIAogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBjZWlsQ0dGbG9hdChh
ZHZhbmNlLndpZHRoKTsgCiAKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgbmV4
dCBjaGFyYWN0ZXIgaXMgYSAicm91bmRpbmcgaGFjayBjaGFyYWN0ZXIiLCBpZiBzbywgYWRqdXN0
IHRoZSAKLSAgICAgICAgICAgIC8vIHdpZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3
aWxsIGJlIG9uIGFuIGludGVnZXIgYm91bmRhcnkuIAotICAgICAgICAgICAgaWYgKChtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmICFsYXN0R2x5cGggJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIobmV4dENoKSkgfHwgKG1fcnVuLmFwcGx5UnVuUm91bmRpbmcoKSAmJiBsYXN0R2x5
cGgpKSB7IAorICAgICAgICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90YWwgcnVuIHdpZHRo
IHdpbGwgYmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4KKyAgICAgICAgICAgIGJvb2wgbmVlZHNS
b3VuZGluZ0ZvckNoYXJhY3RlciA9IG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgIWxhc3RH
bHlwaCAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIobmV4dENoKTsKKyAg
ICAgICAgICAgIGlmIChuZWVkc1JvdW5kaW5nRm9yQ2hhcmFjdGVyIHx8IChtX3J1bi5hcHBseVJ1
blJvdW5kaW5nKCkgJiYgbGFzdEdseXBoKSkgewogICAgICAgICAgICAgICAgIENHRmxvYXQgdG90
YWxXaWR0aCA9IHdpZHRoU2luY2VMYXN0Q29tbWl0ICsgYWR2YW5jZS53aWR0aDsgCiAgICAgICAg
ICAgICAgICAgd2lkdGhTaW5jZUxhc3RDb21taXQgPSBjZWlsQ0dGbG9hdCh0b3RhbFdpZHRoKTsg
CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBleHRyYVdpZHRoID0gd2lkdGhTaW5jZUxhc3RDb21t
aXQgLSB0b3RhbFdpZHRoOyAKQEAgLTcwOSw3ICs3MTAsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RDb21t
aXQgKz0gYWR2YW5jZS53aWR0aDsgCiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21iaW5pbmcg
bWFya3Mgc2hvdWxkIHJlY2VpdmUgYSB0ZXh0IGVtcGhhc2lzIG1hcmsgaWYgdGhleSBhcmUgY29t
YmluZSB3aXRoIGEgc3BhY2UuCi0gICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYg
KCFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoKSB8fCAoVV9HRVRfR0NfTUFTSyhjaCkg
JiBVX0dDX01fTUFTSykpKQorICAgICAgICAgICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzICYmICgh
Rm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoY2gpIHx8IChVX0dFVF9HQ19NQVNL
KGNoKSAmIFVfR0NfTV9NQVNLKSkpCiAgICAgICAgICAgICAgICAgZ2x5cGggPSAwOwogCiAgICAg
ICAgICAgICBhZHZhbmNlLmhlaWdodCAqPSAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgU2lt
cGxlRm9udERhdGE7CiBjbGFzcyBUZXh0UnVuOwogCkBAIC01MCw3ICs1MCw3IEBAIGVudW0gR2x5
cGhJdGVyYXRpb25TdHlsZSB7IEluY2x1ZGVQYXJ0aWEKIC8vIGNvbXBsZXggc2NyaXB0cyBvbiBP
UyBYLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5h
dHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwor
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRS
dW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVt
cGhhc2lzID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8g
dGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBH
bHlwaEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlw
aHMsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOwpA
QCAtMTM4LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9y
dW5JbmRpY2VzOwogICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IG1fZ2x5cGhDb3VudEZyb21TdGFy
dFRvSW5kZXg7CiAKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUmIG1fZm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKICAgICBib29sIG1faXNMVFJP
bmx5OwogICAgIGJvb2wgbV9tYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJD
b3JlVGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHJldmlzaW9uIDE3ODQ1NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXJDb3JlVGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1
ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIK
LSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgogCkBAIC00MCwxOSArNDAsMTkgQEAKIAogQGludGVyZmFjZSBXZWJDYXNj
YWRlTGlzdCA6IE5TQXJyYXkgewogICAgIEBwcml2YXRlCi0gICAgY29uc3QgV2ViQ29yZTo6Rm9u
dCogX2ZvbnQ7CisgICAgY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqIF9mb250OwogICAgIFVD
aGFyMzIgX2NoYXJhY3RlcjsKICAgICBOU1VJbnRlZ2VyIF9jb3VudDsKICAgICBWZWN0b3I8UmV0
YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+LCAxNj4gX2ZvbnREZXNjcmlwdG9yczsKIH0KIAot
LSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250Kilmb250IGNoYXJhY3Rlcjoo
VUNoYXIzMiljaGFyYWN0ZXI7CistIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZv
bnRDYXNjYWRlKilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXI7CiAKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIFdlYkNhc2NhZGVMaXN0CiAKLS0gKGlkKWluaXRXaXRoRm9udDooY29u
c3QgV2ViQ29yZTo6Rm9udCopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hhcmFjdGVyCistIChp
ZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNjYWRlKilmb250IGNoYXJhY3Rl
cjooVUNoYXIzMiljaGFyYWN0ZXIKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTYwLDcgKzYwLDcgQEAgLSAoaWQpaW5pdFdpdGhGb250
Oihjb25zdCBXZWJDb3JlOjpGb250KgogICAgIF9mb250ID0gZm9udDsKICAgICBfY2hhcmFjdGVy
ID0gY2hhcmFjdGVyOwogCi0gICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1
c2VkLCB0aGUgRm9udCBoYXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxpemUgYWxsIG9mIGl0
cworICAgIC8vIEJ5IHRoZSB0aW1lIGEgV2ViQ2FzY2FkZUxpc3QgaXMgdXNlZCwgdGhlIEZvbnRD
YXNjYWRlIGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCiAgICAg
Ly8gRm9udERhdGEsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4KICAg
ICB3aGlsZSAoIV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9jb3VudCkuaXNOdWxsKCkpCiAgICAg
ICAgIF9jb3VudCsrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaWYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiQ29y
ZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5o
IgogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbXBvcnQgIk5TRm9udFNQSS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHJl
dmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250Q29tcGxleFRleHRNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRm9udEdseXBocy5oIgpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIodGhpcywgcnVuKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7CkBAIC01Miw3ICs1
Miw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXgKICAgICBzZWxl
Y3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7CiB9CiAKLWZsb2F0
IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50
IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7
CiAKQEAgLTc1LDcgKzc1LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBh
ZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlw
aEJ1ZmZlcjsKQEAgLTkzLDcgKzkzLDcgQEAgZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9p
ZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBH
bHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIs
IEZvclRleHRFbXBoYXNpcyk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZQogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1
biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFu
Y2UsIHBvaW50LnkoKSkpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAgICAgaWYgKGdseXBo
T3ZlcmZsb3cpIHsKQEAgLTExNiwxMyArMTE2LDEzIEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb24KICAgICByZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7CiB9
CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK2ludCBG
b250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAg
Q29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKICAgICByZXR1cm4g
Y29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9
CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2Fz
Y2FkZTo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0
CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVy
TGVuZ3RoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
NyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW1wb3J0
ICJDb3JlVGV4dFNQSS5oIgpAQCAtNTgsMTIgKzU4LDEyIEBAIFNPRlRfTElOSyhVSUtpdCwgX1VJ
S2l0R2V0VGV4dEVmZmVjdHNDYXQKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEZvbnQ6
OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRl
OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhU
ZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5NSw3ICsxOTUsNyBAQCBzdGF0
aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAjZW5kaWYKIAotdm9pZCBG
b250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QK
IHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0
Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC01MjYsNyArNTI2
LDcgQEAgdm9pZCBNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgIH0gd2hp
bGUgKG1fZm9udERhdGEtPmlzU1ZHRm9udCgpICYmIG1faW5kZXggPCBtX2dseXBoQnVmZmVyLnNp
emUoKSk7CiB9CiAKLURhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJl
Y3QoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdAorRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpk
YXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25z
dAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm4gRGFz
aEFycmF5KCk7CkBAIC01MzQsNyArNTM0LDcgQEAgRGFzaEFycmF5IEZvbnQ6OmRhc2hlc0Zvcklu
dGVyc2VjdGlvbnNXaQogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGdseXBoQnVm
ZmVyLnNhdmVPZmZzZXRzSW5TdHJpbmcoKTsKICAgICBmbG9hdCBkZWx0YVg7Ci0gICAgaWYgKGNv
ZGVQYXRoKHJ1bikgIT0gRm9udDo6Q29tcGxleCkKKyAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBG
b250Q2FzY2FkZTo6Q29tcGxleCkKICAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbGVUZXh0KHJ1biwgMCwgcnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7CiAgICAg
ZWxzZQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KHJ1biwgMCwgcnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7CkBAIC01OTAsNyArNTkwLDcgQEAg
RGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaQogfQogI2VuZGlmCiAKLWJv
b2wgRm9udDo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGU6OnByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0CiB7CiAjaWYgUExBVEZP
Uk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAogICAgIGNv
bnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAko
cmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dseXBoUGFnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lu
Y2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2luY2x1ZGUgIkNvcmVUZXh0U1BJLmgiCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgIVBM
QVRGT1JNKElPUykKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29yZVRl
eHQoY29uc3QgVUNoYQogICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkud2lkdGhWYXJp
YW50KCkgIT0gUmVndWxhcldpZHRoIHx8IGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7
CiAgICAgICAgIC8vIElkZW9ncmFwaHMgZG9uJ3QgaGF2ZSBhIHZlcnRpY2FsIHZhcmlhbnQgb3Ig
d2lkdGggdmFyaWFudHMuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJM
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaChidWZm
ZXJbaV0pKQorICAgICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVm
ZmVyW2ldKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW1w
b3J0ICJDb3JlVGV4dFNQSS5oIgogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCi0jaW1wb3J0ICJGb250
LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9y
dCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dpZGdldElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2lkZ2V0SU9TLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkN1cnNvci5oIgogI2ltcG9y
dCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
CiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0
ICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhp
Y3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dy
YXBoaWNzLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3Mvd2FrL1dLR3JhcGhpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNp
ZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAi
Rm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKICNpbXBvcnQgPEltYWdlSU8v
SW1hZ2VJTy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdl
TWFjLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5B
QkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAjaW1wb3J0ICJDb3Jl
R3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
CiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgog
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xNTcsMTAgKzE1NywxMCBAQCBjb25zdCBm
bG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CiAKIC8vIEZJWE1FIC0gd2Ugc2hvdWxkIG1v
dmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5nIGV4dHJhcyB0byBXZWJDb3JlCiAg
ICAgCi1zdGF0aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250KQorc3RhdGljIEZv
bnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCiB7CiAgICAgc3RhdGljIE5T
Rm9udCAqY3VycmVudEZvbnQ7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZv
bnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChGb250Q2FzY2FkZSwgY3VycmVudFJlbmRlcmVyLCAoKSk7CiAgICAgCiAgICAgaWYgKFtm
b250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQogICAgICAgICByZXR1cm4gY3VycmVudFJlbmRlcmVy
OwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBGb250JiBmb250RnJvbU5TRm9udChOU0ZvbnQg
KmZvbnQKICAgICBjdXJyZW50Rm9udCA9IGZvbnQ7CiAgICAgQ0ZSZXRhaW4oY3VycmVudEZvbnQp
OwogICAgIEZvbnRQbGF0Zm9ybURhdGEgZihmb250LCBbZm9udCBwb2ludFNpemVdKTsKLSAgICBj
dXJyZW50UmVuZGVyZXIgPSBGb250KGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgIGN1cnJlbnRSZW5kZXJlciA9IEZvbnRDYXNj
YWRlKGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1Nj
cmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CiB9CiAKQEAgLTE5Miw3ICsxOTIs
NyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhXaXRoRm9udChOU1N0cmluZyAqc3RyCiAgICAgW3N0cmlu
ZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogICAgIAogICAgIGlmIChjYW5Vc2VGYXN0
UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBGb250IHdlYkNvcmVG
b250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgICAgICBG
b250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50
U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9T
Y3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKICAg
ICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJldHVybiB3ZWJDb3Jl
Rm9udC53aWR0aChydW4pOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdBdFBv
aW50KE5TU3RyaW5nICpzdHJpbmcKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAgICAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6
ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0sIEFudGlhbGlhc2VkKTsKKyAgICAg
ICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBw
b2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBBbnRpYWxpYXNlZCk7
CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAgIHJ1
bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29u
dHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZv
bnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3Qg
Rm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFs
IExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBM
ZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhT
aXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6
ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBj
b25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQs
IGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3Rv
cikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBh
cnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0
IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIo
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRC
b3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xS
ZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3QgeyByZXR1cm4gcGFy
dCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBUaGVt
ZSogcGxhdGZvcm1UaGVtZSgpCiAKIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBhIGJ1bmNo
IG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgogCi1zdGF0aWMgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBpbnQgZm9u
dFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikKQEAgLTE3
Miw3ICsxNzIsNyBAQCBzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbU5TQ29udHJvbFNpemUoCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21G
YWN0b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQorc3RhdGljIExlbmd0
aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6OmFycmF5PEludFNp
emUsIDM+JiBzaXplcykKIHsKICAgICByZXR1cm4gc2l6ZUZyb21OU0NvbnRyb2xTaXplKGNvbnRy
b2xTaXplRm9yRm9udChmb250KSwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvciwgc2l6ZXMpOwogfQpA
QCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIGNoZWNrYm94TWFyZ2lucyhOU0Nv
bnQKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhT
aXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUgY2hlY2tib3hTaXpl
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBm
bG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBi
b3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29t
ZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQo
KS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtMzIzLDcgKzMyMyw3IEBAIHN0YXRpYyBjb25zdCBp
bnQqIHJhZGlvTWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6
ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250JiBmb250LCBj
b25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExl
bmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0
aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
em9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtNTkzLDcgKzU5Myw3
IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PEludFNpemUsIDM+JiBzdGUKIAogLy8gV2UgZG9u
J3QgdXNlIGNvbnRyb2xTaXplRm9yRm9udCgpIGZvciBzdGVwcGVycyBiZWNhdXNlIHRoZSBzdGVw
cGVyIGhlaWdodAogLy8gc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0aGUgY29ycmVz
cG9uZGluZyB0ZXh0IGZpZWxkIGhlaWdodCwKLXN0YXRpYyBOU0NvbnRyb2xTaXplIHN0ZXBwZXJD
b250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0NvbnRyb2xTaXpl
IHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAg
ICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0g
MTgpCkBAIC02NzMsNyArNjczLDcgQEAgaW50IFRoZW1lTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRq
dXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQocGFy
dCk7CiB9CiAKLUZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBh
cnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0ZvbnRE
ZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKQEAgLTY5MSw3ICs2OTEs
NyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvCiAgICAgfQogfQog
Ci1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFj
dG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNp
emUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAg
ICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgpAQCAtNzEwLDcgKzcxMCw3IEBAIExlbmd0aFNpemUgVGhl
bWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2wKICAgICB9CiB9CiAKLUxlbmd0aFNpemUgVGhlbWVN
YWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250
LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6bWluaW11bUNv
bnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNl
IFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MjcsNyArNzI3LDcgQEAgTGVuZ3RoU2l6ZSBUaGVtZU1h
Yzo6bWluaW11bUNvbnRyb2xTaXplKAogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1lTWFjOjpj
b250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExl
bmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoQm94IFRo
ZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0
OgpAQCAtNzM5LDcgKzczOSw3IEBAIExlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihD
b250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRC
b3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xQ
YWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBM
ZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0
Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQgIkN1cnNvci5oIgog
I2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
UGxhdGZvcm1Mb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1BsYXRmb3JtTG9jYWxlLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oSU9TKQotY2xhc3Mg
Rm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogI2VuZGlmCiAKIGNsYXNzIExvY2FsZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWRE
YXRlQ2FjaGUuaAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKIAogI2luY2x1ZGUgIkRhdGVDb21w
b25lbnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIGNs
YXNzIExvY2FsaXplZERhdGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgTlNEYXRlRm9ybWF0dGVyICpm
b3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7Ci0gICAgZmxvYXQgbWF4
aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmLCBj
b25zdCBNZWFzdXJlVGV4dENsaWVudCYpOworICAgIGZsb2F0IG1heGltdW1XaWR0aEZvckRhdGVU
eXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IE1lYXN1
cmVUZXh0Q2xpZW50Jik7CiAgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7CiAKIHByaXZhdGU6CkBA
IC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgZmxvYXQ+
IERhdGVUeXBlTWF4V2lkdGhNYXA7CiAgICAgRGF0ZVR5cGVGb3JtYXR0ZXJNYXAgbV9mb3JtYXR0
ZXJNYXA7CiAgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdpZHRoTWFwOwotICAgIEZvbnQg
bV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKIAogICAgIGZyaWVuZCBMb2NhbGl6ZWRE
YXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOwogICAgIGZyaWVuZCBOZXZlckRlc3Ryb3ll
ZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkocmV2aXNpb24gMTc4NDU2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCi0jaW1wb3J0ICJGb250LmgiCisjaW1w
b3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiVGV4dFJ1bi5oIgogI2ltcG9ydCA8bWF0aC5o
PgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTUyLDcgKzUyLDYgQEAgc3RhdGljIHZv
aWQgX2xvY2FsZUNoYW5nZWQoQ0ZOb3RpZmljYXRpbwogfQogCiBMb2NhbGl6ZWREYXRlQ2FjaGU6
OkxvY2FsaXplZERhdGVDYWNoZSgpCi0gICAgOiBtX2ZvbnQoRm9udCgpKQogewogICAgIC8vIExp
c3RlbiB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBhbmQgY2xlYXIgdGhl
IGNhY2hlIHdoZW4gaXQgZG9lcy4KICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVy
KENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQqKXRoaXMsIF9sb2Nh
bGVDaGFuZ2VkLApAQCAtODQsMTQgKzgzLDE0IEBAIE5TRGF0ZUZvcm1hdHRlciAqTG9jYWxpemVk
RGF0ZUNhY2hlOjpmb3IKICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKIH0KIAotZmxvYXQgTG9j
YWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6
VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYgbWVh
c3VyZXIpCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZvckRhdGVUeXBl
KERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBNZWFzdXJlVGV4dENsaWVudCYgbWVhc3VyZXIpCiB7CiAgICAgaW50IGtleSA9IHN0YXRpY19j
YXN0PGludD4odHlwZSk7CiAgICAgaWYgKG1fZm9udCA9PSBmb250KSB7CiAgICAgICAgIGlmICht
X21heFdpZHRoTWFwLmNvbnRhaW5zKGtleSkpCiAgICAgICAgICAgICByZXR1cm4gbV9tYXhXaWR0
aE1hcC5nZXQoa2V5KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnQgPSBGb250KGZvbnQp
OworICAgICAgICBtX2ZvbnQgPSBGb250Q2FzY2FkZShmb250KTsKICAgICAgICAgbV9tYXhXaWR0
aE1hcC5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5j
bHVkZSAiRWxsaXBzaXNCb3guaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRC
b3guaCIKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludAogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNv
bnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCkBAIC0xMTAsNyArMTEwLDcg
QEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRNYXJrdXBCb3goUGFpbnRJbgogSW50UmVjdCBFbGxp
cHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5
bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0eWxlLmZvbnRD
YXNjYWRlKCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJvb3QoKTsKICAg
ICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29ycmVj
dCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBM
YXlvdXRSZWN0KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNl
ZGluZ0Jsb2NrKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQcmVjZWRp
bmdCbG9jaygpKTsKQEAgLTExOSw3ICsxMTksNyBAQCBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxl
Y3Rpb25SZWN0KCkKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsK
IH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjID0gYmxvY2tGbG93KCkuc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAko
cmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBh
aW50TWFya3VwQm94KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIGNvbnN0IFJlbmRlclN0
eWxlJik7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAg
dmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQotICAgIHZvaWQgcGFpbnRTZWxlY3Rp
b24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2Fz
Y2FkZSYpOwogICAgIElubGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAKICAgICBib29sIG1f
c2hvdWxkUGFpbnRNYXJrdXBCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFbGxpcHNpc0JveC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMjIsNyArMTIyLDcg
QEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KgogICAgICAgICAgICAg
c2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lID0gdHJ1
ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmJlaGF2ZXNMaWtlVGV4dCgpKSB7CiAgICAgICAg
ICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSB8fCBjaGlsZC0+cmVuZGVy
ZXIoKS5wYXJlbnQoKSAhPSAmcmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFu
ZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGlj
YWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUubGluZUhlaWdodCgp
ICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJl
bnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgp
KSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAgICAgICAgICAg
ICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2Vs
aW5lID0gdHJ1ZTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRv
TGluZShJbmxpbmVCb3gqCiAgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRGbG93Qm94ID0gZG93
bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgICAgICAgICAvLyBDaGVjayB0
aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZlcmVuY2VzIGluIGZv
bnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgogICAgICAgICAgICAgICAgIGlmICghY2hp
bGRGbG93Qm94LmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKQotICAg
ICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGFz
SWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1l
dHJpY3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGls
ZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAg
fHwgcGFyZW50U3R5bGUubGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAg
ICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFT
RUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24o
KSAhPSBCQVNFTElORQogICAgICAgICAgICAgICAgICAgICB8fCBjaGlsZFN0eWxlLmhhc0JvcmRl
cigpIHx8IGNoaWxkU3R5bGUuaGFzUGFkZGluZygpIHx8IGNoaWxkU3R5bGUuaGFzVGV4dENvbWJp
bmUoKSkKQEAgLTM4OCw3ICszODgsNyBAQCBmbG9hdCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveFJh
bmdlSW5JbmxpCiAgICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gdGV4dEJveC5y
ZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlclRleHQudGV4dExlbmd0aCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3bGluZShy
ZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3guc3RhcnQoKSkpKQotICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS53b3JkU3BhY2lu
ZygpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94LmxpbmVTdHls
ZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAgICBuZWVkc1dv
cmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdCh0ZXh0
Qm94LmVuZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXh0Qm94LnNldExvZ2lj
YWxMZWZ0KGxvZ2ljYWxMZWZ0KTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29sIElubGluZUZsb3dC
b3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0
eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5mb250RGVzY3JpcHRp
b24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVw
cmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNW
ZXJ0aWNhbEdseXBocygpKQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wgSW5saW5l
Rmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChkb3duY2FzdDxJ
bmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSh0ZXh0Qm94
RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERh
dGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNoaWxkLT5saW5lU3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSBudWxscHRy
OwpAQCAtODczLDcgKzg3Myw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRC
b3hWaXMKIAogICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICBpZiAobGluZVN0eWxl
LnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiB0ZXh0Qm94LmVt
cGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3Zl
KSkgewotICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5l
bXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7Cisg
ICAgICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5l
bXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAg
ICAgICAgIGlmIChlbXBoYXNpc01hcmtJc0Fib3ZlID09ICFsaW5lU3R5bGUuaXNGbGlwcGVkTGlu
ZXNXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWlu
KHRvcEdseXBoT3ZlcmZsb3csIC1lbXBoYXNpc01hcmtIZWlnaHQpOwogICAgICAgICBlbHNlCkBA
IC04ODIsNyArODgyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZp
cwogCiAgICAgLy8gSWYgbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmUsIHdlIHNob3VsZCBmYWN0
b3IgdGhhdCBpbnRvIHJpZ2h0IGxheW91dCBvdmVyZmxvdy4gKEV2ZW4gaW4gUlRMLCBsZXR0ZXIt
c3BhY2luZyBpcwogICAgIC8vIGFwcGxpZWQgdG8gdGhlIHJpZ2h0LCBzbyB0aGlzIGlzIG5vdCBh
biBpc3N1ZSB3aXRoIGxlZnQgb3ZlcmZsb3cuCi0gICAgcmlnaHRHbHlwaE92ZXJmbG93IC09IHN0
ZDo6bWluKDAsIChpbnQpbGluZVN0eWxlLmZvbnQoKS5sZXR0ZXJTcGFjaW5nKCkpOworICAgIHJp
Z2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5mb250Q2FzY2Fk
ZSgpLmxldHRlclNwYWNpbmcoKSk7CiAKICAgICBMYXlvdXRVbml0IHRleHRTaGFkb3dMb2dpY2Fs
VG9wOwogICAgIExheW91dFVuaXQgdGV4dFNoYWRvd0xvZ2ljYWxCb3R0b207CkBAIC0xNTM0LDEw
ICsxNTM0LDEwIEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm4KICAg
ICAgICAgICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICAgICAgICAgIGlmIChjaGls
ZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgJiYg
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fi
b3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKSAmJiBlbXBoYXNpc01hcmtJ
c0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHlsZS5pc0ZsaXBwZWRM
aW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFz
aXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBo
YXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2lj
YWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0
KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0gdG9wT2ZF
bXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBj
aGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRl
eHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBib3R0b21P
ZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5m
b250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFz
aXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChy
ZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBvc2l0aW9uKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTgzLDEwICsxNTgzLDEwIEBAIExheW91dFVu
aXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZVVuZGVyQW4KICAgICAgICAgICAgIGRvd25jYXN0PElu
bGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjaGlsZExp
bmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSk7CiAgICAgICAgICAgICBpZiAoY2hpbGRMaW5l
U3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYmICFlbXBo
YXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHlsZS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBjaGls
ZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRF
bXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90
dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5
bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVt
cGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjpt
YXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3NpdGlvbik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BP
ZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5mb250
KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZFbXBoYXNpc01hcmsg
PSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBo
YXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBhbGxvd2VkUG9z
aXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTQgKzI0NSwxNCBAQCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1zdGF0
aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
UmVuZGVyVGV4dCYgcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgRm9udENhc2NhZGUmIGZvbnRUb1Vz
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKQog
ewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0
PihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJpbmVSZW5kZXJlciA9
IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAgICAgIGlmICh0ZXh0
Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0ZXh0Q29t
YmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KLSAgICByZXR1cm4gc3R5bGUu
Zm9udCgpOworICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQogCiBMYXlvdXRSZWN0
IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQ
b3MpIGNvbnN0CkBAIC0yNjYsNyArMjY2LDcgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojps
b2NhbFNlbGVjdGlvbgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gdGhpcy0+c2VsZWN0
aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rp
b25IZWlnaHQoKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGlu
ZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJl
bmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRvVXNlKGxpbmVT
dHlsZSwgcmVuZGVyZXIoKSk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcjsK
ICAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwpA
QCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWkKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHRleHRQYWludFN0eWxlOwogCiAgICAg
Ly8gU2V0IG91ciBmb250LgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0
eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1Vz
ZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIC8vIDEuIFBhaW50IGJhY2tncm91bmRzIGJl
aGluZCB0ZXh0IGlmIG5lZWRlZC4gRXhhbXBsZXMgb2Ygc3VjaCBiYWNrZ3JvdW5kcyBpbmNsdWRl
IHNlbGVjdGlvbgogICAgIC8vIGFuZCBjb21wb3NpdGlvbiB1bmRlcmxpbmVzLgogICAgIGlmIChw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZVRleHRDbGlwICYmICFpc1ByaW50aW5nKSB7CkBAIC02NzgsNyArNjc4LDcg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgogICAgIGVQb3MgPSBz
dGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKIH0KIAotdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBDb2xv
ciB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQogICAgIGlmIChjb250
ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAjZW5kaWYKIH0KIAotdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCiB7CiAg
ICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBzdGQ6Om1heChzdGFydFBv
cyAtIG9mZnNldCwgMCk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBzdGF0aWMgR3JhcGhpY3NDb250
ZXh0OjpEb2N1bWVudE1hcmtlckxpCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBh
aW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCit2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1h
cmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Ym9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFy
a2VycyAoNTMyNzg4NykKICAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5nKCkp
CkBAIC0xMTI4LDcgKzExMjgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRN
YXJrZXIoCiAgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKEZsb2F0UG9pbnQo
Ym94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwg
d2lkdGgsIGxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkpOwogfQogCi12b2lk
IElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2Vy
JiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCkKIHsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRoaXMtPnNlbGVjdGlv
bkhlaWdodCgpOwogCkBAIC0xMTU5LDcgKzExNTksNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50VGV4dE1hdGNoTWFya2VyCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2Vy
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGlu
ZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVu
dE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KQogewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJlIG5vdCBhY3R1YWxs
eSBkcmF3biwgYnV0IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQgZm9yIGhpdCB0ZXN0
aW5nLgogICAgIExheW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CkBAIC0xMTc3LDcgKzEx
NzcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjCiAgICAgbWFy
a2VyLnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKLXZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
Rm9udCYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERv
Y3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgYm9vbCBiYWNrZ3JvdW5kKQogewogICAgIGlmICghcmVuZGVyZXIoKS50ZXh0Tm9kZSgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbnQgSW5saW5lVGV4dEJv
eDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyAwIDogbGVuKCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxl
ID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShs
aW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9u
dFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIGZvbnQub2Zmc2V0Rm9y
UG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBsaW5lT2Zmc2V0IC0g
bG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCkBAIC0xMzQyLDcgKzEz
NDIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpCiAgICAgICAg
IHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHls
ZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2Uo
bGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZv
bnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIGludCBmcm9tID0gIWlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwogICAgIGludCB0byA9ICFp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CiAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwpAQCAtMTM1Miw3
ICsxMzUyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaQogICAg
IHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0
aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJ1bi5s
dHIoKSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBTdHJpbmcqIGh5
cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0
cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAogewogICAgIEFTU0VS
VChyZW5kZXJlcigpLnRleHQoKSk7CiAKQEAgLTEzNjYsNyArMTM2Niw3IEBAIFRleHRSdW4gSW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1
bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAtIHN0YXJ0UG9z
LCBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKTsKIH0KIAotVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3RyaW5nKiBoeXBoZW5h
dGVkU3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RU
ZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRl
ZFN0cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAko
cmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBAIHByaXZhdGU6CiAgICAgTGF5
b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlv
bkhlaWdodCgpIGNvbnN0OwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9
IG51bGxwdHIpIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0
cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OworICAgIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7CisgICAg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENh
c2NhZGUmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRl
ZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBG
bG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCh4
KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNDgsMTcgKzE0OCwxNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25z
dDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwotICAgIHZvaWQg
cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29sIGJhY2tncm91
bmQpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50
RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJvb2wgYmFja2dy
b3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxp
bmUmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFRleHREZWNvcmF0aW9uLCBUZXh0RGVj
b3JhdGlvblN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwgVGV4dFBhaW50ZXImKTsKLSAgICB2b2lk
IHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQ29sb3IgdGV4dENvbG9yKTsK
LSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVy
U3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBhaW50VGV4dE1h
dGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
UmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYp
OworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQ
b2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
Q29sb3IgdGV4dENvbG9yKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFy
a2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJvb2wgZ3JhbW1h
cik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKLSAgICB2b2lkIGNvbXB1dGVSZWN0
Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVu
dE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250Q2FzY2FkZSYpOwogCiAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uQmVoYXZpb3IoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyNSw3ICsyMzI1LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAgICAgICByZXR1
cm4gbGVmdDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcgYXBwbHk/IFRo
aXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUgZWRnZT8KLSAg
ICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdy
aWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgo
KTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKQEAgLTIz
NjUsNyArMjM2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxSaWcK
ICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3Bh
Y2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0
IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFy
V2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
Lm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICByZXR1cm4g
cmlnaHQ7CiAKQEAgLTMwMDMsNyArMzAwMyw3IEBAIHN0YXRpYyBSZW5kZXJTdHlsZSYgc3R5bGVG
b3JGaXJzdExldHRlcigKICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIHBzZXVkb1N0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcHNldWRvU3R5bGUtPmZv
bnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAg
IHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9udENhc2Nh
ZGUoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQgZGVzaXJlZENhcEhl
aWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVp
Z2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CiAgICAg
ICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3MoKS5jYXBI
ZWlnaHQoKTsKQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyBSZW5kZXJTdHlsZSYgc3R5bGVG
b3JGaXJzdExldHRlcigKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsKICAgICAgICAg
ICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5m
b250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAg
ICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250
Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIGFjdHVhbENhcEhlaWdodCA9
IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzY5Myw3ICszNjkzLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5h
bWUoKSBjbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBp
bmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250
ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
SW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAg
ICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wgZGlyZWN0aW9u
YWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBAIC0zNzA4
LDcgKzM3MDgsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uID0gTFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVy
aW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBAIC0zNzI3LDI0ICszNzI3LDI0IEBAIHN0YXRpYyBpbmxp
bmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICByZXR1cm4gcnVuOwogfQogCi1UZXh0
UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3Qq
IGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNp
b25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRl
cm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0eWxlLCBleHBhbnNpb24p
OwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihS
ZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVj
dFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0eWxl
LCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVuZGVyVGV4
dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhh
dmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFJlbmRl
clRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIGlmICh0ZXh0LT5pczhCaXQoKSkKICAgICAgICAg
cmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCB0ZXh0LT5jaGFy
YWN0ZXJzOCgpLCB0ZXh0LT50ZXh0TGVuZ3RoKCksIHN0eWxlLCBleHBhbnNpb24pOwogICAgIHJl
dHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFj
dGVyczE2KCksIHRleHQtPnRleHRMZW5ndGgoKSwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRl
eHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0
LCBjb25zdCBGb250JiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbikKIHsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHRleHQtPnRleHRMZW5n
dGgoKSk7CiAgICAgaWYgKHRleHQtPmlzOEJpdCgpKQpAQCAtMzc1Miw3ICszNzUyLDcgQEAgVGV4
dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZQogICAgIHJldHVybiBjb25zdHJ1
Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFjdGVyczE2KCkgKyBv
ZmZzZXQsIGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK1Rl
eHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBU
ZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNp
b24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiwyMiArMjAyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFv
YmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYgIW9iai0+Y29udGFp
bmVyKCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9y
YmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7
CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSYs
CisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIGNvbnN0IFJlbmRlclN0
eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAK
LSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
UmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRS
dW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5z
aW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVkIG9mZnNl
dCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFJlbmRl
clRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9u
IHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1
biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisg
ICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3Ig
PSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGlu
Z0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
ck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAg
ICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAgICAgCiAgICAg
TGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlwVHJhaWxpbmdT
cGFjZShmbAogICAgICAgICAvLyBDb2xsYXBzZSBhd2F5IHRoZSB0cmFpbGluZyBzcGFjZSBhdCB0
aGUgZW5kIG9mIGEgYmxvY2suCiAgICAgICAgIFJlbmRlclRleHQmIHJlbmRlclRleHQgPSBkb3du
Y2FzdDxSZW5kZXJUZXh0PigqdHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAgICAgY29uc3QgVUNo
YXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5kZXJUZXh0LnN0
eWxlKCkuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRl
KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgZmxvYXQgc3Bh
Y2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRl
clRleHQsIGZvbnQsICZzcGFjZSwgMSwgcmVuZGVyVGV4dC5zdHlsZSgpKSk7CiAgICAgICAgIGlu
bGluZU1heCAtPSBzcGFjZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOwogICAgICAgICBpZiAo
aW5saW5lTWluID4gaW5saW5lTWF4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxX
aWR0aEZvclRleAogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0Zv
bnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAotICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnQoKTsK
KyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVu
dCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKICAgICAvLyBBbHdheXMgY29tcHV0ZSBnbHlw
aCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJveC1jb250YWluIHZhbHVlIGlzICJnbHlw
aHMiLgogICAgIGlmIChsaW5lQm94LT5maXRzVG9HbHlwaHMoKSkgewogICAgICAgICAvLyBJZiB3
ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdzIGZvbnQgYm94LCB0aGVuIGRvbid0
IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93LiBUaGlzIG9wdGltaXphdGlvbgpA
QCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JU
ZXgKICAgICAgICAgICAgICAgICAgICAgJndvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLCAm
b3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgIFVDaGFyIGMgPSByZW5kZXJlci0+Y2hhcmFjdGVy
QXQod29yZE1lYXN1cmVtZW50LnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoaSA+
IDAgJiYgd29yZExlbmd0aCA9PSAxICYmIChjID09ICcgJyB8fCBjID09ICdcdCcpKQotICAgICAg
ICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS53
b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRl
cmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1lYXN1cmVtZW50Lndp
ZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5pc0Vt
cHR5KCkpIHsKQEAgLTc0MywxNCArNzQzLDE0IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6
Y29tcHV0ZUlubGluZUQKICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT0gSlVTVElGWSAmJiBy
dW4gIT0gdHJhaWxpbmdTcGFjZVJ1bikgewogICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4
cGFuc2lvbikKICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKnJ1
bi0+Ym94KCkpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKHRydWUpOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFydCwgcnVuLT5tX3N0b3Ap
LCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udENhc2NhZGU6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFydCwgcnVu
LT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7CiAg
ICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bwb3J0dW5pdGll
c0luUnVuKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IG9w
cG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGludCBs
ZW5ndGggPSByZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGlmICgh
cnVuLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3bGluZShyZW5k
ZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+bV9zdGFydCkpKQotICAgICAgICAgICAgICAgICAgICB0
b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFyZW50KCksIGxpbmVJ
bmZvKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxMb2dp
Y2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5lSW5mbykuZm9u
dENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNp
bmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+bV9zdG9w
IC0gMSkpICYmIHJ1bi0+bV9zdG9wID09IGxlbmd0aDsKICAgICAgICAgICAgIH0KIApAQCAtNzY4
LDcgKzc2OCw3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqbGVhZkNo
aWxkKS5zZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4obGVhZkNoaWxk
LT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVu
aXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5z
dHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9u
dENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3
KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bwb3J0dW5pdGll
c0luUnVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xOTA3
LDkgKzE5MDcsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tMaW5lc0ZvclRleHRPCiB7
CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMgdXNpbmcgdGhlIGN1
cnJlbnQgZm9udC4KICAgICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29uZmlndXJhYmxl
LCBhbHNvIG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jpem9udGFsIGVsbGlw
c2lzIGlzICJub3QgcmVuZGVyYWJsZSIKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5m
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxs
aXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7Ci0gICAgY29uc3QgRm9udCYgZmly
c3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAg
IGZsb2F0IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0
cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwg
Zmlyc3RMaW5lU3R5bGUoKSkpOwogICAgIGZsb2F0IGVsbGlwc2lzV2lkdGggPSAoZm9udCA9PSBm
aXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250LndpZHRoKGNvbnN0
cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgc3R5bGUoKSkp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4
dC5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBS
ZW5kZXJDb21iaW5lVGV4dDo6c2V0UmVuZGVyZWRUZXh0KAogICAgIG1fbmVlZHNGb250VXBkYXRl
ID0gdHJ1ZTsKIH0KIAotZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
ZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgaWYgKG1f
aXNDb21iaW5lZCkKICAgICAgICAgcmV0dXJuIGZvbnQuc2l6ZSgpOwpAQCAtMTA4LDcgKzEwOCw3
IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBmbG9hdCBjb21i
aW5lZFRleHRXaWR0aCA9IHdpZHRoKDAsIHRleHRMZW5ndGgoKSwgb3JpZ2luYWxGb250KCksIDAs
IG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKICAgICBtX2lzQ29tYmluZWQgPSBjb21iaW5lZFRl
eHRXaWR0aCA8PSBlbVdpZHRoOwogICAgIAotICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9y
ID0gc3R5bGUoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CiAKICAgICBp
ZiAobV9pc0NvbWJpbmVkKQogICAgICAgICBzaG91bGRVcGRhdGVGb250ID0gbV9jb21iaW5lRm9u
dFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOyAvLyBOZWVkIHRvIGNoYW5n
ZSBmb250IG9yaWVudGF0aW9uIHRvIGhvcml6b250YWwuCkBAIC0xMTcsNyArMTE3LDggQEAgdm9p
ZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBzdGF0aWMgY29uc3Qg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnRzW10gPSB7IEhhbGZXaWR0aCwgVGhpcmRXaWR0
aCwgUXVhcnRlcldpZHRoIH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IFdURl9B
UlJBWV9MRU5HVEgod2lkdGhWYXJpYW50cykgOyArK2kpIHsKICAgICAgICAgICAgIGRlc2NyaXB0
aW9uLnNldFdpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnRzW2ldKTsKLSAgICAgICAgICAgIEZvbnQg
Y29tcHJlc3NlZEZvbnQgPSBGb250KGRlc2NyaXB0aW9uLCBzdHlsZSgpLmZvbnQoKS5sZXR0ZXJT
cGFjaW5nKCksIHN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCkpOworCisgICAgICAgICAgICBG
b250Q2FzY2FkZSBjb21wcmVzc2VkRm9udChkZXNjcmlwdGlvbiwgc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCkp
OwogICAgICAgICAgICAgY29tcHJlc3NlZEZvbnQudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZsb2F0IHJ1bldpZHRoID0gUmVuZGVyVGV4dDo6d2lkdGgo
MCwgdGV4dExlbmd0aCgpLCBjb21wcmVzc2VkRm9udCwgMCwgbnVsbHB0ciwgJmdseXBoT3ZlcmZs
b3cpOwpAQCAtMTM2LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVU
ZXh0KCkKICAgICAgICAgc2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZvbnRTdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigpKTsKIAogICAg
IGlmIChzaG91bGRVcGRhdGVGb250KQotICAgICAgICBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnQo
KS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKyAgICAgICAgbV9jb21iaW5lRm9udFN0eWxlLT5mb250
Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgaWYgKG1faXNDb21iaW5lZCkg
ewogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlclN0cmluZywgKCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlciwg
MSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0
LmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVmIFJl
bmRlckNvbWJpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyQ29tYmluZVRleHRfaAogCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0z
OCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0OwogICAgIHZv
aWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmLCBpbnQmIGxlbmd0aCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVkOyB9Ci0gICAg
ZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9udCkgY29uc3QgeyByZXR1cm4g
Zm9udC5zaXplKCk7IH0KLSAgICBjb25zdCBGb250JiBvcmlnaW5hbEZvbnQoKSBjb25zdCB7IHJl
dHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250KCk7IH0KLSAgICBjb25zdCBGb250JiB0ZXh0Q29t
YmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnQoKTsgfQor
ICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KSBjb25z
dCB7IHJldHVybiBmb250LnNpemUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBvcmlnaW5h
bEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOyB9
CisgICAgY29uc3QgRm9udENhc2NhZGUmIHRleHRDb21iaW5lRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKTsgfQogCiBwcml2YXRlOgogICAgIHZv
aWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29tYmluZVRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBmbG9hdCB3
aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQmLCBmbG9hdCB4
UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9h
dCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJS
ZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJE
ZXByZWNhdGVkRmxleGlibGVCb3guaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtOTk3LDcgKzk5Nyw3IEBA
IHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUwKICAgICAgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNBbmRTcGFjZVN0
ciwgKGVsbGlwc2lzQW5kU3BhY2UsIDIpKTsKICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lz
LCAxKSk7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBudW1WaXNpYmxl
TGluZXMgPT0gMSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgICAgICBjb25zdCBG
b250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKIAogICAgICAgICAvLyBHZXQgZWxsaXBz
aXMgd2lkdGgsIGFuZCBpZiB0aGUgbGFzdCBjaGlsZCBpcyBhbiBhbmNob3IsIGl0IHdpbGwgZ28g
YWZ0ZXIgdGhlIGVsbGlwc2lzLCBzbyBhZGQgaW4gYSBzcGFjZSBhbmQgdGhlIGFuY2hvciB3aWR0
aCB0b28KICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAx
Nzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBh
aW50UmVwbGFjZWQKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBGbG9hdFJlY3Qg
cmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0OwotICAgIEZvbnQg
Zm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIiKTsKICAgICBm
bG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShwYWlu
dE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50VGV4dFJlY3Qs
IGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZv
aWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFVuYXZhaWxhYmwKICAgICByZXBhaW50KCk7CiB9
CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5
KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50
UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4
dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiBmb250LCBUZXh0UnVuJiBydW4sIGZs
b2F0JiB0ZXh0V2lkdGgpIGNvbnN0Citib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBs
YWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwgRmxvYXRS
ZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9udENhc2Nh
ZGUmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3QKIHsKICAgICBi
b29sIGluY2x1ZGVzQXJyb3cgPSBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRv
bihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKIApAQCAtMzYxLDcg
KzM2MSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW4KICAgICBm
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0UmVuZGVyaW5nTW9kZShmcmFtZSgpLnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01v
ZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7Ci0gICAgZm9u
dCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKKyAgICBmb250ID0gRm9udENhc2NhZGUo
Zm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZSgwKTsKIAogICAgIHJ1biA9
IFRleHRSdW4obV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCk7CkBAIC0zOTEsNyAr
MzkxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dW5hdmFpbAogICAgIEZs
b2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0
OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNj
YWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIsIDApOwogICAgIGZsb2F0IHRleHRXaWR0aDsK
ICAgICBpZiAoZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoYWNjdW11bGF0ZWRPZmZzZXQsIGNv
bnRlbnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBhcnJvd1JlY3Qs
IGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBib29sIFJlbmRlckVt
YmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFiCiAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3Q7
CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRSZWN0IGFycm93
UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBUZXh0UnVu
IHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIHJldHVybiBnZXRSZXBsYWNlbWVu
dFRleHRHZW9tZXRyeShJbnRQb2ludCgpLCBjb250ZW50UmVjdCwgaW5kaWNhdG9yUmVjdCwgcmVw
bGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCShy
ZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCk7CiAgICAg
Ym9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VFdmVudCYpIGNv
bnN0OwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwg
RmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3Qs
IEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgp
IGNvbnN0OworICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJl
Y3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRS
ZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgp
IGNvbnN0OwogICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JCb3VuZHMo
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMTc4
NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZp
bGVVcGxvYWRDb250cm9sLmgiCiAKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWlu
dE9iamVjCiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5k
KSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheWVkRmlsZW5hbWUgPSBmaWxlVGV4dFZh
bHVlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
ICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgZGlzcGxh
eWVkRmlsZW5hbWUsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24sIFJl
c3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwogICAgICAgICB0ZXh0
UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlSW50CiAgICAgLy8gKHVzaW5nICIwIiBhcyB0
aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgIGNvbnN0IFVDaGFyIGNoYXJhY3RlciA9ICcwJzsK
ICAgICBjb25zdCBTdHJpbmcgY2hhcmFjdGVyQXNTdHJpbmcgPSBTdHJpbmcoJmNoYXJhY3Rlciwg
MSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcgY29uc3RydWN0VGV4
dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KICAgICBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbCogcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250cm9sKj4odGhp
cyk7CiAgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0V2lkdGhOdW1DaGFy
cyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgY2hhcmFjdGVy
QXNTdHJpbmcsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pKTsKQEAg
LTI3MSw5ICsyNzEsOSBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVUZXh0
CiAgICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLmZpbGVzKCkpOwogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBpZiAoaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50KCkuZGlzcGxheVN0
cmluZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udCgpLCBTdHJpbmdUcnVuY2F0
b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodFRydW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwgbWF4RmlsZW5h
bWVXaWR0aCgpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxl
Um91bmRpbmdIYWNrcyk7CiAjZW5kaWYKLSAgICByZXR1cm4gdGhlbWUoKS5maWxlTGlzdE5hbWVG
b3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHlsZSgpLmZvbnQoKSwgbWF4RmlsZW5h
bWVXaWR0aCgpLCBpbnB1dEVsZW1lbnQoKS5tdWx0aXBsZSgpKTsKKyAgICByZXR1cm4gdGhlbWUo
KS5maWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHlsZSgpLmZv
bnRDYXNjYWRlKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCkubXVsdGlwbGUo
KSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDcgKzc5LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBSZW5kZXJGbG93VGhyZWFk
OjpjcmVhdAogICAgIG5ld1N0eWxlLmdldCgpLnNldFRvcChMZW5ndGgoMCwgRml4ZWQpKTsKICAg
ICBuZXdTdHlsZS5nZXQoKS5zZXRXaWR0aChMZW5ndGgoMTAwLCBQZXJjZW50KSk7CiAgICAgbmV3
U3R5bGUuZ2V0KCkuc2V0SGVpZ2h0KExlbmd0aCgxMDAsIFBlcmNlbnQpKTsKLSAgICBuZXdTdHls
ZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIG5ld1N0eWxlLmdldCgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKG51bGxwdHIpOwogICAgIHJldHVybiBuZXdTdHlsZTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkocmV2aXNpb24g
MTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBSZWY8UmVuZGVyU3R5bGU+
IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0WkluZGV4KElO
VF9NQVgpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEZvbnREZXNjcmlwdGlvbihG
b250RGVzY3JpcHRpb24oKSk7Ci0gICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnQoKS51cGRh
dGUoMCk7CisgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKG51
bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3BsYXkoRkxFWCk7CiAg
ICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEp1c3RpZnlDb250ZW50KEp1c3RpZnlDZW50ZXIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lv
biAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0
aWVzLmgiCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6c2V0SW1hZ2VTaXpl
Rm9yQWx0VGV4dAogCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0
IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAg
ICAgSW50U2l6ZSBwYWRkZWRUZXh0U2l6ZShwYWRkaW5nV2lkdGggKyBzdGQ6Om1pbihjZWlsZihm
b250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fYWx0
VGV4dCwgc3R5bGUoKSkpKSwgbWF4QWx0VGV4dFdpZHRoKSwgcGFkZGluZ0hlaWdodCArIHN0ZDo6
bWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhlaWdodCkpOwogICAg
ICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemUuZXhwYW5kZWRUbyhwYWRkZWRUZXh0U2l6ZSk7CiAg
ICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQo
UGFpbnRJbmYKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5nTW9kaWZpZWRC
eUVuY29kaW5nKG1fYWx0VGV4dCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENv
bG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHls
ZSgpLmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwogICAgICAgICAgICAgICAgIExh
eW91dFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE2LDcgKzIxNiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW4K
ICAgICAgICAgfHwgKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRTdHlsZS0+dmVydGljYWxB
bGlnbigpICE9IEJBU0VMSU5FKQogICAgICAgICB8fCBzdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSAh
PSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgpLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0
RW1waGFzaXNNYXJrTm9uZQotICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAoIXBhcmVudFN0eWxl
LT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdh
cChzdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICB8fCAoY2hlY2tGb250cyAm
JiAoIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2Fs
QXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNz
KCkpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5bGUoKS5saW5l
SGVpZ2h0KCkpKQogICAgICAgICB8fCAoZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpKTsgLy8gRklYTUU6IEVuYWJsZSB0aGUgb3B0aW1pemF0aW9uIG9u
Y2Ugd2UgbWFrZSBvdmVyZmxvdyBjb21wdXRhdGlvbiBmb3IgY3VsbGVkIGlubGluZXMgaW4gcmVn
aW9ucy4KIApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdh
eXNDcmVhdGVMaW4KICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHls
ZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5
bGUoKTsKICAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExpbmVTdHlsZSgp
OwotICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5bGUtPmZvbnQoKS5m
b250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5
bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9
ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFz
Y2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJ
TkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHls
ZS5saW5lSGVpZ2h0KCk7CiAgICAgfQpAQCAtNTc0LDggKzU3NCw4IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgIGlmIChyZW5kZXJCb3guaW5s
aW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYg
cm9vdEJveCA9IHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKICAgICAgICAg
ICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmly
c3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxl
KCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3Ao
KSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0g
Y29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94
LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250
YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5h
ZGRSZWN0KEZsb2F0UmVjdChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT54KCkgLSByZW5k
ZXJCb3gubWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCByZW5kZXJCb3gud2lkdGgoKSArIHJlbmRl
ckJveC5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAg
ICAgICAgICBlbHNlCkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVy
YXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hp
bGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGlu
ZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBSb290SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNG
aXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5
bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAg
ICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsg
KHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgp
IC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJTdHlsZS5m
b250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0
KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLApAQCAtNjEw
LDggKzYxMCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAg
ICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQuZmlyc3RU
ZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5uZXh0VGV4dEJveCgp
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGNoaWxk
VGV4dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWlu
ZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5
bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRv
cCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxl
KCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUu
Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJp
Y3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBs
b2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBj
b3VsZCB1c2UgYSBoZWxwZXIgdG8gc2hhcmUgdGhlc2Ugd2l0aCB0ZXh0IHBhdGguCiAgICAgICAg
ICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGlubGluZUJveC0+cm9vdCgp
OwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJv
b3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRh
aW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gu
bG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7
CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSAr
IChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7
CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJTdHlsZS5mb250
TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QoaW5saW5lQm94LT54
KCksIGxvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJl
dmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tp
XTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwotICAgICAgICAgICAgRm9udCBpdGVtRm9udCA9
IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgRm9udENhc2NhZGUgaXRlbUZvbnQgPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAg
ICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkpIHsKICAg
ICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1l
bnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQg
PSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNldFdlaWdo
dChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwg
aXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAg
ICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250LmxldHRlclNwYWNp
bmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICAgICAgaXRlbUZvbnQu
dXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsK
ICAgICAgICAgICAgIH0KIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRTaXplIGl0ZW1P
ZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRlbVN0eWxl
LCBGb250IGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3RhdGljIExheW91
dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJlbmRlclN0eWxl
KiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5n
Qm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0eWxlLT50ZXh0
QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3QgSlVTVElGWS4g
U2hvdWxkIHdlPwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWlu
dEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IodGV4
dENvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihpdGVtVGV4dCwgMCwg
MCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgaXRlbVN0eWxlLT5kaXJlY3Rpb24o
KSwgaXNPdmVycmlkZShpdGVtU3R5bGUtPnVuaWNvZGVCaWRpKCkpLCB0cnVlLCBUZXh0UnVuOjpO
b1JvdW5kaW5nKTsKLSAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgRm9u
dENhc2NhZGUgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgTGF5b3V0UmVj
dCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4KTsKICAgICBy
Lm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVuLCBpdGVtU3R5bGUsIGl0ZW1Gb250
LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVu
dCkpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAgICAgIGl0
ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRT
cGFjaW5nKCkpOworICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250Lmxl
dHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgIGl0ZW1Gb250
LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgpAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2Vy
OjpwYWludChQYWludEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFJ1
biB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90
ZXh0LCBzdHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqY29udGV4dCwgZmFsc2UpOwpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGggPSAwOwogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLmxpc3RTdHlsZVR5
cGUoKTsKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0
UmVsYXRpdmVNYXIKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBBc3Rlcmlza3M6
CiAgICAgICAgIGNhc2UgRm9vdG5vdGVzOiB7Ci0gICAgICAgICAgICBjb25zdCBGb250JiBmb250
ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVy
QmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHlsZSgpLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFu
c2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICByZWxhdGl2ZVJlY3QgPSBJ
bnRSZWN0KDAsIDAsIGZvbnQud2lkdGgocnVuKSwgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgp
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1MSw3ICsxODUxLDcgQEAgSW50UmVjdCBSZW5k
ZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICBjYXNlIFVyZHU6CiAgICAgICAg
ICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAg
ICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7
CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFu
c2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRUZXh0UnVuRmxh
Z3MpOwogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgocnVuKTsKICAgICAg
ICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1f
bGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNyAr
MTk2LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bAogICAgIGlm
IChtX2lubmVyQmxvY2spIC8vIFJlbmRlckJsb2NrIGhhbmRsZWQgdXBkYXRpbmcgdGhlIGFub255
bW91cyBibG9jaydzIHN0eWxlLgogICAgICAgICBhZGp1c3RJbm5lclN0eWxlKCk7CiAKLSAgICBi
b29sIGZvbnRDaGFuZ2VkID0gIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5mb250KCkgIT0gc3R5bGUo
KS5mb250KCk7CisgICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8fCBvbGRTdHlsZS0+
Zm9udENhc2NhZGUoKSAhPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKGZvbnRDaGFu
Z2VkKSB7CiAgICAgICAgIHVwZGF0ZU9wdGlvbnNXaWR0aCgpOwogICAgICAgICBtX25lZWRzT3B0
aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CkBAIC0yMjIsMTMgKzIyMiwxMyBAQCB2b2lkIFJlbmRl
ck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgICAgICBpZiAoUmVuZGVyU3R5
bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAg
ICAgIG9wdGlvbldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4
dEluZGVudCgpLCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAg
ICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFn
cyk7CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gZm9udC53aWR0aChydW4pOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGggPSBzdGQ6Om1heChtYXhPcHRp
b25XaWR0aCwgb3B0aW9uV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKCF0ZXh0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAg
ICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7
CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNp
b24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZsYWdz
KTsKICAgICAgICAgICAgIG1heE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0aW9uV2lkdGgs
IGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIH0KQEAgLTUyMyw3ICs1MjMsNyBAQCBQb3B1cE1l
bnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgZ2V0SXRlbUJhY2tncm91bmRD
b2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXNDdXN0b21CYWNrZ3Jv
dW5kQ29sb3IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5
bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7
Ci0gICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwgc3R5bGUtPmZv
bnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBzdHlsZSA/
IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250Q2FzY2FkZSgpLCBzdHlsZS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9O
RSwgdHJ1ZSwgc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlvbigpLCBpc092ZXJy
aWRlKHN0eWxlLT51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJhY2tncm91
bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQb3B1cE1l
bnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcikgOiBtZW51U3R5bGUoKTsKIH0KQEAgLTU2
NCw3ICs1NjQsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVudVN0eWxlCiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBtX2lubmVyQmxvY2sgPyBtX2lubmVy
QmxvY2stPnN0eWxlKCkgOiBzdHlsZSgpOwogICAgIEludFJlY3QgYWJzQm91bmRzID0gYWJzb2x1
dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICByZXR1cm4gUG9wdXBN
ZW51U3R5bGUoc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSwKLSAgICAgICAgc3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9Vc2UudmlzaWJpbGl0
eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsCisgICAgICAgIHN0
eWxlVG9Vc2UuZm9udENhc2NhZGUoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5KCkgPT0gVklTSUJM
RSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwKICAgICAgICAgc3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkgJiYgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0LCBzdHlsZVRv
VXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5kaXJlY3Rpb24oKSwgaXNPdmVycmlk
ZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91
bmRDb2xvciwKICAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0aGVtZSgpLnBv
cHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1NCw4ICsyNTQsOCBAQCB2b2lkIFJlbmRlclJ1YnlSdW46OmxheW91dCgpCiAgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcnQtPnN0eWxlKCkucnVieVBvc2l0aW9uKCkgPT0g
UnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIpIHsKICAgICAgICAgLy8gQm9wb21vZm8uIFdlIG5l
ZWQgdG8gbW92ZSB0aGUgUmVuZGVyUnVieVRleHQgb3ZlciB0byB0aGUgcmlnaHQgc2lkZSBhbmQg
Y2VudGVyIGl0CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgcmVsYXRpdmUgdG8gdGhlIGJhc2UuCi0g
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKLSAgICAgICAgZmxvYXQg
ZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250LmxldHRlclNwYWNpbmcoKSwgMi4wZiAqIHJ0
LT5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpKTsKKyAgICAgICAgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CisgICAgICAgIGZsb2F0
IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9udC5sZXR0ZXJTcGFjaW5nKCksIDIuMGYgKiBy
dC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpOwogICAgICAg
ICBzZXRXaWR0aCh3aWR0aCgpICsgZGlzdGFuY2VCZXR3ZWVuQmFzZSAtIGZvbnQubGV0dGVyU3Bh
Y2luZygpKTsKICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiByYiA9IHJ1YnlCYXNlKCkpIHsK
ICAgICAgICAgICAgIExheW91dFVuaXQgZmlyc3RMaW5lVG9wID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAkocmV2aXNpb24gMTc4
NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlclNl
YXJjaEZpZWxkOjppdGVtU3QKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNoRmllbGQ6Om1l
bnVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlKCkudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCkuZm9udCgpLCBz
dHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBQb3B1cE1lbnVTdHls
ZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUo
KS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHls
ZSgpLmZvbnRDYXNjYWRlKCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAg
ICAgIHN0eWxlKCkuZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlKCkudGV4dEluZGVudCgp
LCBzdHlsZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSks
IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyOSw4ICsyMjksOCBAQCBib29sIFJlbmRlclRleHQ6OmlzVGV4dEZyYWdtZW50KCkgY29uc3QK
IGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QK
IHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udCgpLmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgIGlmIChzdHlsZS5mb250KCkudXNlQmFja3NsYXNoQXNZZW5TeW1i
b2woKSkKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
LmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKHN0eWxlLmZvbnRDYXNj
YWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIG1fdXNlQmFja3NsYXNo
QXNZZW5TeW1ib2wgPSBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKTsKICAgICAgICAg
bmVlZHNSZXNldFRleHQgPSBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAgIH0gZWxzZSBp
ZiAob2xkU3R5bGUtPmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9IG5ld1N0eWxl
LmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKSB7CisgICAgfSBlbHNlIGlmIChvbGRT
dHlsZS0+Zm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9IG5ld1N0eWxl
LmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkgewogICAgICAgICBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCk7
CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC00NTEsNyArNDUxLDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAgIHJldHVybiBi
b3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZy
b21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAorQUxXQVlT
X0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2Fk
ZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4
dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CiAgICAgICAgIGNv
bnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJlbmRlckNvbWJp
bmVUZXh0PigqdGhpcyk7CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmlt
bWVkUHJlZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0cmluZ0ltcGwm
IHRleHQgPSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcgfHwgKHRleHRb
MF0gPT0gJ1xuJyAmJiAhc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHx8IHRleHRbMF0gPT0gJ1x0
JykgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOyAvLyBGSVhNRTog
VGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5l
LgogICAgICAgICBpZiAoc3RyaXBGcm9udFNwYWNlcykgewogICAgICAgICAgICAgY29uc3QgVUNo
YXIgc3BhY2UgPSAnICc7CiAgICAgICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC53aWR0
aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmc3BhY2UsIDEsIHN0
eWxlKSk7CkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldp
ZHRocyhmbG9hdAogCiAgICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRocyBieSBzY2FubmluZyB0
aGUgc3RyaW5nIGZvciBuZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWspIHsKLSAgICAgICAgY29u
c3QgRm9udCYgZiA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1s
aW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZiA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7
IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgYm9vbCBmaXJzdExp
bmUgPSB0cnVlOwogICAgICAgICBiZWdpbk1heFcgPSBtYXhXOwogICAgICAgICBlbmRNYXhXID0g
bWF4VzsKQEAgLTYzNywxMyArNjM3LDEzIEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNr
Rm9udHMgPSB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldpZHRoKFJlbmRl
clRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQorc3RhdGljIGlubGluZSBmbG9hdCBo
eXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQp
CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAg
ICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVy
ZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSkpOwogfQogCi1z
dGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5nVmlldyB3b3Jk
LCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExlbmd0aCwg
aW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0IG1heFdv
cmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBtaW5p
bXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZp
eFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAgc3VmZml4U3RhcnQgPSAwOwogICAg
IGlmICh3b3JkLmxlbmd0aCgpIDw9IG1pbmltdW1TdWZmaXhMZW5ndGgpCkBAIC03MDEsNyArNzAx
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgIG1faGFz
RW5kV1MgPSBmYWxzZTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0
eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRo
aXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5
bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgogICAg
IGZsb2F0IHdvcmRTcGFjaW5nID0gZm9udC53b3JkU3BhY2luZygpOwogICAgIGludCBsZW4gPSB0
ZXh0TGVuZ3RoKCk7CiAgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRlcmF0b3IobV90
ZXh0LCBzdHlsZS5sb2NhbGUoKSwgbWFwTGluZUJyZWFrVG9JdGVyYXRvck1vZGUoc3R5bGUubGlu
ZUJyZWFrKCkpKTsKQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAgZmxvYXQgUmVuZGVyVGV4dDo6d2lk
dGgodW5zaWduZWQgZnJvbSwgdQogICAgICAgICBsZW4gPSB0ZXh0TGVuZ3RoKCkgLSBmcm9tOwog
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IGZpcnN0TGluZSA/IGZpcnN0TGlu
ZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHls
ZS5mb250KCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworICAgIHJldHVy
biB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4UG9zLCBmYWxsYmFj
a0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmLCBmbG9hdCB4UG9zLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdCB4UG9zLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBsZW4gPD0gdGV4dExl
bmd0aCgpKTsKICAgICBpZiAoIXRleHRMZW5ndGgoKSkKQEAgLTEyMjYsNyArMTIyNiw3IEBAIGZs
b2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKIAogICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgZmxvYXQgdzsKLSAgICBpZiAoJmYg
PT0gJnN0eWxlLmZvbnQoKSkgeworICAgIGlmICgmZiA9PSAmc3R5bGUuZm9udENhc2NhZGUoKSkg
ewogICAgICAgICBpZiAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSgpICYmICFmcm9tICYmIGxlbiA9
PSB0ZXh0TGVuZ3RoKCkgJiYgKCFnbHlwaE92ZXJmbG93IHx8ICFnbHlwaE92ZXJmbG93LT5jb21w
dXRlQm91bmRzKSkgewogICAgICAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoZ2x5cGhPdmVyZmxvdyk7CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBib29s
IFJlbmRlclRleHQ6OmNvbXB1dGVDYW5Vc2VTaW1wbGVGb250CiB7CiAgICAgaWYgKGlzQWxsQVND
SUkoKSB8fCBtX3RleHQuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSkg
PT0gRm9udDo6U2ltcGxlOworICAgIHJldHVybiBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VD
b2RlUGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnRDYXNjYWRlOjpTaW1wbGU7
CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6bW9tZW50YXJpbHlSZXZlYWxMYXN0VHlwZWRDaGFyYWN0
ZXIodW5zaWduZWQgb2Zmc2V0QWZ0ZXJMYXN0VHlwZWRDaGFyYWN0ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5
LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBv
ZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gmKTsKIAot
ICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25z
dCBGb250JiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZs
b2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUm
LCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgd2lk
dGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGlu
ZSA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMg
PSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogCiAgICAgZmxvYXQgbWluTG9naWNhbFdp
ZHRoKCkgY29uc3Q7CkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSBv
dmVycmlkZSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIAog
ICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBs
ZW4pIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmLCBpbnQgc3Rh
cnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQs
IGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAg
ICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJOyB9CiAgICAg
Ym9vbCBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdDsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lv
biAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sOjpoaXRJbm5lclRleHRFbGVtCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZl
cmFnZUNoYXJXaWR0aCgpCiB7CiAgICAgZmxvYXQgd2lkdGg7Ci0gICAgaWYgKHN0eWxlKCkuZm9u
dCgpLmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQorICAgIGlmIChzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZSh3aWR0aCkp
CiAgICAgICAgIHJldHVybiB3aWR0aDsKIAogICAgIGNvbnN0IFVDaGFyIGNoID0gJzAnOwogICAg
IGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKLSAgICBjb25zdCBGb250JiBmb250
ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bih0
aGlzLCBmb250LCBzdHIsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24p
OwogICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICByZXR1cm4gZm9udC53
aWR0aCh0ZXh0UnVuKTsKQEAgLTE4OSw3ICsxODksNyBAQCBmbG9hdCBSZW5kZXJUZXh0Q29udHJv
bDo6c2NhbGVFbVRvVW5pdHMoCiB7CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSB1bml0c1BlckVt
IHZhbHVlIGZvciBNUyBTaGVsbCBEbGcgYW5kIENvdXJpZXIgTmV3IGZyb20gdGhlICJoZWFkIiBm
b250IHRhYmxlLgogICAgIGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOwotICAgIHJldHVybiBy
b3VuZGYoc3R5bGUoKS5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOworICAgIHJldHVy
biByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAqIHggLyB1bml0c1BlckVtKTsK
IH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0
aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lk
dGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmU6OmdldEF2ZQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9u
dCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIENvdXJpZXIgTmV3
LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3ggYW5kIFNhZmFy
aSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGluIHRoZSBPUy8y
IHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KLSAgICBpZiAoc3R5bGUoKS5mb250KCkuZmlyc3RGYW1p
bHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5m
aXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJuIHNjYWxlRW1U
b1VuaXRzKDEyMjkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAx
Nzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIGZsb2F0IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXYKICAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRo
ZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAog
ICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMg
ZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVl
IGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKHN0eWxlKCkuZm9u
dCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAgIGlmIChzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAgIHJl
dHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwogI2VuZGlmCiAKQEAgLTMzOCwxNSArMzM4LDE1IEBA
IExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjoKICAgICBmbG9hdCBtYXhD
aGFyV2lkdGggPSAwLmY7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5maXJzdEZhbWlseSgp
OwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2Fu
dCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRl
ZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCiAgICAg
Ly8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNv
ZGluZyBzcGVjaWZpYykuCiAgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4TWluKSB2YWx1ZSBp
biB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KICAgICBpZiAoZmFtaWx5
ID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5p
dHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoc3R5bGUoKS5mb250KCkuaGFzVmFsaWRBdmVyYWdlQ2hh
cldpZHRoKCkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CisgICAgZWxzZSBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQorICAgICAgICBtYXhDaGFy
V2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1h
eENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5wdXRzLCBJRSBhZGRz
IHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgY2FzZSBCdXR0b25QYXJ0OiB7
CiAgICAgICAgIC8vIEJvcmRlcgogICAgICAgICBMZW5ndGhCb3ggYm9yZGVyQm94KHN0eWxlLmJv
cmRlclRvcFdpZHRoKCksIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUuYm9yZGVyQm90
dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICBib3JkZXJCb3gg
PSBtX3RoZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnQoKSwgYm9yZGVyQm94LCBz
dHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBib3JkZXJCb3ggPSBtX3RoZW1lLT5jb250
cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIGJvcmRlckJveCwgc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1ZSgpICE9IHN0
YXRpY19jYXN0PGludD4oc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSkpIHsKICAgICAgICAgICAgIGlm
IChib3JkZXJCb3gudG9wKCkudmFsdWUoKSkKICAgICAgICAgICAgICAgICBzdHlsZS5zZXRCb3Jk
ZXJUb3BXaWR0aChib3JkZXJCb3gudG9wKCkudmFsdWUoKSk7CkBAIC0xNDMsNyArMTQzLDcgQEAg
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICB9CiAKICAg
ICAgICAgLy8gUGFkZGluZwotICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCA9IG1fdGhlbWUt
PmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUucGFkZGluZ0JveCgpLCBz
dHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCA9IG1f
dGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLnBh
ZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhZGRpbmdC
b3ggIT0gc3R5bGUucGFkZGluZ0JveCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0UGFkZGluZ0Jv
eChwYWRkaW5nQm94KTsKIApAQCAtMTU0LDI1ICsxNTQsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICAvLyBXaWR0aCAvIEhlaWdodAogICAgICAg
ICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBoZXJlIGFyZSBhZmZlY3RlZCBieSB0aGUgem9vbS4K
ICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtl
IG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgotICAgICAgICBMZW5ndGhTaXplIGNv
bnRyb2xTaXplID0gbV90aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udCgpLCBMZW5n
dGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZmZWN0aXZlWm9v
bSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xT
aXplKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIExlbmd0aFNpemUoc3R5bGUud2lkdGgoKSwg
c3R5bGUuaGVpZ2h0KCkpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpZiAoY29u
dHJvbFNpemUud2lkdGgoKSAhPSBzdHlsZS53aWR0aCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0
V2lkdGgoY29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChjb250cm9sU2l6ZS5oZWln
aHQoKSAhPSBzdHlsZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxlLnNldEhlaWdodChjb250
cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIE1pbi1XaWR0
aCAvIE1pbi1IZWlnaHQKLSAgICAgICAgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6ZSA9IG1fdGhl
bWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUgPSBtX3RoZW1lLT5t
aW5pbXVtQ29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUuZWZmZWN0
aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLndpZHRoKCkgIT0gc3R5bGUu
bWluV2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldE1pbldpZHRoKG1pbkNvbnRyb2xTaXpl
LndpZHRoKCkpOwogICAgICAgICBpZiAobWluQ29udHJvbFNpemUuaGVpZ2h0KCkgIT0gc3R5bGUu
bWluSGVpZ2h0KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQobWluQ29udHJvbFNp
emUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBGb250Ci0gICAgICAg
IEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRyb2xGb250KHBhcnQs
IHN0eWxlLmZvbnQoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAgICAgaWYgKGNvbnRy
b2xGb250ICE9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKSkgeworICAgICAgICBGb250
RGVzY3JpcHRpb24gY29udHJvbEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0LCBzdHls
ZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBpZiAoY29u
dHJvbEZvbnQgIT0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24oKSkgewogICAg
ICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgZm9udC4KICAgICAgICAgICAgIGlmIChzdHlsZS5z
ZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQotICAgICAgICAgICAgICAgIHN0eWxlLmZv
bnQoKS51cGRhdGUoMCk7CisgICAgICAgICAgICAgICAgc3R5bGUuZm9udENhc2NhZGUoKS51cGRh
dGUoMCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgb3VyIGxpbmUtaGVpZ2h0CiAgICAg
ICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdERlZmF1
bHRMYWJlbAogICAgIHJldHVybiBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwogfQog
Ci1TdHJpbmcgUmVuZGVyVGhlbWU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0
KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmls
ZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdE5hbWVGb3JXaWR0
aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQg
d2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHdpZHRo
IDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3REZWZhdWx0
TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250JiwgaW50
IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnRDYXNj
YWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKIAogICAg
IGVudW0gRmlsZVVwbG9hZERlY29yYXRpb25zIHsgU2luZ2xlRmlsZSwgTXVsdGlwbGVGaWxlcyB9
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiAvKmlucHV0UmVuZGVyZXIqLywgY29uc3QgUmVuZGVyT2JqZWN0JiAvKmJ1
dHRvblJlbmRlcmVyKi8sIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJY29uKiwg
RmlsZVVwbG9hZERlY29yYXRpb25zKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzg0NTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM0LDggKzM0LDggQEAKICNpbXBvcnQgIkRhdGVDb21wb25lbnRzLmgiCiAjaW1wb3J0ICJE
b2N1bWVudC5oIgogI2ltcG9ydCAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2ltcG9ydCAiRm9udC5o
IgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9y
dCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiR3JhZGllbnQuaCIK
QEAgLTU0NSw3ICs1NDUsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTZWxlY3RMaXN0QnV0dG9uU3R5
bGUoCiAgICAgCiBjbGFzcyBSZW5kZXJUaGVtZU1lYXN1cmVUZXh0Q2xpZW50IDogcHVibGljIE1l
YXN1cmVUZXh0Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZU1lYXN1cmVUZXh0Q2xp
ZW50KGNvbnN0IEZvbnQmIGZvbnQsIFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCisgICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudChjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAgICAgLCBtX3Jl
bmRlck9iamVjdChyZW5kZXJPYmplY3QpCiAgICAgICAgICwgbV9zdHlsZShzdHlsZSkKQEAgLTU1
Nyw3ICs1NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2ZvbnQud2lkdGgocnVuKTsK
ICAgICB9CiBwcml2YXRlOgotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250
Q2FzY2FkZSYgbV9mb250OwogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJPYmplY3Q7CiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CiB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHN0YXRp
YyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRW5mb3JjZSB0aGUgd2lkdGggYW5kIHNldCB0aGUgYm94LXNpemluZyB0byBjb250ZW50
LWJveCB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcGFkZGluZy4KLSAgICBGb250IGZvbnQgPSBz
dHlsZS5mb250KCk7CisgICAgRm9udENhc2NhZGUgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7
CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0RWxlbWVudC5yZW5kZXJl
cigpOwogICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpICYmICFyZW5k
ZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCShy
ZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVM
aXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgo
Y29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0aCwgYm9vbCBtdWx0
aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJlY3QgY29udmVy
dFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBj
b25zdCBJbnRSZWN0JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODE3LDcgKzgxNyw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFMKICAgICBzdHlsZS5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAogICAgIGlm
IChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgc3R5
bGUuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUo
MCk7CiB9CiAKIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yU3lz
dGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CkBAIC0xOTk3LDcgKzE5OTcsNyBAQCBO
U1RleHRGaWVsZENlbGwqIFJlbmRlclRoZW1lTWFjOjp0ZXh0RmllCiAgICAgcmV0dXJuIG1fdGV4
dEZpZWxkLmdldCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdp
ZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1l
TWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQp
IGNvbnN0CiB7CiAgICAgaWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlz
aW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6
YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBib3hMaW5lU3R5
bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250cyAmJiAhdXNlZEZvbnRzLT5p
c0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGluZUhlaWdodCgpLmlz
TmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAgICAgIHVzZWRGb250cy0+YXBw
ZW5kKCZib3hMaW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpKTsKKyAgICAgICAgdXNl
ZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9udHMtPnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSB1c2Vk
Rm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAgICAgICAgaW50IHVzZWRGb250QXNj
ZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSgpKTsKQEAgLTEwMTcsNyArMTAx
Nyw3IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6dmVydGljYWxQb3NpdGkKICAgICAKICAg
ICBpZiAodmVydGljYWxBbGlnbiAhPSBCQVNFTElORSkgewogICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgcGFyZW50TGluZVN0eWxlID0gZmlyc3RMaW5lID8gcGFyZW50LT5maXJzdExpbmVTdHls
ZSgpIDogcGFyZW50LT5zdHlsZSgpOwotICAgICAgICBjb25zdCBGb250JiBmb250ID0gcGFyZW50
TGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBwYXJl
bnRMaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZv
bnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgICAgICBpbnQgZm9udFNpemUgPSBm
b250LnBpeGVsU2l6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCwxNyAr
MTg0LDE3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8g
V2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkgb24gdGhl
IHByaW1hcnkgZm9udC4KLSAgICBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAocHJpbWFyeUZvbnREYXRhLmlz
TG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiB0
ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkgewogICAgICAg
ICBpZiAodGV4dFJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSB8fCB0ZXh0UmVuZGVyZXIuaXNDb3Vu
dGVyKCkgfHwgdGV4dFJlbmRlcmVyLmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVyZXIuaXNUZXh0RnJh
Z21lbnQoKQogICAgICAgICAgICAgfHwgdGV4dFJlbmRlcmVyLmlzU1ZHSW5saW5lVGV4dCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3R5bGUuZm9udCgpLmNvZGVQ
YXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnQ6OlNpbXBsZSkKKyAgICAg
ICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIu
dGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnRE
YXRhKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAJ
KHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAKIEZsb3dD
b250ZW50czo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAgICA6IGZv
bnQoc3R5bGUuZm9udCgpKQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgpKQogICAgICwg
dGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigpKQogICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0
eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQogICAgICwgcHJlc2VydmVOZXdsaW5lKHN0eWxlLnBy
ZXNlcnZlTmV3bGluZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCShyZXZpc2lvbiAxNzg0NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHNfaAogI2RlZmluZSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzX2gK
IAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJicmVha19saW5lcy5oIgpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IFN0
eWxlIHsKICAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKIAotICAg
ICAgICBjb25zdCBGb250JiBmb250OworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udDsK
ICAgICAgICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0
ZXNwYWNlOwogICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJ
KHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lk
IHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgYm9vbCBkZWJ1Z0JvcmRl
cnNFbmFibGVkID0gZmxvdy5mcmFtZSgpLnNldHRpbmdzKCkuc2ltcGxlTGluZUxheW91dERlYnVn
Qm9yZGVyc0VuYWJsZWQoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9ICpwYWlu
dEluZm8uY29udGV4dDsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBUZXh0
UGFpbnRTdHlsZSB0ZXh0UGFpbnRTdHlsZSA9IGNvbXB1dGVUZXh0UGFpbnRTdHlsZShmbG93LmZy
YW1lKCksIHN0eWxlLCBwYWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDApOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFJlc29sdmVyLmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw4
ICsxMjAsOCBAQCBSdW5SZXNvbHZlcjo6UnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvCiAgICAg
LCBtX2xpbmVIZWlnaHQobGluZUhlaWdodEZyb21GbG93KGZsb3cpKQogICAgICwgbV9iYXNlbGlu
ZShiYXNlbGluZUZyb21GbG93KGZsb3cpKQogICAgICwgbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3Jl
KGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKQotICAgICwgbV9hc2NlbnQoZmxvdy5zdHls
ZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9kZXNjZW50KGZsb3cu
c3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCisgICAgLCBtX2FzY2VudChm
bG93LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQorICAgICwg
bV9kZXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2Vu
dCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXpp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b1NpemluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCBib29s
IFRleHRBdXRvU2l6aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVyYWdlU2l6ZSk7CiAg
ICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0g
ICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQo
KS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgc3R5
bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3Vy
ZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB0ZXh0LT5wYXJl
bnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gdGV4dC0+cGFyZW50KCk7
CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3ROb2Rl
U2l6ZQogICAgICAgICAgICAgaWYgKGxpc3RNYXJrZXJSZW5kZXJlci0+aXNMaXN0TWFya2VyKCkp
IHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gY2xvbmVSZW5k
ZXJTdHlsZVdpdGhTdGF0ZShsaXN0TWFya2VyUmVuZGVyZXItPnN0eWxlKCkpOwogICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAg
ICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQo
KS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgICAg
IHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5l
bnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgICAgIGRv
d25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KCpsaXN0TWFya2VyUmVuZGVyZXIpLnNldFN0eWxlKHN0
eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0x
OTYsNyArMTk2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3ROb2RlU2l6ZQog
ICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0aChsaW5l
SGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRTcGVj
aWZpZWRMaW5lSGVpZ2h0KGxpbmVIZWlnaHRMZW5ndGgpOwogICAgICAgICAgICAgICAgIG5ld1Bh
cmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAg
ICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9j
dW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAg
ICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQYXJlbnRTdHlsZS5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIwLDcgKzIyMCw3
IEBAIHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShvcmlnaW5hbFNpemUpOwogICAgICAgICAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUodGV4dC0+
c3R5bGUoKSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1
bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAg
ICB0ZXh0LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgLy8gUmVzZXQgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBwYXJlbnQuCkBA
IC0yMzcsNyArMjM3LDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpyZXNldCgpCiAgICAg
ICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1BhcmVudFN0eWxlID0gY2xvbmVSZW5kZXJT
dHlsZVdpdGhTdGF0ZShwYXJlbnRTdHlsZSk7CiAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+
c2V0TGluZUhlaWdodChvcmlnaW5hbExpbmVIZWlnaHQpOwogICAgICAgICAgICAgbmV3UGFyZW50
U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAg
bmV3UGFyZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCku
ZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIG5ld1Bh
cmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQo
KS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgcGFy
ZW50UmVuZGVyZXItPnNldFN0eWxlKG5ld1BhcmVudFN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotVGV4dFBhaW50ZXI6OlRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRl
eHRTZXBhcmF0ZWx5LCBjb25zdCBGb250JiBmb250LAorVGV4dFBhaW50ZXI6OlRleHRQYWludGVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJv
b2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwK
ICAgICBpbnQgc3RhcnRQb3NpdGlvbkluVGV4dFJ1biwgaW50IGVuZFBvc2l0aW9uSW5UZXh0Qm94
U3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgUmVu
ZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCwgVGV4dFJ1biYgdGV4dFJ1biwKICAgICBGbG9h
dFJlY3QmIGJveFJlY3QsIEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBlbXBoYXNpc01hcmtP
ZmZzZXQsIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIHNl
bGVjdGlvblNoYWRvdywKICAgICBib29sIHRleHRCb3hJc0hvcml6b250YWwsIFRleHRQYWludFN0
eWxlJiB0ZXh0UGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50U3R5bGUp
CkBAIC01Niw3ICs1Niw3IEBAIFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRl
eHQKIHsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKK3N0YXRpYyB2b2lkIGRyYXdUZXh0
T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1w
aGFzaXNNYXJrLAogICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IHRvKQogewogICAgIGlmIChlbXBoYXNp
c01hcmsuaXNFbXB0eSgpKQpAQCAtMTEzLDcgKzExMyw3IEBAIFNoYWRvd0FwcGxpZXI6On5TaGFk
b3dBcHBsaWVyKCkKICAgICAgICAgbV9jb250ZXh0LmNsZWFyU2hhZG93KCk7CiB9CiAKLXN0YXRp
YyB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5n
JiBlbXBoYXNpc01hcmssCitzdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVu
JiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKICAgICBpbnQgZW1w
aGFzaXNNYXJrT2Zmc2V0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludCB0cnVu
Y2F0aW9uUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVj
dCYgYm94UmVjdCwKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwg
Ym9vbCBob3Jpem9udGFsKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQ
YWludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyBpbmxpbmUg
QWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKIAogY2xhc3MgVGV4dFBhaW50ZXIgewogcHVibGlj
OgotICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgcGFpbnRTZWxlY3RlZFRl
eHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udCYsCisg
ICAgVGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250Q2FzY2FkZSYs
CiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRleHRSdW4sIGludCBlbmRQb3NpdGlvbkluVGV4dEJv
eFN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIFJl
bmRlckNvbWJpbmVUZXh0KiwKICAgICBUZXh0UnVuJiwgRmxvYXRSZWN0JiBib3hSZWN0LCBGbG9h
dFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBTaGFkb3dE
YXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFkb3csCiAgICAg
Ym9vbCB0ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgbm9uU2VsZWN0aW9uUGFp
bnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50U3R5bGUpOwpAQCAtNjEsNyAr
NjEsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNoYWRvd0RhdGEqIG1fc2VsZWN0aW9uU2hhZG93
OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dE9ubHk7CiAgICAgYm9vbCBtX3BhaW50U2Vs
ZWN0ZWRUZXh0U2VwYXJhdGVseTsKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3Qg
Rm9udENhc2NhZGUmIG1fZm9udDsKICAgICBpbnQgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVuOwog
ICAgIGludCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuOwogICAgIGludCBtX2xlbmd0aDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2lu
Z0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDg2LDEzICs0ODYsMTMgQEAgaW5saW5lIHZvaWQgdXBkYXRlQ291bnRlcklm
TmVlZGVkKFJlbmRlcgogICAgIGRvd25jYXN0PFJlbmRlckNvdW50ZXI+KHJlbmRlclRleHQpLnVw
ZGF0ZUNvdW50ZXIoKTsKIH0KIAotaW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5k
ZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udCYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVu
V2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQogewogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIHJldHVybiBm
b250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBz
dHlsZS5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpLCBmYWxsYmFja0ZvbnRzKTsKIH0K
IAotQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmb250LCBmbG9hdCB4UG9zLCBib29s
IGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKK0FM
V0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJv
b2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQog
ewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7CiAKQEAgLTUw
MSw3ICs1MDEsNyBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0CiAg
ICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9tLCBsZW4sIGZvbnQsIHhQb3MsICZmYWxsYmFj
a0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7CiAKICAgICBpZiAobGF5b3V0KQotICAgICAgICByZXR1
cm4gRm9udDo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVuLCAmZmFsbGJhY2tGb250cyk7CisgICAg
ICAgIHJldHVybiBGb250Q2FzY2FkZTo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVuLCAmZmFsbGJh
Y2tGb250cyk7CiAKICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0
UnVuKHRleHQsIGZvbnQsIHRleHQsIGZyb20sIGxlbiwgc3R5bGUpOwogICAgIHJ1bi5zZXRDaGFy
YWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSAtIGZyb20pOwpAQCAtNTIxLDcgKzUyMSw3
IEBAIGlubGluZSB2b2lkIGVuc3VyZUNoYXJhY3RlckdldHNMaW5lQm94KEwKICAgICBsaW5lTWlk
cG9pbnRTdGF0ZS5zdG9wSWdub3JpbmdTcGFjZXMoSW5saW5lSXRlcmF0b3IoMCwgdGV4dFBhcmFn
cmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm9mZnNldCgp
KSk7CiB9CiAKLWlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllciwgdW5z
aWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWluaW11bVN1ZmZpeExp
bWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQgeFBvcywgaW50IGF2
YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2Us
IGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3ImIGxpbmVCcmVhaywgaW50
IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCitpbmxpbmUgdm9pZCB0cnlIeXBoZW5h
dGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lcywgaW50IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBtaW5pbXVt
UHJlZml4TGltaXQsIGludCBtaW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RTcGFjZSwg
dW5zaWduZWQgcG9zLCBmbG9hdCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNGaXhl
ZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFjaW5n
LCBJbmxpbmVJdGVyYXRvciYgbGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9vbCYgaHlw
aGVuYXRlZCkKIHsKICAgICAvLyBNYXAgJ2h5cGhlbmF0ZS1saW1pdC17YmVmb3JlLGFmdGVyfTog
YXV0bzsnIHRvIDIuCiAgICAgdW5zaWduZWQgbWluaW11bVByZWZpeExlbmd0aDsKQEAgLTYxNSwx
MiArNjE1LDEyIEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKICAg
ICB9CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUoKnJlbmRlclRl
eHQucGFyZW50KCksIG1fbGluZUluZm8pOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS5m
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
OwogICAgIGJvb2wgaXNGaXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2goKTsKICAgICBib29s
IGNhbkh5cGhlbmF0ZSA9IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0byAmJiBXZWJDb3Jl
OjpjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOwogCiAgICAgdW5zaWduZWQgbGFzdFNwYWNl
ID0gbV9jdXJyZW50Lm9mZnNldCgpOwotICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gbV9jdXJyZW50
U3R5bGUtPmZvbnQoKS53b3JkU3BhY2luZygpOworICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gbV9j
dXJyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICBmbG9hdCBsYXN0
U3BhY2VXb3JkU3BhY2luZyA9IDA7CiAgICAgZmxvYXQgd29yZFNwYWNpbmdGb3JXb3JkTWVhc3Vy
ZW1lbnQgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJl
YWtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVC
cmVha2VyLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0
IFJlbmRlclRleHRJbmZvIHsKICAgICBSZW5kZXJUZXh0KiBtX3RleHQ7CiAgICAgT3duUHRyPFRl
eHRMYXlvdXQ+IG1fbGF5b3V0OwogICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVh
a0l0ZXJhdG9yOwotICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2Fk
ZSogbV9mb250OwogfTsKIAogY2xhc3MgTGluZUJyZWFrZXIgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAx
Nzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGlubGluZSBib29sIHJlcXVpcmVz
TGluZUJveEZvckNvbnRlbnQoY28KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlID0gbGluZVN0eWxlKCpwYXJlbnQsIGxpbmVJbmZvKTsKICAgICAgICAgaWYgKGZsb3dTdHls
ZS5saW5lSGVpZ2h0KCkgIT0gcGFyZW50U3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAgICB8
fCBmbG93U3R5bGUudmVydGljYWxBbGlnbigpICE9IHBhcmVudFN0eWxlLnZlcnRpY2FsQWxpZ24o
KQotICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lk
ZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dTdHlsZS5mb250KCkuZm9udE1ldHJp
Y3MoKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0
cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dTdHlsZS5mb250
Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25z
dCBTdHJpbmcmIHN0cgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHVuaXQg
PT0gImVtIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFsdWUgKiBzdHlsZS0+Zm9u
dCgpLnNpemUoKTsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZv
bnRDYXNjYWRlKCkuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYg
KHVuaXQgPT0gImV4IikgewpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wgcGFyc2VNYXRoTUxOYW1l
ZFNwYWNlKGNvbnN0IFN0cmluZyYKICAgICAgICAgICAgIGxlbmd0aCA9IC03OyAgICAgICAgCiAg
ICAgfQogICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBz
dHlsZS0+Zm9udCgpLnNpemUoKSAvIDE4OworICAgICAgICBsZW5ndGhWYWx1ZSA9IGxlbmd0aCAq
IHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJldmlzaW9u
IDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkxLDggKzExOTEsOCBAQCB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByCiAgICAgICAgIG1fb3BlcmF0b3JGbGFn
cyA9IGVudHJ5LT5mbGFnczsKIAogICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGlz
IHNwZWNpZmllZCBhcyBtdWx0aXBsZSBvZiAxLzE4ZW0uCi0gICAgbV9sZWFkaW5nU3BhY2UgPSBl
bnRyeS0+bHNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0gICAgbV90cmFpbGlu
Z1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OworICAg
IG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5z
aXplKCkgLyAxODsKKyAgICBtX3RyYWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNwYWNlICogc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQpAQCAtMTIyOSw5ICsxMjI5LDkgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBtX29wZXJhdG9yRmxh
Z3MgJj0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSB8IE1hdGhNTE9wZXJhdG9yRGlj
dGlvbmFyeTo6U2VwYXJhdG9yOyAvLyBUaGlzIHJlc2V0cyBhbGwgYnV0IHRoZSBGZW5jZSBhbmQg
U2VwYXJhdG9yIHByb3BlcnRpZXMuCiAgICAgZWxzZQogICAgICAgICBtX29wZXJhdG9yRmxhZ3Mg
PSAwOyAvLyBUaGlzIHJlc2V0cyBhbGwgdGhlIG9wZXJhdG9yIHByb3BlcnRpZXMuCi0gICAgbV9s
ZWFkaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7IC8vIFRoaXMgc2V0
cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCi0gICAgbV90cmFpbGluZ1NwYWNl
ID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgdHJhaWxpbmcg
c3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KLSAgICBtX21pblNpemUgPSBzdHlsZSgpLmZvbnQo
KS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgorICAgIG1fbGVhZGluZ1Nw
YWNlID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRz
IGxlYWRpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX3RyYWlsaW5nU3BhY2Ug
PSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgdHJh
aWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX21pblNpemUgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0byAiMWVtIi4KICAg
ICBtX21heFNpemUgPSBpbnRNYXhGb3JMYXlvdXRVbml0OyAvLyBUaGlzIHNldHMgbWF4c2l6ZSB0
byAiaW5maW5pdHkiLgogCiAgICAgaWYgKG1fdGV4dENvbnRlbnQpIHsKQEAgLTEzNTUsNyArMTM1
NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIKICAgICAgICAg
UmVuZGVyTWF0aE1MVG9rZW46OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAg
ICAgIGlmIChpc0ludmlzaWJsZU9wZXJhdG9yKCkpIHsKICAgICAgICAgICAgIC8vIEluIHNvbWUg
Zm9udHMsIGdseXBocyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyBoYXZlIG5vbnplcm8gd2lkdGgu
IENvbnNlcXVlbnRseSwgd2Ugc3VidHJhY3QgdGhhdCB3aWR0aCBoZXJlIHRvIGF2b2lkIHdpZGUg
Z2Fwcy4KLSAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250KCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIEdseXBo
RGF0YSBkYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlciht
X3RleHRDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICAgICBmbG9hdCBnbHlwaFdpZHRoID0gYWR2
YW5jZUZvckdseXBoKGRhdGEpOwogICAgICAgICAgICAgQVNTRVJUKGdseXBoV2lkdGggPD0gbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGggLT0gZ2x5cGhXaWR0aDsKQEAgLTEzNjQsNyArMTM2NCw3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAg
R2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAg
ICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBhZHZhbmNlRm9yR2x5cGgoZGF0YSk7CiAgICAg
aWYgKCFtX2lzVmVydGljYWwpIHsKICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoIDwgc3Ry
ZXRjaFNpemUoKSkKQEAgLTE1MjEsNyArMTUyMSw3IEBAIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAgICAgYm90dG9t
LmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0gJnN0eWxlKCku
Zm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIHRvcC5mb250RGF0YSA9ICZzdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgZXh0ZW5zaW9uLmZvbnREYXRhID0g
dG9wLmZvbnREYXRhOwogICAgIGJvdHRvbS5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKICAgICBp
ZiAobWlkZGxlLmdseXBoKQpAQCAtMTUzOCw4ICsxNTM4LDggQEAgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogCiAgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCAmJiBpc0xh
cmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlG
b250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIEdseXBoRGF0
YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSB8fCBiYXNlR2x5cGgu
Zm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKICAgICAgICAgcmV0dXJuIGRhdGE7CiAKQEAg
LTE1NzAsOCArMTU3MCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVu
ZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNoeURhdGEgYXNzZW1ibHlEYXRh
OwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udCgp
LmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIEdseXBoRGF0YSBiYXNlR2x5cGgg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
IXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKICAgICBpZiAocHJpbWFy
eUZvbnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZwcmltYXJ5Rm9u
dERhdGEpIHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CkBAIC0xNjE4LDEy
ICsxNjE4LDEyIEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKICAg
ICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qg
b2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEuCi0gICAgICAg
IEdseXBoRGF0YSB0b3AgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3Ry
ZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgR2x5cGhEYXRhIGV4dGVu
c2lvbiA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJh
Y3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOwotICAgICAgICBHbHlwaERhdGEgYm90dG9tID0g
c3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5i
b3R0b21DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFy
LCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25D
aGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBib3R0b20gPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFy
LCBmYWxzZSk7CiAgICAgICAgIEdseXBoRGF0YSBtaWRkbGU7CiAgICAgICAgIGlmIChzdHJldGNo
eUNoYXJhY3Rlci0+bWlkZGxlQ2hhcikKLSAgICAgICAgICAgIG1pZGRsZSA9IHN0eWxlKCkuZm9u
dCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwg
ZmFsc2UpOworICAgICAgICAgICAgbWlkZGxlID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFsc2UpOwog
ICAgICAgICBhc3NlbWJseURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24s
IGJvdHRvbSwgbWlkZGxlKTsKICAgICB9CiAKQEAgLTE2ODAsNyArMTY4MCw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICAgICAgbV9zdHJldGNoeURhdGEg
PSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKG1fdGV4dENvbnRlbnQpOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJn
ZSBlbm91Z2guCi0gICAgICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKTsKKyAgICAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lz
VmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZUZvckdseXBoKGJh
c2VHbHlwaCk7CiAgICAgICAgIGlmIChzdHJldGNoU2l6ZSgpIDw9IGJhc2VTaXplKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTgwMiw3ICsxODAyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnRHbAogCiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwogICAgIGJ1ZmZl
ci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0YSwgYWR2YW5jZUZvckdseXBoKGRhdGEpKTsK
LSAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCksICpkYXRhLmZvbnRE
YXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhz
KHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3Jp
Z2luKTsKIAogICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0KQEAgLTE4OTgsNyArMTg5OCw3
IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAgICAgICAgTGF5
b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBs
b2NhdGlvbigpKTsKICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKICAgICAgICAgTGF5b3V0UG9pbnQgb3BlcmF0
b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIGdseXBo
Qm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZv
bnQoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBv
cGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgp
LmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGJ1ZmZl
ciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
OTgwLDcgKzE5ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVu
CiAKIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcigp
CiB7Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGlmICghcHJpbWFyeUZvbnRE
YXRhLm1hdGhEYXRhKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xOTg5LDcgKzE5ODksNyBA
QCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluCiAgICAgTGF5b3V0VW5p
dCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwogCiAgICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1vZGUo
KSA9PSBEcmF3Tm9ybWFsKSB7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250
KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSk7CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0Q29udGVudCgpLCAhc3R5bGUoKS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgICAgICByZXR1cm4gd2lkdGggLSBhZHZhbmNl
Rm9yR2x5cGgoZGF0YSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5kZXJNYXRoTQogCiB2b2lk
IFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQgaGVpZ2h0
QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCiB7Ci0gICAgaWYg
KCFzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYg
KCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewog
ICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRIIGZvbnQsIHdlIGFs
d2F5cyBtYWtlIHRoZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFuIHRoZSB0YXJnZXQu
CiAgICAgICAgIGRlcHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRvbVBvaW50TG93ZXI7
CiAgICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRv
cjo6Y29tcHV0CiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsK
IAotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7
CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0
YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCB2
b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiAKIHZvaWQgUmVuZGVyTWF0
aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCwg
Y29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTExLDcgKzExMSw3
IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWludCgKICAgICBpZiAoaW5m
by5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNl
Rm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERh
dGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
bWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoaW5mbywg
cGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZp
c2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTcgKzE5OSwxNyBAQCB2b2lkIFJl
bmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKIAogICAgIC8vIFdlIHNldCBzb21lIGNvbnN0
YW50cyB0byBkcmF3IHRoZSByYWRpY2FsLCBhcyBkZWZpbmVkIGluIHRoZSBPcGVuVHlwZSBNQVRI
IHRhYmxlcy4KIAotICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUoKS5mb250KCku
c2l6ZSgpOworICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnNpemUoKTsKIAogICAgIC8vIEZJWE1FOiBUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBmb3Ig
bV92ZXJ0aWNhbEdhcCBpbiBkaXNwbGF5c3R5bGUgaXMgcnVsZSB0aGlja25lc3MgKyAxLzQgeC1o
ZWlnaHQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgog
ICAgIG1fdmVydGljYWxHYXAgPSAxMSAqIG1fcnVsZVRoaWNrbmVzcyAvIDQ7CiAgICAgbV9leHRy
YUFzY2VuZGVyID0gbV9ydWxlVGhpY2tuZXNzOwotICAgIExheW91dFVuaXQga2VybkJlZm9yZURl
Z3JlZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKLSAgICBMYXlvdXRVbml0IGtl
cm5BZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OworICAgIExh
eW91dFVuaXQga2VybkJlZm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6
ZSgpIC8gMTg7CisgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNl
bnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKGF1dG8qIG1hdGhEYXRhID0gc3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBGSVhNRTogbV92ZXJ0aWNhbEdh
cCBzaG91bGQgdXNlIFJhZGljYWxEaXNwbGF5U3R5bGVWZXJ0aWNhbCBpbiBkaXNwbGF5IG1vZGUg
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgogICAgICAg
ICBtX3ZlcnRpY2FsR2FwID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERh
dGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CiAgICAgICAgIG1fcnVs
ZVRoaWNrbmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBP
cGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsUnVsZVRoaWNrbmVzcyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAko
cmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxUb2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDExICs4OCwxMSBAQCB2b2lk
IFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIC8vIFRoaXMgdHJpZXMg
dG8gZW11bGF0ZSB0aGUgZGVmYXVsdCBtYXRodmFyaWFudCB2YWx1ZSBvbiA8bWk+IHVzaW5nIHRo
ZSBDU1MgZm9udC1zdHlsZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIHJldmlzZWQgd2hlbiBtYXRodmFyaWFudCBpcyBpbXBsZW1lbnRlZCAoaHR0cDovL3drYnVn
Lzg1NzM1KSBhbmQgd2hlbiBmb250cyB3aXRoIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3lt
Ym9scyBjaGFyYWN0ZXJzIGFyZSBtb3JlIHBvcHVsYXIuCiAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24obmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0aW9uKCkpOwotICAg
ICAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IG5ld1N0eWxlLmdldCgpLmZvbnQoKS5m
b250U2VsZWN0b3IoKTsKKyAgICAgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBuZXdT
dHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgICAgICBpZiAoIW1f
Y29udGFpbnNFbGVtZW50ICYmIGVsZW1lbnQoKS50ZXh0Q29udGVudCgpLnN0cmlwV2hpdGVTcGFj
ZSgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLmxlbmd0aCgpID09IDEgJiYgIXRva2VuRWxlbWVudC5o
YXNBdHRyaWJ1dGUobWF0aHZhcmlhbnRBdHRyKSkKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKICAgICAgICAgaWYgKG5ld1N0eWxlLmdldCgpLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAgICAgbmV3U3R5bGUu
Z2V0KCkuZm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgICAgICAgICAgbmV3U3R5bGUu
Z2V0KCkuZm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKICAgICB9CiAKICAgICB3
cmFwcGVyLT5zZXRTdHlsZShXVEY6Om1vdmUobmV3U3R5bGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTc4NDU2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5o
IgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHlsZS5oIgogI2luY2x1
ZGUgIlBhZ2luYXRpb24uaCIKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbmRlclN0eWxlOjpp
bmhlcml0ZWROb3RFcXVhbChjb25zCiB9CiAKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKLWlubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udCYgZm9udCkKK2lu
bGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7
CiAgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gewogICAgICAgICBDYXNlRm9sZGluZ0hhc2g6
Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZhbWlseSgpLmltcGwoKSksCkBAIC0z
MTUsNyArMzE1LDcgQEAgdWludDMyX3QgUmVuZGVyU3R5bGU6Omhhc2hGb3JUZXh0QXV0b3Npegog
ICAgIGhhc2ggXj0gcmFyZUluaGVyaXRlZERhdGEtPm5ic3BNb2RlOwogICAgIGhhc2ggXj0gcmFy
ZUluaGVyaXRlZERhdGEtPmxpbmVCcmVhazsKICAgICBoYXNoIF49IFdURjo6RmxvYXRIYXNoPGZs
b2F0Pjo6aGFzaChpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQudmFsdWUoKSk7Ci0gICAg
aGFzaCBePSBjb21wdXRlRm9udEhhc2goaW5oZXJpdGVkLT5mb250KTsKKyAgICBoYXNoIF49IGNv
bXB1dGVGb250SGFzaChpbmhlcml0ZWQtPmZvbnRDYXNjYWRlKTsKICAgICBoYXNoIF49IGluaGVy
aXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZzsKICAgICBoYXNoIF49IGluaGVyaXRlZC0+
dmVydGljYWxfYm9yZGVyX3NwYWNpbmc7CiAgICAgaGFzaCBePSBpbmhlcml0ZWRfZmxhZ3MuX2Jv
eF9kaXJlY3Rpb247CkBAIC0zMzksNyArMzM5LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6ZXF1YWxG
b3JUZXh0QXV0b3NpemluZwogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFr
ID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrCiAgICAgICAgICYmIHJhcmVJ
bmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkgPT0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhLT50
ZXh0U2VjdXJpdHkKICAgICAgICAgJiYgaW5oZXJpdGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0ID09
IG90aGVyLT5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKLSAgICAgICAgJiYgaW5oZXJp
dGVkLT5mb250LmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRlZC0+Zm9udCkK
KyAgICAgICAgJiYgaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5lcXVhbEZvclRleHRBdXRvU2l6aW5n
KG90aGVyLT5pbmhlcml0ZWQtPmZvbnRDYXNjYWRlKQogICAgICAgICAmJiBpbmhlcml0ZWQtPmhv
cml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+aG9yaXpvbnRhbF9i
b3JkZXJfc3BhY2luZwogICAgICAgICAmJiBpbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFj
aW5nID09IG90aGVyLT5pbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAg
ICYmIGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbiA9PSBvdGhlci0+aW5oZXJpdGVkX2Zs
YWdzLl9ib3hfZGlyZWN0aW9uCkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6
Y2hhbmdlUmVxdWlyZXNMYXlvdXQoYwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQog
ICAgICAgICB8fCBpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQgIT0gb3RoZXIuaW5oZXJp
dGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0CiAjZW5kaWYKLSAgICAgICAgfHwgaW5oZXJpdGVkLT5m
b250ICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udAorICAgICAgICB8fCBpbmhlcml0ZWQtPmZvbnRD
YXNjYWRlICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udENhc2NhZGUKICAgICAgICAgfHwgaW5oZXJp
dGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRlZC0+aG9yaXpv
bnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRl
cl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcKICAg
ICAgICAgfHwgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uICE9IG90aGVyLmluaGVyaXRl
ZF9mbGFncy5fYm94X2RpcmVjdGlvbgpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBk
ZXBlbmQgb24gbG9jYWxlLgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGh5cGhlbk1pbnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAxKSk7CiAgICAgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuU3RyaW5nLCAo
Jmh5cGhlbiwgMSkpOwotICAgIHJldHVybiBmb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2x5cGhG
b3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1pbnVzU3RyaW5nOwor
ICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdseXBoRm9yQ2hhcmFj
dGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKIH0KIAogY29u
c3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzTWFya1N0cmluZygpIGNv
bnN0CkBAIC0xMzQwLDIwICsxMzQwLDIwIEBAIGNvbnN0IEFuaW1hdGlvbiogUmVuZGVyU3R5bGU6
OnRyYW5zaXRpb24KICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgRm9udCYgUmVuZGVyU3R5bGU6
OmZvbnQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQ7IH0KLWNvbnN0IEZvbnRNZXRy
aWNzJiBSZW5kZXJTdHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQt
PmZvbnQuZm9udE1ldHJpY3MoKTsgfQotY29uc3QgRm9udERlc2NyaXB0aW9uJiBSZW5kZXJTdHls
ZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LmZvbnRE
ZXNjcmlwdGlvbigpOyB9Citjb25zdCBGb250Q2FzY2FkZSYgUmVuZGVyU3R5bGU6OmZvbnRDYXNj
YWRlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZTsgfQorY29uc3QgRm9u
dE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIGluaGVy
aXRlZC0+Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKTsgfQorY29uc3QgRm9udERlc2NyaXB0aW9u
JiBSZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVk
LT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsgfQogZmxvYXQgUmVuZGVyU3R5bGU6OnNw
ZWNpZmllZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuc3BlY2lm
aWVkU2l6ZSgpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9Ci1pbnQgUmVuZGVy
U3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LnBpeGVsU2l6
ZSgpOyB9CitpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gaW5oZXJp
dGVkLT5mb250Q2FzY2FkZS5waXhlbFNpemUoKTsgfQogCiBjb25zdCBMZW5ndGgmIFJlbmRlclN0
eWxlOjp3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT53b3Jk
U3BhY2luZzsgfQotZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJl
dHVybiBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpOyB9CitmbG9hdCBSZW5kZXJTdHls
ZTo6bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUu
bGV0dGVyU3BhY2luZygpOyB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6OnNldEZvbnREZXNjcmlwdGlv
bihjb25zdCBGb250RGVzY3JpcHRpb24mIHYpCiB7Ci0gICAgaWYgKGluaGVyaXRlZC0+Zm9udC5m
b250RGVzY3JpcHRpb24oKSAhPSB2KSB7Ci0gICAgICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9u
dCA9IEZvbnQodiwgaW5oZXJpdGVkLT5mb250LmxldHRlclNwYWNpbmcoKSwgaW5oZXJpdGVkLT5m
b250LndvcmRTcGFjaW5nKCkpOworICAgIGlmIChpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnRE
ZXNjcmlwdGlvbigpICE9IHYpIHsKKyAgICAgICAgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250Q2Fz
Y2FkZSA9IEZvbnRDYXNjYWRlKHYsIGluaGVyaXRlZC0+Zm9udENhc2NhZGUubGV0dGVyU3BhY2lu
ZygpLCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLndvcmRTcGFjaW5nKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwNCw3ICsxNDA0LDcgQEAg
dm9pZCBSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIAogICAgICAgICBmb250V29y
ZFNwYWNpbmcgPSAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBlcmNlbnQ6Ci0gICAgICAg
IGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQoKSAqIGZvbnQoKS5zcGFjZVdpZHRoKCkg
LyAxMDA7CisgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQoKSAqIGZvbnRD
YXNjYWRlKCkuc3BhY2VXaWR0aCgpIC8gMTAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZp
eGVkOgogICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2YWx1ZS52YWx1ZSgpOwpAQCAtMTQxNywx
MSArMTQxNywxMSBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhMZW5ndGggCiAg
ICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBp
bmhlcml0ZWQuYWNjZXNzKCktPmZvbnQuc2V0V29yZFNwYWNpbmcoZm9udFdvcmRTcGFjaW5nKTsK
KyAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNldFdvcmRTcGFjaW5nKGZvbnRX
b3JkU3BhY2luZyk7CiAgICAgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPndvcmRTcGFjaW5n
ID0gV1RGOjptb3ZlKHZhbHVlKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3Bh
Y2luZyhmbG9hdCB2KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRMZXR0ZXJTcGFjaW5n
KHYpOyB9Cit2b2lkIFJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYpIHsgaW5o
ZXJpdGVkLmFjY2VzcygpLT5mb250Q2FzY2FkZS5zZXRMZXR0ZXJTcGFjaW5nKHYpOyB9CiAKIHZv
aWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0IHNpemUpCiB7CkBAIC0xNDM0LDcgKzE0
MzQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXplCiAgICAgZWxz
ZQogICAgICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSk7
CiAKLSAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBmb250KCkuZm9udFNl
bGVjdG9yKCk7CisgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9yID0gZm9udENh
c2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICBGb250RGVzY3JpcHRpb24gZGVzYyhmb250RGVz
Y3JpcHRpb24oKSk7CiAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwogICAgIGRlc2Mu
c2V0Q29tcHV0ZWRTaXplKHNpemUpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBSZW5kZXJT
dHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogI2VuZGlmCiAKICAgICBzZXRGb250RGVzY3Jp
cHRpb24oZGVzYyk7Ci0gICAgZm9udCgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKKyAg
ICBmb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKIH0KIAogdm9pZCBS
ZW5kZXJTdHlsZTo6Z2V0U2hhZG93RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgTGF5
b3V0VW5pdCAmdG9wLCBMYXlvdXRVbml0ICZyaWdodCwgTGF5b3V0VW5pdCAmYm90dG9tLCBMYXlv
dXRVbml0ICZsZWZ0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1
LDcgQEAgY2xhc3MgQ29udGVudERhdGE7CiBjbGFzcyBDb3VudGVyQ29udGVudDsKIGNsYXNzIEN1
cnNvckxpc3Q7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xhc3MgRm9udDsKK2NsYXNzIEZv
bnRDYXNjYWRlOwogY2xhc3MgRm9udE1ldHJpY3M7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWFz
a0ltYWdlT3BlcmF0aW9uOwpAQCAtNjg5LDcgKzY4OSw3IEBAIHB1YmxpYzoKICAgICBFQ2xlYXIg
Y2xlYXIoKSBjb25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MuY2xlYXIoKTsgfQogICAg
IEVUYWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9m
bGFncy50YWJsZUxheW91dCgpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250JiBm
b250KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udENhc2NhZGUmIGZvbnRD
YXNjYWRlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udE1ldHJpY3MmIGZv
bnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBmbG9hdCBzcGVjaWZpZWRGb250U2l6
ZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5o
ZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIGlubGluZSBTdHlsZUluaGVyaXRlZERhdGE6OlN0eWxlSW5o
ZXJpdGUKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAsIHNwZWNpZmllZExp
bmVIZWlnaHQoby5zcGVjaWZpZWRMaW5lSGVpZ2h0KQogI2VuZGlmCi0gICAgLCBmb250KG8uZm9u
dCkKKyAgICAsIGZvbnRDYXNjYWRlKG8uZm9udENhc2NhZGUpCiAgICAgLCBjb2xvcihvLmNvbG9y
KQogICAgICwgdmlzaXRlZExpbmtDb2xvcihvLnZpc2l0ZWRMaW5rQ29sb3IpCiB7CkBAIC02Nyw3
ICs2Nyw3IEBAIGJvb2wgU3R5bGVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnMKICNpZiBF
TkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgJiYgc3BlY2lmaWVkTGluZUhlaWdo
dCA9PSBvLnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRpZgotICAgICAgICAmJiBmb250ID09IG8u
Zm9udAorICAgICAgICAmJiBmb250Q2FzY2FkZSA9PSBvLmZvbnRDYXNjYWRlCiAgICAgICAgICYm
IGNvbG9yID09IG8uY29sb3IKICAgICAgICAgJiYgdmlzaXRlZExpbmtDb2xvciA9PSBvLnZpc2l0
ZWRMaW5rQ29sb3IKICAgICAgICAgJiYgaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZyA9PSBvLmhv
cml6b250YWxfYm9yZGVyX3NwYWNpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHJldmlzaW9uIDE3ODQ1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBTdHlsZUluaGVyaXRlZERhdGFf
aAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICBMZW5ndGggc3BlY2lmaWVkTGluZUhlaWdodDsKICNlbmRpZgogCi0gICAgRm9udCBm
b250OworICAgIEZvbnRDYXNjYWRlIGZvbnRDYXNjYWRlOwogICAgIENvbG9yIGNvbG9yOwogICAg
IENvbG9yIHZpc2l0ZWRMaW5rQ29sb3I7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4NDU2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDEzICsyMjUsMTMgQEAgdm9pZCBSZW5kZXJTVkdJbmxp
bmVUZXh0Ojp1cGRhdGVTY2FsZWRGbwogICAgIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUo
KnRoaXMsIHN0eWxlKCksIG1fc2NhbGluZ0ZhY3RvciwgbV9zY2FsZWRGb250KTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQm
IHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQpCit2b2lkIFJlbmRlclNWR0lubGluZVRl
eHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9u
dENhc2NhZGUmIHNjYWxlZEZvbnQpCiB7CiAgICAgLy8gQWx0ZXIgZm9udC1zaXplIHRvIHRoZSBy
aWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGluZyB0aGUgZ2x5cGhzIHRoZW1zZWx2
ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBpcyBzcGVjaWZpZWQKICAgICBzY2Fs
aW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2NyZWVuRm9udFNpemVT
Y2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciA9PSAxIHx8ICFz
Y2FsaW5nRmFjdG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRSZW5kZXJpbmdNb2Rl
KCkgPT0gR2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAgICAgIHNjYWxpbmdGYWN0b3IgPSAxOwot
ICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udCgpOworICAgICAgICBzY2FsZWRGb250ID0g
c3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQwLDcg
KzI0MCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWwKICAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRoZSBjYXNlIHdoZW4gd2UgY29tcHV0
ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQpLgogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6
ZUZvclNWR0lubGluZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBmb250RGVz
Y3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3RvciwgcmVuZGVyZXIuZG9jdW1l
bnQoKSkpOwogCi0gICAgc2NhbGVkRm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsK
KyAgICBzY2FsZWRGb250ID0gRm9udENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAg
ICBzY2FsZWRGb250LnVwZGF0ZShyZW5kZXJlci5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5mb250U2VsZWN0b3IoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAxNzg0NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBSZW5kZXJTVkdJbmxpbmVUZXh0
X2gKICNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCiAKLSNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVk
ZSAiU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC00MSw5
ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbGF5b3V0QXR0
cmlidXRlcygpIHsgcmV0dXJuICZtX2xheW91dEF0dHJpYnV0ZXM7IH0KIAogICAgIGZsb2F0IHNj
YWxpbmdGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxpbmdGYWN0b3I7IH0KLSAgICBjb25z
dCBGb250JiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9CisgICAg
Y29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZv
bnQ7IH0KICAgICB2b2lkIHVwZGF0ZVNjYWxlZEZvbnQoKTsKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQpOworICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udENhc2NhZGUm
IHNjYWxlZEZvbnQpOwogCiAgICAgLy8gUHJlc2VydmVzIGZsb2F0aW5nIHBvaW50IHByZWNpc2lv
biBmb3IgdGhlIHVzZSBpbiBEUlQuIEl0IGtub3dzIGhvdyB0byByb3VuZCBhbmQgZG9lcyBhIGJl
dHRlciBqb2IgdGhhbiBlbmNsb3NpbmdJbnRSZWN0LgogICAgIEZsb2F0UmVjdCBmbG9hdExpbmVz
Qm91bmRpbmdCb3goKSBjb25zdDsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBjcmVhdGVUZXh0Qm94KCkgb3ZlcnJp
ZGU7CiAKICAgICBmbG9hdCBtX3NjYWxpbmdGYWN0b3I7Ci0gICAgRm9udCBtX3NjYWxlZEZvbnQ7
CisgICAgRm9udENhc2NhZGUgbV9zY2FsZWRGb250OwogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzIG1fbGF5b3V0QXR0cmlidXRlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTc4NDU2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25SZWMKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVyZXIoKS5zY2Fs
aW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAgY29uc3QgRm9u
dCYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7CiAgICAgY29uc3Qg
Rm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250TWV0cmljcygp
OwogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKICAg
ICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKQpAQCAtMTcyLDcgKzE3Miw3IEBAIExheW91dFJlY3Qg
U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKIAogc3RhdGljIGlubGluZSBib29sIHRleHRT
aG91bGRCZVBhaW50ZWQoY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dFJlbmRlcmVyKQog
ewotICAgIC8vIEZvbnQ6OnBpeGVsU2l6ZSgpLCByZXR1cm5zIEZvbnREZXNjcmlwdGlvbjo6Y29t
cHV0ZWRQaXhlbFNpemUoKSwgd2hpY2ggcmV0dXJucyAiaW50KHggKyAwLjUpIi4KKyAgICAvLyBG
b250Q2FzY2FkZTo6cGl4ZWxTaXplKCksIHJldHVybnMgRm9udERlc2NyaXB0aW9uOjpjb21wdXRl
ZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5zICJpbnQoeCArIDAuNSkiLgogICAgIC8vIElmIHRo
ZSBhYnNvbHV0ZSBmb250IHNpemUgb24gc2NyZWVuIGlzIGJlbG93IHg9MC41LCBkb24ndCByZW5k
ZXIgYW55dGhpbmcuCiAgICAgcmV0dXJuIHRleHRSZW5kZXJlci5zY2FsZWRGb250KCkucGl4ZWxT
aXplKCk7CiB9CkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAg
ICAgICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3Jk
ZXIgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJp
bmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkp
OwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC00NzUsNyArNDc1LDcgQEAg
c3RhdGljIGlubGluZSBmbG9hdCBwb3NpdGlvbk9mZnNldEZvckRlYwogICAgIHJldHVybiAwLjBm
OwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IHRoaWNrbmVzc0ZvckRlY29yYXRpb24oVGV4dERl
Y29yYXRpb24sIGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMgaW5saW5lIGZsb2F0IHRoaWNrbmVz
c0ZvckRlY29yYXRpb24oVGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewogICAgIC8vIEZJWE1FOiBGb3IgU1ZHIEZvbnRzIHdlIG5lZWQgdG8gdXNlIHRoZSBhdHRyaWJ1
dGVzIGRlZmluZWQgaW4gdGhlIDxmb250LWZhY2U+IGlmIHNwZWNpZmllZC4KICAgICAvLyBDb21w
YXRpYmxlIHdpdGggQmF0aWsvT3BlcmEKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgUmVuZGVyU3R5bGUmIGRlY29yYXRpb25T
dHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxvYXQgc2NhbGluZ0Zh
Y3RvciA9IDE7Ci0gICAgRm9udCBzY2FsZWRGb250OworICAgIEZvbnRDYXNjYWRlIHNjYWxlZEZv
bnQ7CiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHls
ZShkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSwgc2NhbGluZ0ZhY3Rvciwgc2Nh
bGVkRm9udCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkBAIC01NzAsNyArNTcwLDcg
QEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZAogICAgIGZsb2F0IHNj
YWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2Nh
bGluZ0ZhY3Rvcik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5z
Y2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSByZW5kZXJl
cigpLnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdHlsZS0+
dGV4dFNoYWRvdygpOwogCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50LngsIGZy
YWdtZW50LnkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0
T25MaQogCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHRleHQt
PnRleHQoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlLT5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS0+Zm9udENh
c2NhZGUoKTsKIAogICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIHNwYWNpbmdMYXlvdXQo
Zm9udCk7CiAgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lIGJhc2VsaW5lTGF5b3V0KGZv
bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkocmV2aXNpb24gMTc4NDU2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgiCiAKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHVGV4
dExheW91dEVuZ2luZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3Qg
Rm9udCYgZm9udCkKK1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6U1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIDogbV9mb250KGZvbnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBj
bGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CkBAIC0zNSw3ICszNSw3IEBA
IGNsYXNzIFNWR1RleHRNZXRyaWNzOwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5l
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUp
OwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZShjb25zdCBGb250Jik7
CisgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNjYWRlJik7CiAK
ICAgICBmbG9hdCBjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KGNvbnN0IFNWR1JlbmRlclN0eWxlKiwg
U1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCkgY29uc3Q7CiAgICAgZmxvYXQgY2FsY3VsYXRlQWxp
Z25tZW50QmFzZWxpbmVTaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIHRleHRSZW5kZXJlcikgY29uc3Q7CkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVUb0FsaWdubWVudEJh
c2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRl
cmVyKSBjb25zdDsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgbV9mb250OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExh
eW91dEVuZ2luZVNwYWNpbmcuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZS5oIgogCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
KGNvbnN0IEZvbnQmIGZvbnQpCitTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExh
eW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgOiBtX2ZvbnQo
Zm9udCkKICAgICAsIG1fbGFzdENoYXJhY3RlcigwKQogewpAQCAtOTgsNyArOTgsNyBAQCBmbG9h
dCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsCiAKICAgICBmbG9hdCBzcGFjaW5n
ID0gbV9mb250LmxldHRlclNwYWNpbmcoKSArIGtlcm5pbmc7CiAgICAgaWYgKGN1cnJlbnRDaGFy
YWN0ZXIgJiYgbGFzdENoYXJhY3RlciAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgewotICAgICAg
ICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSAmJiAhRm9udDo6dHJl
YXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVh
dEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYmICFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNl
KCpsYXN0Q2hhcmFjdGVyKSkKICAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9mb250LndvcmRTcGFj
aW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCShyZXZpc2lvbiAxNzg0NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBTVkdSZW5kZXJT
dHlsZTsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKQEAgLTMyLDEzICszMiwxMyBAQCBjbGFzcyBTVkdF
bGVtZW50OwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKTsKIHB1YmxpYzoKLSAgICBT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Jik7CisgICAgU1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZsb2F0IGNhbGN1bGF0
ZVNWR0tlcm5pbmcoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHVGV4dE1ldHJpY3M6Okds
eXBoJiBjdXJyZW50R2x5cGgpOwogICAgIGZsb2F0IGNhbGN1bGF0ZUNTU0tlcm5pbmdBbmRTcGFj
aW5nKGNvbnN0IFNWR1JlbmRlclN0eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCwgY29u
c3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IEZvbnQm
IG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGNvbnN0IFVDaGFy
KiBtX2xhc3RDaGFyYWN0ZXI7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9u
IDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFNWR1RleHRNZXRyaWNzOjpTVkdU
ZXh0TWV0cmljcyhSZW5kZXJTVkcKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gdGV4dFJlbmRl
cmVyLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKLSAgICBj
b25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVyLnNjYWxlZEZvbnQoKTsKKyAgICBj
b25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCA9IHRleHRSZW5kZXJlci5zY2FsZWRGb250KCk7
CiAgICAgaW50IGxlbmd0aCA9IDA7CiAKICAgICAvLyBDYWxjdWxhdGUgd2lkdGgvaGVpZ2h0IHVz
aW5nIHRoZSBzY2FsZWQgZm9udCwgZGl2aWRlIHRoaXMgcmVzdWx0IGJ5IHRoZSBzY2FsaW5nRmFj
dG9yIGFmdGVyd2FyZHMuCkBAIC03MCw3ICs3MCw3IEBAIFRleHRSdW4gU1ZHVGV4dE1ldHJpY3M6
OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAgICAgICAgICAsIHN0eWxlLmRpcmVjdGlvbigpCiAg
ICAgICAgICAgICAgICAgLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpIC8qIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERh
dGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICBydW4uZGlzYWJs
ZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkxLDcgKzkxLDcgQEAgU1ZHVGV4dE1ldHJpY3MgU1ZHVGV4
dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3MoUmVu
ZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0
aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lKQogewotICAgIGJvb2wgbmVl
ZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKTsKKyAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOwogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3Ig
PSB0ZXh0LnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRy
aWNzQnVpbGRlci5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDkgKzEwMCw5IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjppbml0aWFsaXplTWUKICAg
ICBtX2NvbXBsZXhTdGFydFRvQ3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmljcygpOwogICAg
IG1fdG90YWxXaWR0aCA9IDA7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dC5z
Y2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSB0ZXh0LnNj
YWxlZEZvbnQoKTsKICAgICBtX3J1biA9IFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1Y3RUZXh0UnVu
KHRleHQpOwotICAgIG1faXNDb21wbGV4VGV4dCA9IHNjYWxlZEZvbnQuY29kZVBhdGgobV9ydW4p
ID09IEZvbnQ6OkNvbXBsZXg7CisgICAgbV9pc0NvbXBsZXhUZXh0ID0gc2NhbGVkRm9udC5jb2Rl
UGF0aChtX3J1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAKICAgICBpZiAobV9pc0NvbXBs
ZXhUZXh0KQogICAgICAgICBtX3NpbXBsZVdpZHRoSXRlcmF0b3IgPSBudWxscHRyOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2
Z0ZvbnQKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKLWZsb2F0IFNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3QKK2Zsb2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdT
VkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCYg
Y2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAgICAgV2lkdGhJdGVy
YXRvciBpdCgmZm9udCwgcnVuKTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTI5
MCw3ICsyOTAsNyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHCiAg
ICAgfQogfQogCi1zdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29uc3QgRm9u
dCYgZm9udCkKK3N0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb25zdCBGb250
Q2FzY2FkZSYgZm9udCkKIHsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnRE
YXRhID0gZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAoIXByaW1hcnlGb250RGF0YS5p
c1NWR0ZvbnQoKSkKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdH
bHlwaEZvckZvbnQoY29uCiAgICAgcmV0dXJuIEdseXBoRGF0YShmb250RWxlbWVudC0+bWlzc2lu
Z0dseXBoKCksICZwcmltYXJ5Rm9udERhdGEpOwogfQogCi1HbHlwaERhdGEgU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiBmb250LCBX
aWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBp
bnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9y
bWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKQorR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFdp
ZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGlu
dCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3Jt
YWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCiB7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGZv
bnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRvVmFyaWFudCk7
CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCkBAIC0zNDIsNyArMzQyLDcgQEAgR2x5cGhEYXRh
IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogICAgIC8vIFRoZSBiZWhhdmlvciBkb2Vz
IG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZC4gRm9yIHNpbXBsaWNpdHkgd2UgZG9uJ3QgdHJ5IHRv
IHJlc29sdmUgZm9udCBmYWxsYmFja3MgY29udGV4dC1zZW5zaXRpdmVseS4KICAgICBGb250RGVz
Y3JpcHRpb24gZmFsbGJhY2tEZXNjcmlwdGlvbiA9IGZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgZmFsbGJhY2tEZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhWZWN0b3I8QXRvbWljU3RyaW5nPiB7
IHNhbnNTZXJpZkZhbWlseSB9KTsKLSAgICBGb250IGZhbGxiYWNrRm9udChmYWxsYmFja0Rlc2Ny
aXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygpKTsKKyAgICBG
b250Q2FzY2FkZSBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlvbiwgZm9udC5sZXR0ZXJT
cGFjaW5nKCksIGZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgZmFsbGJhY2tGb250LnVwZGF0ZShm
b250LmZvbnRTZWxlY3RvcigpKTsKIAogICAgIHJldHVybiBmYWxsYmFja0ZvbnQuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRvVmFyaWFudCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDcgQEAKICNpZm5kZWYgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHRfaAogI2RlZmlu
ZSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dF9oCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQyLDkgKzQyLDkgQEAgcHVibGljOgogICAgIFJlbmRlclNWR1Jlc291cmNl
KiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYWludGlu
Z1Jlc291cmNlOyB9CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNW
R1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9
CiAKLSAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9u
dCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBj
dXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxp
emVkU3BhY2VzU3RyaW5nQ2FjaGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgR2x5cGhEYXRhIGds
eXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBV
Q2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNp
Z25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwg
aW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBm
bG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwg
aW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSW5s
aW5lVGV4dEJveFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9J
bmxpbmVUZXh0Qm94U3R5bGUuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveFN0eWxl
LmgiCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNs
dWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogCkBAIC04
OSw3ICs4OSw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW8KICAg
ICBmbG9hdCB3YXZ5T2Zmc2V0OwogICAgICAgICAKICAgICBUZXh0RGVjb3JhdGlvblN0eWxlIGRl
Y29yYXRpb25TdHlsZSA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlKCk7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7
CisgICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5mbG9hdEhlaWdodCgpOwogICAgIEdseXBoT3ZlcmZsb3cgb3ZlcmZsb3dSZXN1bHQ7CiAgICAg
CiAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlV2F2eSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgJKHJldmlzaW9u
IDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIElubGluZVRleHRCb3hTdHls
ZV9oCiAjZGVmaW5lIElubGluZVRleHRCb3hTdHlsZV9oCiAKLSNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVudChjb25zCiAg
ICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKIAogICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gZG9jdW1lbnQuc3R5bGVS
ZXNvbHZlcklmRXhpc3RzKCkgPyBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKS0+Zm9u
dFNlbGVjdG9yKCkgOiBudWxscHRyOwotICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udCgpLnVw
ZGF0ZShmb250U2VsZWN0b3IpOworICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUo
KS51cGRhdGUoZm9udFNlbGVjdG9yKTsKIAogICAgIHJldHVybiBkb2N1bWVudFN0eWxlOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9u
IDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCByZXNvbHZlVHJlZShEb2N1bWVu
dCYgZG9jdW1lbnQsIENoYQogICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnQuc2V0dGluZ3MoKSkgewogICAgICAgICAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwogICAgICAgICAgICAgaWYgKHNl
dHRpbmdzLT5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSAmJiBzdHlsZVJlc29sdmVy
KQotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZShzdHls
ZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHls
ZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3Io
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3VtZW50Q2hhbmdlID0g
ZGV0ZXJtaW5lQ2hhbmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclZpZXco
KS0+c3R5bGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJKHJldmlzaW9u
IDE3ODQ1NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4MCw5ICsyODAsOSBAQCB2b2lkIGNvbXB1dGVOb3JtYWxpemVkU3BhY2VzKGNv
bnN0IFRleHRSCiAgICAgaWYgKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZS5sZW5ndGgoKSA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAocnVuLmlzOEJpdCgpKQotICAgICAgICBub3JtYWxpemVkU3BhY2Vz
U3RyaW5nQ2FjaGUgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnM4KCksIHJ1
bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2Fj
aGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzOCgpLCBydW4u
Y2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBlbHNlCi0gICAgICAgIG5vcm1hbGl6ZWRTcGFjZXNT
dHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVyczE2KCksIHJ1
bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2Fj
aGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVu
LmNoYXJhY3RlcnNMZW5ndGgoKSk7CiAgICAgaWYgKG1pcnJvcikKICAgICAgICAgbm9ybWFsaXpl
ZFNwYWNlc1N0cmluZ0NhY2hlID0gY3JlYXRlU3RyaW5nV2l0aE1pcnJvcmVkQ2hhcmFjdGVycyhu
b3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNWR0dseXBo
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hLZXJuRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01p
c3NpbmdHbHlwaEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2lu
Y2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZH
Rm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZVNyY0VsZW1lbnQuaCIKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTc4NDU2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsOCArNjYsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0dDQ29udHJvbGxlci5oPgpAQCAtNDYzLDEyICs0NjMsMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjpz
ZXREZWZhdWx0UmVxdWVzdFRpbWVvdQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldEFsd2F5c1VzZXND
b21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxleFRleHQpCiB7Ci0gICAgV2Vi
Q29yZTo6Rm9udDo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQgPyBXZWJDb3JlOjpG
b250OjpDb21wbGV4IDogV2ViQ29yZTo6Rm9udDo6QXV0byk7CisgICAgV2ViQ29yZTo6Rm9udENh
c2NhZGU6OnNldENvZGVQYXRoKGFsd2F5c1VzZUNvbXBsZXhUZXh0ID8gV2ViQ29yZTo6Rm9udENh
c2NhZGU6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250Q2FzY2FkZTo6QXV0byk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzczo6c2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVzZUZvbnRTbW9vdGhp
bmcpCiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKHVzZUZvbnRT
bW9vdGhpbmcpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRTaG91bGRVc2VTbW9vdGhp
bmcodXNlRm9udFNtb290aGluZyk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6dXNlclByZWZlcnJl
ZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJ
KHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDcgKzgwMiw3IEBAIEVkaXRvclN0YXRl
IFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKICAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUo
KSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIGlmIChSZW5kZXJTdHls
ZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9S
ZW1vdmUpKSB7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5mb250KCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9
IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAg
ICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gZm9udCA/IENURm9udEdldFN5
bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRy
YWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQkocmV2aXNpb24gMTc4NDU2KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNo
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0ZvbnRDYXNjYWRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KICNp
bXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyLmg+CkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVXZWJQcgogICAgIG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0ID0g
V1RGOjptb3ZlKHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQpOwogICAgIG1f
cHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBwYXJhbWV0ZXJzLnByZXNlbnRlckFwcGxpY2F0aW9u
UGlkOwogICAgIG1fc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uID0gcGFyYW1ldGVy
cy5zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb247Ci0gICAgRm9udDo6c2V0RGVmYXVs
dFR5cGVzZXR0aW5nRmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFibGVLZXJuaW5nQW5kTGln
YXR1cmVzQnlEZWZhdWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOworICAgIEZvbnRDYXNj
YWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7
CiAKICAgICBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OlJlbGllZkxvZ2dlcjo6c2V0TG9nZ2luZ0Vu
YWJsZWQocGFyYW1ldGVycy5zaG91bGRFbmFibGVNZW1vcnlQcmVzc3VyZVJlbGllZkxvZ2dpbmcp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRy
YXMubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0
TlNTdHJpbmdFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBv
cnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAKICNpbXBvcnQgPFdlYkNvcmUvQ29yZUdyYXBo
aWNzU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9u
dENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TU3RyaW5nRXh0
cmFzLmg+CkBAIC05Miw3ICs5Miw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQb2ludDooTlNQb2lu
dClwb2ludCAKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAgICAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250
UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdp
bmdUb1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3RoaW5nIDogQW50
aWFsaWFzZWQpOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1E
YXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVl
bl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3RoaW5nIDogQW50aWFsaWFzZWQp
OwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBy
dW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIC0gKGZsb2F0
KV93ZWJfd2lkdGhXaXRoRm9udDooTlNGb250ICopZm8KICAgICBbc2VsZiBnZXRDaGFyYWN0ZXJz
OmJ1ZmZlci5kYXRhKCldOwogCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIuZGF0
YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0
YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENv
bnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNvcmVG
b250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgICAgICBU
ZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBydW4uZGlzYWJsZVJv
dW5kaW5nSGFja3MoKTsKICAgICAgICAgcmV0dXJuIHdlYkNvcmVGb250LndpZHRoKHJ1bik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQkocmV2
aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTdHJpbmdUcnVuY2F0
b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDIxICsyOSwyMSBAQAogI2ltcG9ydCAiV2ViU3Ry
aW5nVHJ1bmNhdG9yLmgiCiAKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgotI2ltcG9y
dCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZvbnRQbGF0Zm9ybURhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3RyaW5n
VHJ1bmNhdG9yLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNp
bXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
IAotc3RhdGljIFdlYkNvcmU6OkZvbnQmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKK3N0
YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250KQog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNGb250Pj4gY3VycmVudE5T
Rm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29yZTo6Rm9udD4gY3VycmVudEZv
bnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OkZvbnRDYXNjYWRlPiBjdXJy
ZW50Rm9udDsKICAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50TlNGb250LmdldCgpLmdldCgp
XSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRGb250OwogICAgIGN1cnJlbnROU0ZvbnQuZ2V0KCkg
PSBmb250OwotICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9udChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICBjdXJyZW50Rm9u
dC5nZXQoKSA9IFdlYkNvcmU6OkZvbnRDYXNjYWRlKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEo
Zm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50Rm9udDsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1h
Yy5tbQkocmV2aXNpb24gMTc4NDU2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQg
UG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAKICAgICAgICAgUG9wdXBNZW51U3R5bGUgc3R5bGUg
PSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGlj
dGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7Ci0gICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udCgpKSB7CisgICAgICAg
IGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewogICAgICAgICAgICAgTlNGb250
ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogICAg
ICAgICAgICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXplID0gc3R5
bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE3ODQ1NikKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ5
MCw3ICsxNDkwLDcgQEAgLSAoQk9PTClfdmlld0NsYXNzOihDbGFzcyAqKXZDbGFzcyBhbmRSZQog
CiArICh2b2lkKV9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDooQk9PTClmCiB7Ci0g
ICAgRm9udDo6c2V0Q29kZVBhdGgoZiA/IEZvbnQ6OkNvbXBsZXggOiBGb250OjpBdXRvKTsKKyAg
ICBGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoZiA/IEZvbnRDYXNjYWRlOjpDb21wbGV4IDogRm9u
dENhc2NhZGU6OkF1dG8pOwogfQogCiArICh2b2lkKV9zZXRBbGxvd3NSb3VuZGluZ0hhY2tzOihC
T09MKWFsbG93c1JvdW5kaW5nSGFja3MKQEAgLTMxNjgsMTIgKzMxNjgsMTIgQEAgLSAoQk9PTClf
ZGFzaGJvYXJkQmVoYXZpb3I6KFdlYkRhc2hib2FyZAogCiArICh2b2lkKV9zZXRTaG91bGRVc2VG
b250U21vb3RoaW5nOihCT09MKWYKIHsKLSAgICBGb250OjpzZXRTaG91bGRVc2VTbW9vdGhpbmco
Zik7CisgICAgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhmKTsKIH0KIAogKyAo
Qk9PTClfc2hvdWxkVXNlRm9udFNtb290aGluZwogewotICAgIHJldHVybiBGb250OjpzaG91bGRV
c2VTbW9vdGhpbmcoKTsKKyAgICByZXR1cm4gRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGlu
ZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQ3MTAsNyArNDcxMCw3IEBAICsgKHZv
aWQpaW5pdGlhbGl6ZQogICAgIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBbZGVmYXVsdHMgYm9v
bEZvcktleTpXZWJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXTsKICNlbmRpZgogCi0gICAgRm9udDo6
c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0
S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tleV0gPyBLZXJuaW5n
IHwgTGlnYXR1cmVzIDogMCk7CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGlu
Z0ZlYXR1cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNF
bmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOwog
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBhdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJs
ZWQgPSBbc2VsZiBfc2hvdWxkQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25CZUVuYWJsZWRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244684</attachid>
            <date>2015-01-15 02:21:05 -0800</date>
            <delta_ts>2015-01-15 02:53:15 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-5.patch</filename>
            <type>text/plain</type>
            <size>399994</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJDaHJvbWUuaCIKICNp
bXBvcnQgIkNocm9tZUNsaWVudC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENh
c2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgog
I2ltcG9ydCAiRnJhbWVWaWV3LmgiCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZv
bnQoYXR0clN0cmluZywgc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBkZWNvciA9IHN0eWxl
LnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAmIChUZXh0RGVjb3Jh
dGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAhPSAwKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNp
bXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkNv
bnRleHRNZW51Q29udHJvbGxlci5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENh
c2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBv
cnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCi0jaW1wb3J0
ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJIVE1MQW5jaG9y
RWxlbWVudC5oIgpAQCAtODQ4LDcgKzg0OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3R5bGUoTlMKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmli
dXRlLCBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsK
KyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5
Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
Z2V0TlNGb250KCksIHJhbmdlKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3Jl
Z3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAi
RE9NUHJpdmF0ZS5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiRHJh
Z0ltYWdlLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2lt
cG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFt
ZXMuaCIKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChOU0ZvbnQgKilfZm9udAogICAgIGF1dG8gcmVu
ZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKIH0KICNlbHNlCiAt
IChDVEZvbnRSZWYpX2ZvbnQKQEAgLTY3Nyw3ICs2NzcsNyBAQCAtIChDVEZvbnRSZWYpX2ZvbnQK
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJl
ci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
Q1RGb250KCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01VSUtpdEV4dGVuc2lvbnMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkZsb2F0UG9pbnQuaCIKLSNpbXBv
cnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVj
dGlvbi5oIgogI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJodG1sZWRpdGlu
Zy5oIgpAQCAtNzEsNyArNzEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHVzaW5n
IFdlYkNvcmU6OkZsb2F0UG9pbnQ7Ci11c2luZyBXZWJDb3JlOjpGb250OwordXNpbmcgV2ViQ29y
ZTo6Rm9udENhc2NhZGU7CiB1c2luZyBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ7CiB1c2luZyBX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OwogdXNpbmcgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDQsOCAr
MTUwNCw4IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQcm9wZXJ0eUlEKEMKIHN0YXRp
YyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5mb250KCkuZmFtaWx5Q291
bnQoKTsgKytpKQotICAgICAgICBsaXN0LmdldCgpLmFwcGVuZCh2YWx1ZUZvckZhbWlseShzdHls
ZS0+Zm9udCgpLmZhbWlseUF0KGkpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAgICAgbGlzdC5nZXQo
KS5hcHBlbmQodmFsdWVGb3JGYW1pbHkoc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5QXQoaSkp
KTsKICAgICByZXR1cm4gbGlzdDsKIH0KIApAQCAtMjU0NSw3ICsyNTQ1LDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhYwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V29yZEJyZWFrOgogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT53b3JkQnJlYWsoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2lu
ZzoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250
KCkud29yZFNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKSwgc3R5
bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6CiAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm92ZXJmbG93V3JhcCgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ291bnRlci5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgog
I2luY2x1ZGUgIlJHQkNvbG9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmPExvYWRGb250Q2FsbGJhY2s+KG5ldyBMb2FkRm9udENhbGxiYWNrKG51bUxvYWRp
bmcsIGZvbnRMb2FkZXIsIGxvYWRDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+IGNyZWF0ZUZyb21QYXJhbXMo
Y29uc3QgRGljdGlvbmFyeSYgcGFyYW1zLCBGb250TG9hZGVyJiBmb250TG9hZGVyLCBjb25zdCBG
b250JiBmb250KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+IGNyZWF0
ZUZyb21QYXJhbXMoY29uc3QgRGljdGlvbmFyeSYgcGFyYW1zLCBGb250TG9hZGVyJiBmb250TG9h
ZGVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKICAgICB7CiAgICAgICAgIFJlZlB0cjxWb2lk
Q2FsbGJhY2s+IG9uc3VjY2VzczsKICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gb25lcnJv
cjsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250KGNvbnN0IERp
Y3Rpb25hCiAgICAgU3RyaW5nIGZvbnRTdHJpbmc7CiAgICAgaWYgKCFwYXJhbXMuZ2V0KCJmb250
IiwgZm9udFN0cmluZykpCiAgICAgICAgIHJldHVybjsKLSAgICBGb250IGZvbnQ7CisgICAgRm9u
dENhc2NhZGUgZm9udDsKICAgICBpZiAoIXJlc29sdmVGb250U3R5bGUoZm9udFN0cmluZywgZm9u
dCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8TG9hZEZvbnRDYWxsYmFjaz4gY2FsbGJh
Y2sgPSBMb2FkRm9udENhbGxiYWNrOjpjcmVhdGVGcm9tUGFyYW1zKHBhcmFtcywgKnRoaXMsIGZv
bnQpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRm9udExvYWRlcjo6bG9hZEZvbnQoY29uc3Qg
RGljdGlvbmEKIGJvb2wgRm9udExvYWRlcjo6Y2hlY2tGb250KGNvbnN0IFN0cmluZyYgZm9udFN0
cmluZywgY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogVGhlIHNlY29uZCBwYXJhbWV0
ZXIgKHRleHQpIGlzIGlnbm9yZWQuCi0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZv
bnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJpbmcsIGZvbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnQuZmFtaWx5
Q291bnQoKTsgaSsrKSB7CkBAIC0yODEsNyArMjgxLDcgQEAgc3RhdGljIHZvaWQgYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKAogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3Vy
cmVudFN0eWxlKGlkLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShpZCkuZ2V0KCkp
OwogfQogCi1ib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiBm
b250U3RyaW5nLCBGb250JiBmb250KQorYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxl
KGNvbnN0IFN0cmluZyYgZm9udFN0cmluZywgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8g
SW50ZXJwcmV0IGZvbnRTdHJpbmcgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSAnZm9udCcgYXR0cmli
dXRlIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC4KICAgICBSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
KTsKQEAgLTMwMiw3ICszMDIsNyBAQCBib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250U3R5bGUo
Y29uc3QgCiAKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRlZmF1bHRGb250RGVzY3Jp
cHRpb24pOwogCi0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGUtPmZvbnQoKS5mb250U2Vs
ZWN0b3IoKSk7CisgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHN0eWxlLT5mb250Q2Fz
Y2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVy
dHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIgPSBtX2RvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CkBAIC0zMTksNyArMzE5
LDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IAogICAgIHN0eWxl
UmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShz
dHlsZVJlc29sdmVyLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlKTsKIAotICAg
IGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKTsK
ICAgICBmb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLmZvbnRTZWxlY3RvcigpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBjbGFzcyBDU1NGb250RmFjZVNvdXJjZTsKIGNsYXNzIERpY3Rpb25hcnk7
CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRD
YXNjYWRlOwogY2xhc3MgTG9hZEZvbnRDYWxsYmFjazsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVuZGluZ0V2
ZW50c1RpbWVyRmlyZWQoKSB7IGZpcmVQZW5kaW5nRXZlbnRzKCk7IH0KICAgICB2b2lkIHNjaGVk
dWxlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgZmlyZVBlbmRpbmdFdmVudHMo
KTsKLSAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udCYpOworICAg
IGJvb2wgcmVzb2x2ZUZvbnRTdHlsZShjb25zdCBTdHJpbmcmLCBGb250Q2FzY2FkZSYpOwogCiAg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJn
ZXREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRo
b3JTdHlsZVNoZQogewogICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoZmly
c3ROZXcsIHN0eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQoKSwgbV9pbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzLCB0aGlzKTsKICAgICBpZiAoYXV0byByZW5kZXJWaWV3ID0gZG9jdW1lbnQoKS5yZW5kZXJW
aWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRh
dGUoZm9udFNlbGVjdG9yKCkpOwogCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikK
ICAgICB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIoKS0+cmVzb2x2ZSgpOwpAQCAtNzQ4LDcgKzc0OCw3
IEBAIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3IKICAgICAgICAgaWYg
KCFzX3N0eWxlTm90WWV0QXZhaWxhYmxlKSB7CiAgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlID0gJlJlbmRlclN0eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7CiAgICAgICAgICAgICBz
X3N0eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5KE5PTkUpOwotICAgICAgICAgICAgc19z
dHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAg
ICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2Zv
bnRTZWxlY3Rvcik7CiAgICAgICAgIH0KICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5zZXRI
YXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CiAgICAgICAgIHJldHVybiAqc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsKQEAgLTEwMzEsOSArMTAzMSw5IEBAIFJlZjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6ZGVmYXVsdFMKICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0
aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgog
ICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCkpIHsKICAgICAg
ICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUo
KS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUo
KS0+Zm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgIG1fc3RhdGUu
c3R5bGUoKS0+Zm9udENhc2NhZGUoKS51cGRhdGUobnVsbHB0cik7CiAKICAgICByZXR1cm4gbV9z
dGF0ZS50YWtlU3R5bGUoKTsKIH0KQEAgLTE0ODQsNyArMTQ4NCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6dXBkYXRlRm9udCgpCiAgICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxl
LCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwg
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0
eWxlKTsKLSAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgc3R5
bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKICAgICBpZiAobV9zdGF0
ZS5mb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgc3R5bGUtPnNldEhhc1ZpZXdw
b3J0VW5pdHModHJ1ZSk7CiAgICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTIxODUsNyArMjE4NSw3IEBAIGlubGluZSBi
b29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKIAogICAgIC8vIENoaW5lc2UgYW5kIEph
cGFuZXNlIGxhY2sgd29yZCBib3VuZGFyeSBtYXJrcywgYW5kIHRoZXJlIGlzIG5vIGNsZWFyIGFn
cmVlbWVudCBvbiB3aGF0IGNvbnN0aXR1dGVzCiAgICAgLy8gYSB3b3JkLCBzbyB0cmVhdCB0aGUg
cG9zaXRpb24gYmVmb3JlIGFueSBDSksgY2hhcmFjdGVyIGFzIGEgd29yZCBzdGFydC4KLSAgICBp
ZiAoRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3RlcikpCisgICAgaWYg
KEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGZpcnN0Q2hhcmFjdGVyKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzaXplX3Qgd29yZEJyZWFrU2VhcmNoU3RhcnQgPSBz
dGFydCArIGxlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QAogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKICNpbXBv
cnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXIuaCIKICNp
bXBvcnQgIkhUTUxFbGVtZW50LmgiCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZv
cm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQu
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNG
b250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAq
X2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0
Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVu
dC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5k
ZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgp
OwogfQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICplZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9y
S2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAg
ICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVn
ZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0
cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBz
dHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKV0gZm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9u
dE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpO
U0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgp
IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAg
IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJI
VE1MQ29udmVydGVyLmgiCkBAIC0yMTMsNyArMjEzLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IEVkaXRvcjo6Zm9udEZvclNlbAogCiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiByZXN1
bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQgPSAm
c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZz
dHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKIAogICAgICAgICBpZiAobm9k
ZVRvUmVtb3ZlKSB7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAtMjM1LDcgKzIz
NSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAg
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMs
IGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9u
dCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAg
ICAgICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICAgICAgZm9udCA9ICZwcmltYXJ5Rm9u
dDsKICAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CkBAIC0yNTcs
NyArMjU3LDcgQEAgTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9yUwogCiAg
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGlj
dGlvbmFyeV07CiAgICAgCi0gICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CiAgICAgaWYgKGZvbnQp
CiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OihpZClmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJEb2N1bWVudExv
YWRlci5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCiAjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKLSNp
bXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5o
IgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpA
QCAtMTE1LDcgKzExNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JT
ZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250KCkucHJp
bWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKICAgICAg
ICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04pOwpAQCAtMTM1
LDcgKzEzNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAg
ICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5k
ZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmlt
YXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICAgICAgZm9udCA9ICZwcmlt
YXJ5Rm9udDsKICAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CkBA
IC0xNjAsOCArMTYwLDggQEAgTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9y
UwogICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSAhPSAwKQogICAgICAgICBbcmVzdWx0IHNl
dE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
IAotICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQot
ICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAgICAgIFty
ZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdl
dE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKIAogICAgIGlmIChzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSAmJiBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IENvbG9yOjpibGFj
aykKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEwNSw3ICsyMTA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZvbnQoYwogICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRl
ZmF1bHRGb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIG5ld1N0eWxlLT5mb250KCkudXBk
YXRlKG5ld1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOworICAgIG5ld1N0eWxlLT5mb250
Q2FzY2FkZSgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7
CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBz
dHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gY2FudmFzKCktPmRvY3Vt
ZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMjEyMiw3ICsyMTIyLDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgIHN0eWxlUmVzb2x2ZXIudXBk
YXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udCgpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9
IG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpOwogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51
cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAgICAgbW9kaWZpYWJsZVN0YXRl
KCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOwogICAgIHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9y
KCktPnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKCZtb2RpZmlhYmxlU3RhdGUoKSk7
CkBAIC0yMjg3LDcgKzIyODcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d1RleHRJCiAgICAgaWYgKGZpbGwgJiYgZ3JhZGllbnQgJiYgZ3JhZGllbnQtPmlzWmVyb1NpemUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IGFjY2Vzc0ZvbnQo
KTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGFjY2Vzc0ZvbnQoKTsKICAgICBjb25z
dCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAKICAgICBT
dHJpbmcgbm9ybWFsaXplZFRleHQgPSB0ZXh0OwpAQCAtMjM3MiwxMCArMjM3MiwxMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgICAgICAgICBtYXNrSW1h
Z2VDb250ZXh0LT50cmFuc2xhdGUobG9jYXRpb24ueCgpIC0gbWFza1JlY3QueCgpLCBsb2NhdGlv
bi55KCkgLSBtYXNrUmVjdC55KCkpOwogICAgICAgICAgICAgLy8gV2UgZHJhdyB3aGVuIGZvbnRX
aWR0aCBpcyAwIHNvIGNvbXBvc2l0aW5nIG9wZXJhdGlvbnMgKGVnLCBhICJjb3B5IiBvcCkgc3Rp
bGwgd29yay4KICAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgo
Zm9udFdpZHRoID4gMCA/ICh3aWR0aCAvIGZvbnRXaWR0aCkgOiAwKSwgMSkpOwotICAgICAgICAg
ICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIEZsb2F0UG9p
bnQoMCwgMCksIEZvbnQ6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIEZsb2F0UG9pbnQo
MCwgMCksIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1Jl
Y3QueCgpLCAtbWFza1JlY3QueSgpKTsKLSAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZv
bnROb3RSZWFkeSk7CisgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQo
Zm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5KTsKICAgICAgICAgfQogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqYyk7CkBAIC0yMzk4LDE1ICsyMzk4LDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKIAogICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVN
b2RlKHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGJlZ2luQ29tcG9zaXRl
TGF5ZXIoKTsKLSAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9u
LCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlU
ZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZv
bnROb3RSZWFkeSk7CiAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAgIGRpZERy
YXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlKCkubV9nbG9iYWxDb21wb3Np
dGUgPT0gQ29tcG9zaXRlQ29weSkgewogICAgICAgICBjbGVhckNhbnZhcygpOwotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGMtPmRyYXdC
aWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSk7CisgICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlv
biwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBkaWRE
cmF3KHRleHRSZWN0KTsKICAgICB9CiB9CkBAIC0yNDI2LDcgKzI0MjYsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6aW5mbGF0ZVN0CiAgICAgcmVjdC5pbmZsYXRlKGRlbHRhKTsK
IH0KIAotY29uc3QgRm9udCYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nlc3NGb250KCkK
K2NvbnN0IEZvbnRDYXNjYWRlJiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFjY2Vzc0ZvbnQo
KQogewogICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAj
aW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtMjcwLDcgKzI3MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIAogICAgICAgICBTdHJpbmcgbV91bnBhcnNl
ZEZvbnQ7Ci0gICAgICAgIEZvbnQgbV9mb250OworICAgICAgICBGb250Q2FzY2FkZSBtX2ZvbnQ7
CiAgICAgICAgIGJvb2wgbV9yZWFsaXplZEZvbnQ7CiAgICAgfTsKIApAQCAtMzA4LDcgKzMwOCw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0
ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIGZsb2F0IG1heFdpZHRoID0gMCwgYm9v
bCB1c2VNYXhXaWR0aCA9IGZhbHNlKTsKIAotICAgIGNvbnN0IEZvbnQmIGFjY2Vzc0ZvbnQoKTsK
KyAgICBjb25zdCBGb250Q2FzY2FkZSYgYWNjZXNzRm9udCgpOwogCiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQogICAgIHZvaWQgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1lbmNs
b3NlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TE1lbmNsb3NlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L21hdGhtbC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgU3RyaW5nIE1hdGhNTE1lbmNsb3NlRWxlbWVudDo6bG9uZ0RpdkxlZgogICAg
IFRleHRSdW4gcnVuKGNsb3NpbmdCcmFjZS5pbXBsKCksIGNsb3NpbmdCcmFjZS5sZW5ndGgoKSk7
CiAgICAgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAobm9kZSAmJiBub2RlLT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBub2Rl
LT5yZW5kZXJlcigpLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgIHBhZGRpbmcuYXBw
ZW5kTnVtYmVyKGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIHBhZGRpbmcuYXBwZW5kTGl0ZXJh
bCgicHgiKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250R2VuZXJpY0ZhbWlsaWVzLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJl
SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUg
IkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51
U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVT
dHlsZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnVTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFBv
cHVwTWVudVN0eWxlX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgUG9w
dXBNZW51U2l6ZU1pbmkKICAgICB9OwogCi0gICAgUG9wdXBNZW51U3R5bGUoY29uc3QgQ29sb3Im
IGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBGb250JiBmb250LCBi
b29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5j
ZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgYm9vbCBo
YXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRDb2xvclR5cGUgYmFja2dyb3VuZENv
bG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5cGUgbWVudVR5cGUg
PSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVwTWVudVNpemVOb3Jt
YWwpCisgICAgUG9wdXBNZW51U3R5bGUoY29uc3QgQ29sb3ImIGZvcmVncm91bmQsIGNvbnN0IENv
bG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgYm9vbCB2aXNpYmxlLCBi
b29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFwcGVhcmFuY2UsIExlbmd0aCB0ZXh0
SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlv
bk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tncm91bmRDb2xvclR5cGUgPSBEZWZh
dWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1lbnVUeXBlID0gU2VsZWN0UG9wdXAs
IFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVTaXplTm9ybWFsKQogICAgICAgICA6
IG1fZm9yZWdyb3VuZENvbG9yKGZvcmVncm91bmQpCiAgICAgICAgICwgbV9iYWNrZ3JvdW5kQ29s
b3IoYmFja2dyb3VuZCkKICAgICAgICAgLCBtX2ZvbnQoZm9udCkKQEAgLTYxLDcgKzYxLDcgQEAg
cHVibGljOgogCiAgICAgY29uc3QgQ29sb3ImIGZvcmVncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fZm9yZWdyb3VuZENvbG9yOyB9CiAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9Ci0gICAgY29uc3QgRm9udCYg
Zm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICBib29sIGlzRGlzcGxheU5vbmUoKSBjb25zdCB7
IHJldHVybiBtX2lzRGlzcGxheU5vbmU7IH0KICAgICBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNl
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0QXBwZWFyYW5jZTsgfQpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENvbG9yIG1fZm9yZWdyb3VuZENvbG9yOwogICAg
IENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotICAgIEZvbnQgbV9mb250OworICAgIEZvbnRDYXNj
YWRlIG1fZm9udDsKICAgICBib29sIG1fdmlzaWJsZTsKICAgICBib29sIG1faXNEaXNwbGF5Tm9u
ZTsKICAgICBib29sIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1MZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29u
c3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKQEAg
LTQyLDcgKzQyLDcgQEAgTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYQog
ICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0KSBjb25z
dAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29udHJvbFN0YXRlcy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlICJMZW5ndGhTaXplLmgiCkBAIC03MSw3
ICs3MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDU1Mgc3lzdGVtIGNvbG9ycyBhbmQgZm9u
dHMKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKFRoZW1lQ29sb3IpIGNvbnN0IHsgcmV0
dXJuIENvbG9yKCk7IH0KLSAgICB2aXJ0dWFsIEZvbnQgc3lzdGVtRm9udChUaGVtZUZvbnQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0IHsgcmV0dXJuIEZvbnQoKTsgfQorICAgIHZpcnR1YWwgRm9u
dENhc2NhZGUgc3lzdGVtRm9udChUaGVtZUZvbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IHsg
cmV0dXJuIEZvbnRDYXNjYWRlKCk7IH0KICAgICAKICAgICAvLyBIb3cgZmFzdCB0aGUgY2FyZXQg
YmxpbmtzIGluIHRleHQgZmllbGRzLgogICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRl
cnZhbCgpIGNvbnN0IHsgcmV0dXJuIDAuNTsgfQpAQCAtODIsMTcgKzgyLDE3IEBAIHB1YmxpYzoK
ICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29udHJv
bHMuCiAgICAgCiAgICAgLy8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVzdWx0IHNob3VsZCBoYXZl
IGEgem9vbWVkIGZvbnQgc2l6ZS4KLSAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9s
Rm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgLyp6b29tRmFjdG9yKi8p
IGNvbnN0IHsgcmV0dXJuIGZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIEZv
bnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNj
cmlwdGlvbigpOyB9CiAgICAgCiAgICAgLy8gVGhlIHNpemUgaGVyZSBpcyBpbiB6b29tZWQgY29v
cmRpbmF0ZXMgYWxyZWFkeS4gIElmIGEgbmV3IHNpemUgaXMgcmV0dXJuZWQsIGl0IGFsc28gbmVl
ZHMgdG8gYmUgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBj
b250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmIHpv
b21lZFNpemUsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXpl
OyB9CisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IC8qem9v
bUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9CiAgICAgCiAgICAgLy8gUmV0
dXJucyB0aGUgbWluaW11bSBzaXplIGZvciBhIGNvbnRyb2wgaW4gem9vbWVkIGNvb3JkaW5hdGVz
LiAgCi0gICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udCYsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBMZW5n
dGhTaXplKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCkpOyB9CisgICAgdmlydHVh
bCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENh
c2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShM
ZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQogICAgIAogICAgIC8vIEFsbG93
cyB0aGUgdGhlbWUgdG8gbW9kaWZ5IHRoZSBleGlzdGluZyBwYWRkaW5nL2JvcmRlci4KLSAgICB2
aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYs
IGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250
JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Owor
ICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdDsKICAgICAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB3aGl0ZXNwYWNl
OiBwcmUgc2hvdWxkIGJlIGZvcmNlZCBvbiBhbHdheXMuCiAgICAgdmlydHVhbCBib29sIGNvbnRy
b2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVu
dDsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
Rm9udENhY2hlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIK
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLXVzaW5nIG5hbWVz
cGFjZSBVbmljb2RlOwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gYWxsb3cgY29tcGlsYXRpb24g
b2YgT3duUHRyPFRleHRMYXlvdXQ+IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNj
ZXNzIHRvIHRoZSBUZXh0TGF5b3V0IGNsYXNzIGRlZmluaXRpb24KLXRlbXBsYXRlIDw+IHZvaWQg
ZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCog
cHRyKQotewotICAgIFdlYkNvcmU6OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOwotfQotCi19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9y
QWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4pOwotCi1jb25zdCB1aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFj
dGVyVGFibGVbMjU2XSA9IHsKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQq
LywgMSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDEgLyo/Ki8sCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMSAvKm5v
LWJyZWFrIHNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi19OwotCi1zdGF0aWMgYm9vbCBpc0RyYXduV2l0aFNW
R0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKQotewotICAgIHJldHVybiBydW4ucmVuZGVyaW5nQ29u
dGV4dCgpOwotfQotCi1zdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+
KiBzZXQ7Ci0gICAgaWYgKCFzZXQpIHsKLSAgICAgICAgc2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPjsKLSAgICAgICAgc2V0LT5hZGQoIk1TIFBHb3RoaWMiKTsKLSAgICAgICAgVUNoYXIg
dW5pY29kZU5hbWVNU1BHb3RoaWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZGMzAs
IDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21p
Y1N0cmluZyh1bmljb2RlTmFtZU1TUEdvdGhpYywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFt
ZU1TUEdvdGhpYykpKTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgUE1pbmNobyIpOwotICAgICAg
ICBVQ2hhciB1bmljb2RlTmFtZU1TUE1pbmNob1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAs
IDB4RkYzMCwgMHg2NjBFLCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmco
dW5pY29kZU5hbWVNU1BNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU1BNaW5j
aG8pKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIEdvdGhpYyIpOwotICAgICAgICBVQ2hhciB1
bmljb2RlTmFtZU1TR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHgzMEI0LCAw
eDMwQjcsIDB4MzBDMywgMHgzMEFGfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVu
aWNvZGVOYW1lTVNHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU0dvdGhpYykp
KTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgTWluY2hvIik7Ci0gICAgICAgIFVDaGFyIHVuaWNv
ZGVOYW1lTVNNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDY2MEUsIDB4Njcx
RH07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TTWluY2hvLCBX
VEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNNaW5jaG8pKSk7Ci0KLSAgICAgICAgc2V0LT5h
ZGQoIk1laXJ5byIpOwotICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1laXJ5b1tdID0gezB4MzBF
MSwgMHgzMEE0LCAweDMwRUEsIDB4MzBBQX07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmlu
Zyh1bmljb2RlTmFtZU1laXJ5bywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1laXJ5bykp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKLX0KLQotRm9udDo6
Q29kZVBhdGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87Ci0KLVR5cGVzZXR0aW5nRmVhdHVyZXMg
Rm9udDo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb250IEltcGxlbWVudGF0aW9uIChDcm9zcy1Q
bGF0Zm9ybSBQb3J0aW9uKQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotRm9udDo6Rm9udCgpCi0gICAgOiBtX2xldHRlclNwYWNpbmcoMCkKLSAgICAsIG1fd29yZFNw
YWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCi0gICAgLCBt
X3R5cGVzZXR0aW5nRmVhdHVyZXMoMCkKLXsKLX0KLQotRm9udDo6Rm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKLSAg
ICA6IG1fZm9udERlc2NyaXB0aW9uKGZkKQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNw
YWNpbmcpCi0gICAgLCBtX3dvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKQotICAgICwgbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbCh1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmQuZmlyc3RG
YW1pbHkoKSkpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5n
RmVhdHVyZXMoKSkKLXsKLX0KLQotLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3Ry
dWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCi1Gb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwgbV93
b3JkU3BhY2luZygwKQotICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKLSAg
ICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQot
ewotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQp
OwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01v
ZGUpOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0g
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Zm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwp
OwotI2VuZGlmCi19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9y
IHBsYXRmb3JtLWluZGVwZW5kZW50LgotI2lmIFBMQVRGT1JNKElPUykKLUZvbnQ6OkZvbnQoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9y
bUZvbnQoZm9udERhdGEpKQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBtX3dvcmRT
cGFjaW5nKDApCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5n
RmVhdHVyZXMoKSkKLXsKLSAgICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250RGF0YS5mb250
KCk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXpl
KHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENU
Rm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0
YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9s
ZCA6IEZvbnRXZWlnaHROb3JtYWwpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50
ZXJGb250KGZvbnREYXRhLmlzUHJpbnRlckZvbnQoKSk7Ci0gICAgbV9nbHlwaHMgPSByZXRyaWV2
ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdl
dCgpKTsKLX0KLSNlbmRpZgotCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQotICAgIDog
bV9mb250RGVzY3JpcHRpb24ob3RoZXIubV9mb250RGVzY3JpcHRpb24pCi0gICAgLCBtX2dseXBo
cyhvdGhlci5tX2dseXBocykKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNw
YWNpbmcpCi0gICAgLCBtX3dvcmRTcGFjaW5nKG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wp
Ci0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMo
KSkKLXsKLX0KLQotRm9udCYgRm9udDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQotewot
ICAgIG1fZm9udERlc2NyaXB0aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247Ci0gICAgbV9n
bHlwaHMgPSBvdGhlci5tX2dseXBoczsKLSAgICBtX2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xl
dHRlclNwYWNpbmc7Ci0gICAgbV93b3JkU3BhY2luZyA9IG90aGVyLm1fd29yZFNwYWNpbmc7Ci0g
ICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5T
eW1ib2w7Ci0gICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gb3RoZXIubV90eXBlc2V0dGluZ0Zl
YXR1cmVzOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBGb250OjpvcGVyYXRvcj09KGNv
bnN0IEZvbnQmIG90aGVyKSBjb25zdAotewotICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygp
IHx8IG90aGVyLmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbiAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbiB8
fCBtX2xldHRlclNwYWNpbmcgIT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nIHx8IG1fd29yZFNwYWNp
bmcgIT0gb3RoZXIubV93b3JkU3BhY2luZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX2dseXBocyA9PSBvdGhlci5tX2dseXBocykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKCFtX2dseXBocyB8fCAhb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250
U2VsZWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIENhbiB0aGVzZSBjYXNl
cyBhY3R1YWxseSBzb21laG93IG9jY3VyPyBBbGwgZm9udHMgc2hvdWxkIGdldCB3aXBlZCBvdXQg
YnkgZnVsbCBzdHlsZSByZWNhbGMuCi0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJz
aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1f
Z2x5cGhzLT5nZW5lcmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7Ci0gICAgLy8gVGhpcyBwYXJ0
IG9mIHRoZSBrZXkgaXMgc2hhcmVkIHdpdGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2Fj
aGluZyBGb250RGF0YSBvYmplY3RzKS4KLSAgICBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hl
S2V5IGZvbnREZXNjcmlwdGlvbkNhY2hlS2V5OwotICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDM+
IGZhbWlsaWVzOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwotICAgIHVuc2lnbmVkIGZv
bnRTZWxlY3RvclZlcnNpb247Ci0gICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmxhZ3M7Ci19Owot
Ci1zdHJ1Y3QgRm9udEdseXBoc0NhY2hlRW50cnkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRHbHlwaHNDYWNoZUVudHJ5KEZvbnRHbHlwaHNDYWNoZUtl
eSYmIGssIFJlZjxGb250R2x5cGhzPiYmIGcpCi0gICAgICAgIDoga2V5KFdURjo6bW92ZShrKSkK
LSAgICAgICAgLCBnbHlwaHMoV1RGOjptb3ZlKGcpKQotICAgIHsgfQotICAgIEZvbnRHbHlwaHND
YWNoZUtleSBrZXk7Ci0gICAgUmVmPEZvbnRHbHlwaHM+IGdseXBoczsKLX07Ci0KLXR5cGVkZWYg
SGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5Piwg
QWxyZWFkeUhhc2hlZD4gRm9udEdseXBoc0NhY2hlOwotCi1zdGF0aWMgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYSwgY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBi
KQotewotICAgIGlmIChhLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ICE9IGIuZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5mb250U2VsZWN0
b3JJZCAhPSBiLmZvbnRTZWxlY3RvcklkIHx8IGEuZm9udFNlbGVjdG9yVmVyc2lvbiAhPSBiLmZv
bnRTZWxlY3RvclZlcnNpb24gfHwgYS5mb250U2VsZWN0b3JGbGFncyAhPSBiLmZvbnRTZWxlY3Rv
ckZsYWdzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZmFtaWxpZXMuc2l6ZSgp
ICE9IGIuZmFtaWxpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGEuZmFtaWxpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KCFlcXVhbElnbm9yaW5nQ2FzZShhLmZhbWlsaWVzW2ldLmltcGwoKSwgYi5mYW1pbGllc1tpXS5p
bXBsKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIEZvbnRHbHlwaHNDYWNoZSYgZm9udEdseXBoc0NhY2hlKCkKLXsKLSAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRm9udEdseXBoc0NhY2hlLCBjYWNoZSwg
KCkpOwotICAgIHJldHVybiBjYWNoZTsKLX0KLQotdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0Nh
Y2hlKCkKLXsKLSAgICBmb250R2x5cGhzQ2FjaGUoKS5jbGVhcigpOwotfQotCi12b2lkIGNsZWFy
V2lkdGhDYWNoZXMoKQotewotICAgIGZvciAoYXV0byBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJl
Z2luKCksIGVuZCA9IGZvbnRHbHlwaHNDYWNoZSgpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgpLndpZHRoQ2FjaGUoKS5jbGVhcigpOwotfQot
Ci1zdGF0aWMgdW5zaWduZWQgbWFrZUZvbnRTZWxlY3RvckZsYWdzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
ZXNjcmlwdGlvbi5zY3JpcHQoKSkgPDwgMSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlw
dGlvbi5zbWFsbENhcHMoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ha2VGb250R2x5cGhzQ2FjaGVL
ZXkoRm9udEdseXBoc0NhY2hlS2V5JiBrZXksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQotewotICAgIGtleS5mb250RGVzY3Jp
cHRpb25DYWNoZUtleSA9IEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkoZGVzY3JpcHRp
b24pOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3Vu
dCgpOyArK2kpCi0gICAgICAgIGtleS5mYW1pbGllcy5hcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5
QXQoaSkpOwotICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxl
Y3Rvci0+dW5pcXVlSWQoKSA6IDA7Ci0gICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250
U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7Ci0gICAga2V5LmZvbnRTZWxl
Y3RvckZsYWdzID0gZm9udFNlbGVjdG9yICYmIGZvbnRTZWxlY3Rvci0+cmVzb2x2ZXNGYW1pbHlG
b3IoZGVzY3JpcHRpb24pID8gbWFrZUZvbnRTZWxlY3RvckZsYWdzKGRlc2NyaXB0aW9uKSA6IDA7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChjb25zdCBG
b250R2x5cGhzQ2FjaGVLZXkmIGtleSkKLXsKLSAgICBWZWN0b3I8dW5zaWduZWQsIDc+IGhhc2hD
b2RlczsKLSAgICBoYXNoQ29kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0ICsga2V5LmZhbWls
aWVzLnNpemUoKSk7Ci0KLSAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250RGVz
Y3JpcHRpb25DYWNoZUtleS5jb21wdXRlSGFzaCgpKTsKLSAgICBoYXNoQ29kZXMudW5jaGVja2Vk
QXBwZW5kKGtleS5mb250U2VsZWN0b3JJZCk7Ci0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVu
ZChrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVu
ZChrZXkuZm9udFNlbGVjdG9yRmxhZ3MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXkuZmFtaWxpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBl
bmQoa2V5LmZhbWlsaWVzW2ldLmltcGwoKSA/IENhc2VGb2xkaW5nSGFzaDo6aGFzaChrZXkuZmFt
aWxpZXNbaV0pIDogMCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhh
c2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKLX0K
LQotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCkKLXsK
LSAgICBWZWN0b3I8dW5zaWduZWQsIDUwPiB0b1JlbW92ZTsKLSAgICBGb250R2x5cGhzQ2FjaGU6
Oml0ZXJhdG9yIGVuZCA9IGZvbnRHbHlwaHNDYWNoZSgpLmVuZCgpOwotICAgIGZvciAoRm9udEds
eXBoc0NhY2hlOjppdGVyYXRvciBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkuaGFzT25l
UmVmKCkpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7Ci0gICAgfQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkKLSAgICAgICAg
Zm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKLX0KLQotc3RhdGljIFJlZjxG
b250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxl
Y3RvcikKLXsKLSAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIG1ha2VGb250R2x5cGhz
Q2FjaGVLZXkoa2V5LCBmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Ci0KLSAg
ICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goa2V5KTsKLSAgICBG
b250R2x5cGhzQ2FjaGU6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBmb250R2x5cGhzQ2FjaGUoKS5h
ZGQoaGFzaCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PigpKTsKLSAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtl
eSA9PSBrZXkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlw
aHMuZ2V0KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+JiBu
ZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBzdGQ6
Om1ha2VfdW5pcXVlPEZvbnRHbHlwaHNDYWNoZUVudHJ5PihXVEY6Om1vdmUoa2V5KSwgRm9udEds
eXBoczo6Y3JlYXRlKGZvbnRTZWxlY3RvcikpOwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHMg
PSBuZXdFbnRyeS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVu
cmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwgPSA1MDsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1heGlt
dW1FbnRyaWVzID0gNDAwOwotICAgIHN0YXRpYyB1bnNpZ25lZCBwcnVuZUNvdW50ZXI7Ci0gICAg
Ly8gUmVmZXJlbmNlZCBGb250R2x5cGhzIHdvdWxkIGV4aXN0IGFueXdheSBzbyBwcnVuaW5nIHRo
ZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KLSAgICBpZiAoISgrK3BydW5lQ291bnRlciAlIHVucmVm
ZXJlbmNlZFBydW5lSW50ZXJ2YWwpKQotICAgICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNG
cm9tRm9udEdseXBoc0NhY2hlKCk7Ci0gICAgLy8gUHJldmVudCBwYXRob2xvZ2ljYWwgZ3Jvd3Ro
LgotICAgIGlmIChmb250R2x5cGhzQ2FjaGUoKS5zaXplKCkgPiBtYXhpbXVtRW50cmllcykKLSAg
ICAgICAgZm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCkp
OwotICAgIHJldHVybiBnbHlwaHM7Ci19Ci0KLXZvaWQgRm9udDo6dXBkYXRlKFBhc3NSZWZQdHI8
Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Ci17Ci0gICAgbV9nbHlwaHMgPSByZXRy
aWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9y
LmdldCgpKTsKLSAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gdXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KGZpcnN0RmFtaWx5KCkpOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJl
cyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7Ci19Ci0KLWZsb2F0IEZvbnQ6OmRyYXdU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKLXsKLSAgICAvLyBEb24ndCBkcmF3
IGFueXRoaW5nIHdoaWxlIHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhl
IHByb2Nlc3Mgb2YgbG9hZGluZywKLSAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1l
bnQgaXMgc2V0IHRvIHRydWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawot
ICAgIC8vIGZvbnQpLgotICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpICYmIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7Ci0KLSAg
ICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKLSAgICAvLyBGSVhNRTog
VXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgg
a2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAg
ICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAm
JiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYg
IWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxl
eDsKLQotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpCi0gICAgICAgIHJldHVybiBk
cmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7Ci0KLSAgICByZXR1
cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLX0KLQot
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5n
Q3VzdG9tRm9udHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRvIDwgMCkKLSAgICAg
ICAgdG8gPSBydW4ubGVuZ3RoKCk7Ci0KLSAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKLQotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCi0gICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChjb250ZXh0
LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgZWxzZQotICAgICAgICBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20s
IHRvKTsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQ
YXRoKHJ1bik7Ci0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewotICAgICAgICAv
LyBUaGUgY29tcGxleCBwYXRoIGlzIG1vcmUgcmVzdHJpY3RpdmUgYWJvdXQgcmV0dXJuaW5nIGZh
bGxiYWNrIGZvbnRzIHRoYW4gdGhlIHNpbXBsZSBwYXRoLCBzbyB3ZSBuZWVkIGFuIGV4cGxpY2l0
IHRlc3QgdG8gbWFrZSB0aGVpciBiZWhhdmlvcnMgbWF0Y2guCi0gICAgICAgIGlmICghY2FuUmV0
dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkpCi0gICAgICAgICAgICBmYWxsYmFja0Zv
bnRzID0gMDsKLSAgICAgICAgLy8gVGhlIHNpbXBsZSBwYXRoIGNhbiBvcHRpbWl6ZSB0aGUgY2Fz
ZSB3aGVyZSBnbHlwaCBvdmVyZmxvdyBpcyBub3Qgb2JzZXJ2YWJsZS4KLSAgICAgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgJiYgKGdseXBoT3ZlcmZsb3cg
JiYgIWdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpKQotICAgICAgICAgICAgZ2x5cGhPdmVy
ZmxvdyA9IDA7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMgPSB0eXBl
c2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7Ci0gICAgYm9vbCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0dGVyU3BhY2lu
ZygpOwotICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2FjaGUoKS5hZGQo
cnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tlcm5pbmdP
ckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBoT3ZlcmZsb3cp
OwotICAgIGlmIChjYWNoZUVudHJ5ICYmICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkKLSAgICAg
ICAgcmV0dXJuICpjYWNoZUVudHJ5OwotCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+IGxvY2FsRmFsbGJhY2tGb250czsKLSAgICBpZiAoIWZhbGxiYWNrRm9udHMpCi0gICAgICAg
IGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwotCi0gICAgZmxvYXQgcmVzdWx0
OwotICAgIGlmIChjb2RlUGF0aFRvVXNlID09IENvbXBsZXgpCi0gICAgICAgIHJlc3VsdCA9IGZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKLQotICAgIGlmIChjYWNoZUVudHJ5ICYm
IGZhbGxiYWNrRm9udHMtPmlzRW1wdHkoKSkKLSAgICAgICAgKmNhY2hlRW50cnkgPSByZXN1bHQ7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAotewot
I2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4pKQot
ICAgICAgICByZXR1cm4gcnVuLnJlbmRlcmluZ0NvbnRleHQoKS0+ZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udCgqdGhpcywgcnVuLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwotI2VuZGlmCi0KLSAg
ICBjaGFyc0NvbnN1bWVkID0gcnVuLmxlbmd0aCgpOwotICAgIGdseXBoTmFtZSA9ICIiOwotICAg
IHJldHVybiB3aWR0aChydW4pOwotfQotCi1HbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotewotICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7Ci0gICAgICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkpIHsKLSAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gdV90b3VwcGVyKGMpOwotICAg
ICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7Ci0gICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsK
LSAgICAgICAgICAgICAgICB2YXJpYW50ID0gU21hbGxDYXBzVmFyaWFudDsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OwotICAgIH0KLQot
ICAgIGlmIChtaXJyb3IpCi0gICAgICAgIGMgPSB1X2NoYXJNaXJyb3IoYyk7Ci0KLSAgICByZXR1
cm4gbV9nbHlwaHMtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwg
dmFyaWFudCk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi1QYXNzT3duUHRyPFRleHRMYXlv
dXQ+IEZvbnQ6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRM
YXlvdXQqKQotewotfQotCi1mbG9hdCBGb250Ojp3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQs
IHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKQotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotCi1zdGF0aWMg
Y29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbXSA9IHsKLSAgICAi
QW1lcmljYW4gVHlwZXdyaXRlciIsCi0gICAgIkFyaWFsIEhlYnJldyIsCi0gICAgIkNoYWxrYm9h
cmQiLAotICAgICJDb2NoaW4iLAotICAgICJDb3JzaXZhIEhlYnJldyIsCi0gICAgIkNvdXJpZXIi
LAotICAgICJFdXBoZW1pYSBVQ0FTIiwKLSAgICAiR2VuZXZhIiwKLSAgICAiR2lsbCBTYW5zIiwK
LSAgICAiSGVpIiwKLSAgICAiSGVsdmV0aWNhIiwKLSAgICAiSG9lZmxlciBUZXh0IiwKLSAgICAi
SW5haU1hdGhpIiwKLSAgICAiS2FpIiwKLSAgICAiTHVjaWRhIEdyYW5kZSIsCi0gICAgIk1hcmtl
ciBGZWx0IiwKLSAgICAiTW9uYWNvIiwKLSAgICAiTXNodGFrYW4iLAotICAgICJOZXcgUGVuaW5p
bSBNVCIsCi0gICAgIk9zYWthIiwKLSAgICAiUmFhbmFuYSIsCi0gICAgIlNUSGVpdGkiLAotICAg
ICJTeW1ib2wiLAotICAgICJUaW1lcyIsCi0gICAgIkFwcGxlIEJyYWlsbGUiLAotICAgICJBcHBs
ZSBMaUdvdGhpYyIsCi0gICAgIkFwcGxlIExpU3VuZyIsCi0gICAgIkFwcGxlIFN5bWJvbHMiLAot
ICAgICJBcHBsZUdvdGhpYyIsCi0gICAgIkFwcGxlTXl1bmdqbyIsCi0gICAgIiNHdW5nU2VvIiwK
LSAgICAiI0hlYWRMaW5lQSIsCi0gICAgIiNQQ015dW5nam8iLAotICAgICIjUGlsR2kiLAotfTsK
LQotLy8gRm9yIGZvbnQgZmFtaWxpZXMgd2hlcmUgYW55IG9mIHRoZSBmb250cyBkb24ndCBoYXZl
IGEgdmFsaWQgZW50cnkgaW4gdGhlIE9TLzIgdGFibGUKLS8vIGZvciBhdmdDaGFyV2lkdGgsIGZh
bGxiYWNrIHRvIHRoZSBsZWdhY3kgd2Via2l0IGJlaGF2aW9yIG9mIGdldHRpbmcgdGhlIGF2Z0No
YXJXaWR0aAotLy8gZnJvbSB0aGUgd2lkdGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBh
cHBseSB0byBhIGZpeGVkIG51bWJlciBvZiBNYWMgZm9udHMsCi0vLyBidXQsIGluIG9yZGVyIHRv
IGdldCBzaW1pbGFyIHJlbmRlcmluZyBhY3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNr
IGZvcgotLy8gYWxsIHBsYXRmb3Jtcy4KLWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldp
ZHRoKCkgY29uc3QKLXsKLSAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gZmlyc3RGYW1pbHkoKTsK
LSAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCi0gICAgLy8gSW50ZXJuYWwgZm9udHMgb24g
T1MgWCBhbmQgaU9TIGFsc28gaGF2ZSBhbiBpbnZhbGlkIGVudHJ5IGluIHRoZSB0YWJsZSBmb3Ig
YXZnQ2hhcldpZHRoLgotICAgIGlmIChwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNT
dHJpbmc+KiBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IDA7Ci0KLSAgICBp
ZiAoIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwKSB7Ci0gICAgICAgIGZvbnRG
YW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gbmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5n
PjsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGgpOyArK2kpCi0gICAgICAgICAgICBmb250RmFt
aWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+YWRkKEF0b21pY1N0cmluZyhmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aFtpXSkpOwotICAgIH0KLQotICAgIHJldHVybiAhZm9udEZh
bWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0KLWJv
b2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCYgd2lkdGgpIGNv
bnN0Ci17Ci0gICAgYm9vbCBzdWNjZXNzID0gaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCk7Ci0g
ICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIHdpZHRoID0gcm91bmRmKHByaW1hcnlGb250RGF0YSgp
LmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250RGF0YSgpIG1pZ2h0IG5vdCBj
b3JyZXNwb25kIHRvIGZpcnN0RmFtaWx5KCkuCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXZv
aWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAg
IHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOwotCi0gICAgQ29kZVBhdGggY29k
ZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBj
b2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxp
Z2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRo
VG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNW
R0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAo
Y29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Ci0KLSAgICBy
ZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgZnJvbSwgdG8pOwotfQotCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4
dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0
aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXggJiYgKCF0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgfHwgaXNEcmF3bldpdGhTVkdGb250KHJ1bikpKQotICAgICAgICByZXR1
cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpOwotCi0gICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQocnVu
LCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBTdHJpbmcgbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IFN0cmluZ0J1aWxkZXIgbm9ybWFsaXplZDsKLSAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0
eShsZW5ndGgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQot
ICAgICAgICBub3JtYWxpemVkLmFwcGVuZChGb250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVy
c1tpXSkpOwotCi0gICAgcmV0dXJuIG5vcm1hbGl6ZWQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5n
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJz
LCBsZW5ndGgpOwotfQotCi1TdHJpbmcgRm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNw
YWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBib29sIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwotCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290
aGluZyhib29sIHNob3VsZFVzZVNtb290aGluZykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7Ci19
Ci0KLWJvb2wgRm9udDo6c2hvdWxkVXNlU21vb3RoaW5nKCkKLXsKLSAgICByZXR1cm4gc2hvdWxk
VXNlRm9udFNtb290aGluZzsKLX0KLQotdm9pZCBGb250OjpzZXRDb2RlUGF0aChDb2RlUGF0aCBw
KQotewotICAgIHNfY29kZVBhdGggPSBwOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250Ojpjb2Rl
UGF0aCgpCi17Ci0gICAgcmV0dXJuIHNfY29kZVBhdGg7Ci19Ci0KLXZvaWQgRm9udDo6c2V0RGVm
YXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzKQotewotICAgIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSB0eXBlc2V0dGlu
Z0ZlYXR1cmVzOwotfQotCi1UeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OmRlZmF1bHRUeXBlc2V0
dGluZ0ZlYXR1cmVzKCkKLXsKLSAgICByZXR1cm4gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJl
czsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVu
KSBjb25zdAotewotICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCi0gICAgICAgIHJldHVybiBz
X2NvZGVQYXRoOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoaXNEcmF3bldpdGhT
VkdGb250KHJ1bikpCi0gICAgICAgIHJldHVybiBTaW1wbGU7Ci0jZW5kaWYKLQotICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5m
ZWF0dXJlU2V0dGluZ3MoKS0+c2l6ZSgpID4gMCkKLSAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0g
ICAgCi0gICAgaWYgKHJ1bi5sZW5ndGgoKSA+IDEgJiYgIVdpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcygqdGhpcykpCi0gICAgICAgIHJldHVybiBDb21wbGV4OwotCi0g
ICAgaWYgKCFydW4uY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKCkpCi0gICAgICAgIHJldHVybiBT
aW1wbGU7Ci0KLSAgICBpZiAocnVuLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlOwot
Ci0gICAgLy8gU3RhcnQgZnJvbSAwIHNpbmNlIGRyYXdpbmcgYW5kIGhpZ2hsaWdodGluZyBhbHNv
IG1lYXN1cmUgdGhlIGNoYXJhY3RlcnMgYmVmb3JlIHJ1bi0+ZnJvbS4KLSAgICByZXR1cm4gY2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7Ci19
Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHVz
ZSBhIFVuaWNvZGVTZXQgaW4gcG9ydHMgd2hlcmUgSUNVIGlzIHVzZWQuIE5vdGUgdGhhdCB3ZSAK
LSAgICAvLyBjYW4ndCBzaW1wbHkgdXNlIFVuaWNvZGVDaGFyYWN0ZXIgUHJvcGVydHkvY2xhc3Mg
YmVjYXVzZSBzb21lIGNoYXJhY3RlcnMKLSAgICAvLyBhcmUgbm90ICdjb21iaW5pbmcnLCBidXQg
c3RpbGwgbmVlZCB0byBnbyB0byB0aGUgY29tcGxleCBwYXRoLgotICAgIC8vIEFsdGVybmF0aXZl
bHksIHdlIG1heSBhcyB3ZWxsIGNvbnNpZGVyIGJpbmFyeSBzZWFyY2ggb3ZlciBhIHNvcnRlZAot
ICAgIC8vIGxpc3Qgb2YgcmFuZ2VzLgotICAgIENvZGVQYXRoIHJlc3VsdCA9IFNpbXBsZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgY29uc3QgVUNo
YXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChjIDwgMHgyRTUpIC8vIFUrMDJFNSB0
aHJvdWdoIFUrMDJFOSAoTW9kaWZpZXIgTGV0dGVycyA6IFRvbmUgbGV0dGVycykgIAotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MkU5KSAKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgzMDApIC8vIFUrMDMwMCB0aHJvdWdo
IFUrMDM2RiBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDM2RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owot
Ci0gICAgICAgIGlmIChjIDwgMHgwNTkxIHx8IGMgPT0gMHgwNUJFKSAvLyBVKzA1OTEgdGhyb3Vn
aCBVKzA1Q0YgZXhjbHVkaW5nIFUrMDVCRSBIZWJyZXcgY29tYmluaW5nIG1hcmtzLCBIZWJyZXcg
cHVuY3R1YXRpb24gUGFzZXEsIFNvZiBQYXN1cSBhbmQgTnVuIEhhZnVraGEKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDA1Q0YpCi0gICAgICAgICAgICByZXR1cm4g
Q29tcGxleDsKLQotICAgICAgICAvLyBVKzA2MDAgdGhyb3VnaCBVKzEwOUYgQXJhYmljLCBTeXJp
YWMsIFRoYWFuYSwgTktvLCBTYW1hcml0YW4sIE1hbmRhaWMsCi0gICAgICAgIC8vIERldmFuYWdh
cmksIEJlbmdhbGksIEd1cm11a2hpLCBHdWphcmF0aSwgT3JpeWEsIFRhbWlsLCBUZWx1Z3UsIEth
bm5hZGEsIAotICAgICAgICAvLyBNYWxheWFsYW0sIFNpbmhhbGEsIFRoYWksIExhbywgVGliZXRh
biwgTXlhbm1hcgotICAgICAgICBpZiAoYyA8IDB4MDYwMCkgCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxMDlGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
Ci0KLSAgICAgICAgLy8gVSsxMTAwIHRocm91Z2ggVSsxMUZGIEhhbmd1bCBKYW1vIChvbmx5IEFu
Y2llbnQgS29yZWFuIHNob3VsZCBiZSBsZWZ0IGhlcmUgaWYgeW91IHByZWNvbXBvc2U7Ci0gICAg
ICAgIC8vIE1vZGVybiBLb3JlYW4gd2lsbCBiZSBwcmVjb21wb3NlZCBhcyBhIHJlc3VsdCBvZiBz
dGVwIEEpCi0gICAgICAgIGlmIChjIDwgMHgxMTAwKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChjIDw9IDB4MTFGRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0g
ICAgICAgIGlmIChjIDwgMHgxMzVEKSAvLyBVKzEzNUQgdGhyb3VnaCBVKzEzNUYgRXRoaW9waWMg
Y29tYmluaW5nIG1hcmtzCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0g
MHgxMzVGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAw
eDE3MDApIC8vIFUrMTc4MCB0aHJvdWdoIFUrMThBRiBUYWdhbG9nLCBIYW51bm9vLCBCdWhpZCwg
VGFnaGFud2EsS2htZXIsIE1vbmdvbGlhbgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChjIDw9IDB4MThBRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAg
IGlmIChjIDwgMHgxOTAwKSAvLyBVKzE5MDAgdGhyb3VnaCBVKzE5NEYgTGltYnUgKFVuaWNvZGUg
NC4wKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTk0RikKLSAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxOTgwKSAvLyBV
KzE5ODAgdGhyb3VnaCBVKzE5REYgTmV3IFRhaSBMdWUKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE5REYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MUEwMCkgLy8gVSsxQTAwIHRocm91Z2ggVSsxQ0ZGIEJ1Z2luZXNl
LCBUYWkgVGhhbSwgQmFsaW5lc2UsIEJhdGFrLCBMZXBjaGEsIFZlZGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxQ0ZGKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFEQzApIC8vIFUrMURDMCB0aHJvdWdoIFUrMURG
RiBDb21pbmluZyBkaWFjcml0aWNhbCBtYXJrIHN1cHBsZW1lbnQKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDFERkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICAvLyBVKzFFMDAgdGhyb3VnaCBVKzIwMDAgY2hhcmFjdGVycyB3aXRoIGRp
YWNyaXRpY3MgYW5kIHN0YWNrZWQgZGlhY3JpdGljcwotICAgICAgICBpZiAoYyA8PSAweDIwMDAp
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93OwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4MjBEMCkgLy8g
VSsyMEQwIHRocm91Z2ggVSsyMEZGIENvbWJpbmluZyBtYXJrcyBmb3Igc3ltYm9scwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MjBGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgyQ0VGKSAvLyBVKzJDRUYgdGhyb3Vn
aCBVKzJDRjEgQ29tYmluaW5nIG1hcmtzIGZvciBDb3B0aWMKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDJDRjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4MzAyQSkgLy8gVSszMDJBIHRocm91Z2ggVSszMDJGIElkZW9n
cmFwaGljIGFuZCBIYW5ndWwgVG9uZSBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChjIDw9IDB4MzAyRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAg
ICAgIGlmIChjIDwgMHhBNjdDKSAvLyBVK0E2N0MgdGhyb3VnaCBVK0E2N0QgQ29tYmluaW5nIG1h
cmtzIGZvciBvbGQgQ3lyaWxsaWMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
YyA8PSAweEE2N0QpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAo
YyA8IDB4QTZGMCkgLy8gVStBNkYwIHRocm91Z2ggVStBNkYxIENvbWJpbmluZyBtYXJrIGZvciBC
YW11bQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4QTZGMSkKLSAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgLy8gVStBODAwIHRocm91Z2ggVStB
QkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRlbmRlZCwKLSAg
ICAgICAvLyBIYW5ndWwgSmFtbyBFeHQuIEEsIEphdmFuZXNlLCBNeWFubWFyIEV4dGVuZGVkIEEs
IFRhaSBWaWV0LCBNZWV0ZWkgTWF5ZWssCi0gICAgICAgIGlmIChjIDwgMHhBODAwKSAKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEFCRkYpCi0gICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4RDdCMCkgLy8gVStEN0IwIHRocm91
Z2ggVStEN0ZGIEhhbmd1bCBKYW1vIEV4dC4gQgotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChjIDw9IDB4RDdGRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAg
ICAgIGlmIChjIDw9IDB4REJGRikgewotICAgICAgICAgICAgLy8gSGlnaCBzdXJyb2dhdGUKLQot
ICAgICAgICAgICAgaWYgKGkgPT0gbGVuIC0gMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgVUNoYXIgbmV4dCA9IGNoYXJhY3RlcnNbKytpXTsKLSAgICAgICAgICAg
IGlmICghVTE2X0lTX1RSQUlMKG5leHQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBVQ2hhcjMyIHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBM
RU1FTlRBUlkoYywgbmV4dCk7Ci0KLSAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFj
dGVyIDwgMHgxRjFFNikgLy8gVSsxRjFFNiB0aHJvdWdoIFUrMUYxRkYgUmVnaW9uYWwgSW5kaWNh
dG9yIFN5bWJvbHMKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4MUYxRkYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDwgMHhF
MDEwMCkgLy8gVStFMDEwMCB0aHJvdWdoIFUrRTAxRUYgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0
b3JzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHN1cHBsZW1l
bnRhcnlDaGFyYWN0ZXIgPD0gMHhFMDFFRikKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGZvciBCcmFobWkgKFUrMTEwMDAgYmxv
Y2spLCBLYWl0aGkgKFUrMTEwODAgYmxvY2spIGFuZCBvdGhlciBjb21wbGV4IHNjcmlwdHMKLSAg
ICAgICAgICAgIC8vIGluIHBsYW5lIDEgb3IgaGlnaGVyLgotCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjIDwgMHhGRTAwKSAvLyBVK0ZFMDAgdGhyb3Vn
aCBVK0ZFMEYgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0b3JzCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhGRTBGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
Ci0KLSAgICAgICAgaWYgKGMgPCAweEZFMjApIC8vIFUrRkUyMCB0aHJvdWdoIFUrRkUyRiBDb21i
aW5pbmcgaGFsZiBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9
IDB4RkUyRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKLXsKLSAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KLSAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEuCi0gICAgaWYgKGMgPj0gMHgz
NDAwICYmIGMgPD0gMHg0REJGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBD
SksgUmFkaWNhbHMgU3VwcGxlbWVudC4KLSAgICBpZiAoYyA+PSAweDJFODAgJiYgYyA8PSAweDJF
RkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIEthbmd4aSBSYWRpY2Fscy4K
LSAgICBpZiAoYyA+PSAweDJGMDAgJiYgYyA8PSAweDJGREYpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIC8vIENKSyBTdHJva2VzLgotICAgIGlmIChjID49IDB4MzFDMCAmJiBjIDw9
IDB4MzFFRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGli
aWxpdHkgSWRlb2dyYXBocy4KLSAgICBpZiAoYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMg
RXh0ZW5zaW9uIEIuCi0gICAgaWYgKGMgPj0gMHgyMDAwMCAmJiBjIDw9IDB4MkE2REYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhz
IEV4dGVuc2lvbiBDLgotICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4
dGVuc2lvbiBELgotICAgIGlmIChjID49IDB4MkI3NDAgJiYgYyA8PSAweDJCODFGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
IFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRjgwMCAmJiBjIDw9IDB4MkZBMUYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBjKQotewotICAgIC8vIDB4MkM3IENhcm9uLCBN
YW5kYXJpbiBDaGluZXNlIDNyZCBUb25lCi0gICAgLy8gMHgyQ0EgTW9kaWZpZXIgTGV0dGVyIEFj
dXRlIEFjY2VudCwgTWFuZGFyaW4gQ2hpbmVzZSAybmQgVG9uZQotICAgIC8vIDB4MkNCIE1vZGlm
aWVyIExldHRlciBHcmF2ZSBBY2Nlc3MsIE1hbmRhcmluIENoaW5lc2UgNHRoIFRvbmUgCi0gICAg
Ly8gMHgyRDkgRG90IEFib3ZlLCBNYW5kYXJpbiBDaGluZXNlIDV0aCBUb25lIAotICAgIGlmICgo
YyA9PSAweDJDNykgfHwgKGMgPT0gMHgyQ0EpIHx8IChjID09IDB4MkNCKSB8fCAoYyA9PSAweDJE
OSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjAyMCkgfHwgKGMg
PT0gMHgyMDIxKSB8fCAoYyA9PSAweDIwMzApIHx8IChjID09IDB4MjAzQikgfHwgKGMgPT0gMHgy
MDNDKQotICAgICAgICB8fCAoYyA9PSAweDIwNDIpIHx8IChjID09IDB4MjA0NykgfHwgKGMgPT0g
MHgyMDQ4KSB8fCAoYyA9PSAweDIwNDkpIHx8IChjID09IDB4MjA1MSkKLSAgICAgICAgfHwgKGMg
PT0gMHgyMEREKSB8fCAoYyA9PSAweDIwREUpIHx8IChjID09IDB4MjEwMCkgfHwgKGMgPT0gMHgy
MTAzKSB8fCAoYyA9PSAweDIxMDUpCi0gICAgICAgIHx8IChjID09IDB4MjEwOSkgfHwgKGMgPT0g
MHgyMTBBKSB8fCAoYyA9PSAweDIxMTMpIHx8IChjID09IDB4MjExNikgfHwgKGMgPT0gMHgyMTIx
KQotICAgICAgICB8fCAoYyA9PSAweDIxMkIpIHx8IChjID09IDB4MjEzQikgfHwgKGMgPT0gMHgy
MTUwKSB8fCAoYyA9PSAweDIxNTEpIHx8IChjID09IDB4MjE1MikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTU2ICYmIGMgPD0gMHgyMTVBKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE2MCAmJiBjIDw9IDB4MjE2QikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNzAgJiYgYyA8PSAweDIxN0IpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjE3RikgfHwgKGMgPT0gMHgyMTg5
KSB8fCAoYyA9PSAweDIzMDcpIHx8IChjID09IDB4MjMxMikgfHwgKGMgPT0gMHgyM0JFKSB8fCAo
YyA9PSAweDIzQkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjND
MCAmJiBjIDw9IDB4MjNDQykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0g
MHgyM0NFKSB8fCAoYyA9PSAweDI0MjMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChjID49IDB4MjQ2MCAmJiBjIDw9IDB4MjQ5MikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDI0OUMgJiYgYyA8PSAweDI0RkYpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgaWYgKChjID09IDB4MjVBMCkgfHwgKGMgPT0gMHgyNUExKSB8fCAoYyA9PSAweDI1QTIp
IHx8IChjID09IDB4MjVBQSkgfHwgKGMgPT0gMHgyNUFCKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoKGMgPT0gMHgyNUIxKSB8fCAoYyA9PSAweDI1QjIpIHx8IChjID09IDB4MjVC
MykgfHwgKGMgPT0gMHgyNUI2KSB8fCAoYyA9PSAweDI1QjcpIHx8IChjID09IDB4MjVCQykgfHwg
KGMgPT0gMHgyNUJEKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKChjID09
IDB4MjVDMCkgfHwgKGMgPT0gMHgyNUMxKSB8fCAoYyA9PSAweDI1QzYpIHx8IChjID09IDB4MjVD
NykgfHwgKGMgPT0gMHgyNUM5KSB8fCAoYyA9PSAweDI1Q0IpIHx8IChjID09IDB4MjVDQykpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNUNFICYmIGMgPD0gMHgyNUQz
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVFMiAmJiBjIDw9IDB4
MjVFNikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA9PSAweDI1RUYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjAwICYmIGMgPD0gMHgyNjAzKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2MDUpIHx8IChjID09IDB4
MjYwNikgfHwgKGMgPT0gMHgyNjBFKSB8fCAoYyA9PSAweDI2MTYpIHx8IChjID09IDB4MjYxNykg
fHwgKGMgPT0gMHgyNjQwKSB8fCAoYyA9PSAweDI2NDIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID49IDB4MjY2MCAmJiBjIDw9IDB4MjY2RikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NzIgJiYgYyA8PSAweDI2N0QpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjZBMCkgfHwgKGMgPT0gMHgyNkJEKSB8fCAoYyA9
PSAweDI2QkUpIHx8IChjID09IDB4MjcxMykgfHwgKGMgPT0gMHgyNzFBKSB8fCAoYyA9PSAweDI3
M0YpIHx8IChjID09IDB4Mjc0MCkgfHwgKGMgPT0gMHgyNzU2KSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweDI3NzYgJiYgYyA8PSAweDI3N0YpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyQjFBKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMuCi0gICAgaWYgKGMgPj0g
MHgyRkYwICYmIGMgPD0gMHgyRkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAv
LyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24sIGV4Y2x1ZGluZyAweDMwMzAuCi0gICAgaWYg
KGMgPj0gMHgzMDAwICYmIGMgPCAweDMwMzApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKGMgPiAweDMwMzAgJiYgYyA8PSAweDMwM0YpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gSGlyYWdhbmEKLSAgICBpZiAoYyA+PSAweDMwNDAgJiYgYyA8PSAweDMwOUYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gS2F0YWthbmEgCi0gICAgaWYgKGMgPj0gMHgzMEEw
ICYmIGMgPD0gMHgzMEZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEJvcG9tb2Zv
Ci0gICAgaWYgKGMgPj0gMHgzMTAwICYmIGMgPD0gMHgzMTJGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChjID49IDB4MzE5MCAmJiBjIDw9IDB4MzE5RikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBCb3BvbW9mbyBFeHRlbmRlZAotICAgIGlmIChjID49IDB4MzFBMCAm
JiBjIDw9IDB4MzFCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gCi0gICAgLy8gRW5jbG9zZWQg
Q0pLIExldHRlcnMgYW5kIE1vbnRocy4KLSAgICBpZiAoYyA+PSAweDMyMDAgJiYgYyA8PSAweDMy
RkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5
LgotICAgIGlmIChjID49IDB4MzMwMCAmJiBjIDw9IDB4MzNGRikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweEY4NjAgJiYgYyA8PSAweEY4NjIpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMuCi0gICAgaWYgKGMgPj0g
MHhGRTMwICYmIGMgPD0gMHhGRTRGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgo
YyA9PSAweEZFMTApIHx8IChjID09IDB4RkUxMSkgfHwgKGMgPT0gMHhGRTEyKSB8fCAoYyA9PSAw
eEZFMTkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweEZGMEQpIHx8
IChjID09IDB4RkYxQikgfHwgKGMgPT0gMHhGRjFDKSB8fCAoYyA9PSAweEZGMUUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtcwot
ICAgIC8vIFVzdWFsbHkgb25seSB1c2VkIGluIENKSwotICAgIGlmIChjID49IDB4RkYwMCAmJiBj
IDw9IDB4RkZFRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBFbW9qaS4KLSAgICBp
ZiAoYyA9PSAweDFGMTAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4
MUYxMTAgJiYgYyA8PSAweDFGMTI5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChj
ID49IDB4MUYxMzAgJiYgYyA8PSAweDFGMTQ5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChjID49IDB4MUYxNTAgJiYgYyA8PSAweDFGMTY5KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID49IDB4MUYxNzAgJiYgYyA8PSAweDFGMTg5KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmIChjID49IDB4MUYyMDAgJiYgYyA8PSAweDFGNkM1KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBpc0NKS0lkZW9ncmFwaChjKTsKLX0KLQotdW5zaWdu
ZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYg
aXNBZnRlckV4cGFuc2lvbikKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgaWYgKGRp
cmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ldKSkgewot
ICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lv
biA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhw
YW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcnNbaSAtIDFdKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewot
ICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBp
ZiAoZGlyZWN0aW9uID09IExUUikgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNb
aV07Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVl
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKFUxNl9JU19MRUFEKGNoYXJhY3RlcikgJiYgaSArIDEgPCBsZW5ndGggJiYgVTE2X0lTX1RS
QUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgewotICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUx
Nl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXIsIGNoYXJhY3RlcnNbaSArIDFdKTsKLSAgICAg
ICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXhwYW5kQXJv
dW5kSWRlb2dyYXBocyAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAg
IGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkp
IHsKLSAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpIC0gMV07Ci0g
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAg
ICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXIpICYmIGkgPiAxICYmIFUxNl9JU19MRUFEKGNoYXJhY3RlcnNb
aSAtIDJdKSkgewotICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVO
VEFSWShjaGFyYWN0ZXJzW2kgLSAyXSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBpLS07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAm
JiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAg
ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gY291bnQ7Ci19Ci0KLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
Y29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmll
dy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJF
eHBhbnNpb24pOwotICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwo
c3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9u
LCBpc0FmdGVyRXhwYW5zaW9uKTsKLX0KLQotYm9vbCBGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhh
c2lzKFVDaGFyMzIgYykKLXsKLSAgICBpZiAoVV9HRVRfR0NfTUFTSyhjKSAmIChVX0dDX1pfTUFT
SyB8IFVfR0NfQ05fTUFTSyB8IFVfR0NfQ0NfTUFTSyB8IFVfR0NfQ0ZfTUFTSykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEFkZGl0aW9uYWwgd29yZC1zZXBhcmF0b3IgY2hhcmFj
dGVycyBsaXN0ZWQgaW4gQ1NTIFRleHQgTGV2ZWwgMyBFZGl0b3IncyBEcmFmdCAzIE5vdmVtYmVy
IDIwMTAuCi0gICAgaWYgKGMgPT0gZXRoaW9waWNXb3Jkc3BhY2UgfHwgYyA9PSBhZWdlYW5Xb3Jk
U2VwYXJhdG9yTGluZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JEb3QKLSAgICAgICAgfHwg
YyA9PSB1Z2FyaXRpY1dvcmREaXZpZGVyIHx8IGMgPT0gdGliZXRhbk1hcmtJbnRlcnN5bGxhYmlj
VHNoZWcgfHwgYyA9PSB0aWJldGFuTWFya0RlbGltaXRlclRzaGVnQnN0YXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZvbnQ6OmlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9nbHlwaHMgJiYgbV9nbHlwaHMt
PmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7Ci19Ci0gICAgCi1HbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBpbmRleCkKLXsKLSAg
ICAvLyBJbiBnZW5lcmFsLCB3ZSB3YW50IHRvIHNraXAgZGVzY2VuZGVycy4gSG93ZXZlciwgc2tp
cHBpbmcgZGVzY2VuZGVycyBvbiBDSksgY2hhcmFjdGVycyBsZWFkcyB0byB1bmRlc2lyYWJsZSBy
ZW5kZXJpbmdzLAotICAgIC8vIHNvIHdlIHdhbnQgdG8gZHJhdyB0aHJvdWdoIENKSyBjaGFyYWN0
ZXJzIChvbiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgYmFzaXMpLgotICAgIFVDaGFyMzIgYmFz
ZUNoYXJhY3RlcjsKLSAgICB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IGdseXBoQnVmZmVyLm9m
ZnNldEluU3RyaW5nKGluZGV4KTsKLQotICAgIGlmIChvZmZzZXRJblN0cmluZyA9PSBHbHlwaEJ1
ZmZlcjo6bm9PZmZzZXQpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBubyBpZGVhIHdoaWNoIGNoYXJh
Y3RlciBzcGF3bmVkIHRoaXMgZ2x5cGguIEJhaWwuCi0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0
aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHRleHRSdW4uaXM4Qml0KCkpCi0gICAgICAgIGJhc2VDaGFyYWN0ZXIgPSB0
ZXh0UnVuLmNoYXJhY3RlcnM4KClbb2Zmc2V0SW5TdHJpbmddOwotICAgIGVsc2UKLSAgICAgICAg
VTE2X05FWFQodGV4dFJ1bi5jaGFyYWN0ZXJzMTYoKSwgb2Zmc2V0SW5TdHJpbmcsIHRleHRSdW4u
bGVuZ3RoKCksIGJhc2VDaGFyYWN0ZXIpOwotICAgIAotICAgIC8vIHVfZ2V0SW50UHJvcGVydHlW
YWx1ZSB3aXRoIFVDSEFSX0lERU9HUkFQSElDIGRvZXNuJ3QgcmV0dXJuIHRydWUgZm9yIEphcGFu
ZXNlIG9yIEtvcmVhbiBjb2RlcG9pbnRzLgotICAgIC8vIEluc3RlYWQsIHdlIGNhbiB1c2UgdGhl
ICJVbmljb2RlIGFsbG9jYXRpb24gYmxvY2siIGZvciB0aGUgY2hhcmFjdGVyLgotICAgIFVCbG9j
a0NvZGUgYmxvY2tDb2RlID0gdWJsb2NrX2dldENvZGUoYmFzZUNoYXJhY3Rlcik7Ci0gICAgc3dp
dGNoIChibG9ja0NvZGUpIHsKLSAgICBjYXNlIFVCTE9DS19DSktfUkFESUNBTFNfU1VQUExFTUVO
VDoKLSAgICBjYXNlIFVCTE9DS19DSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT046Ci0gICAgY2Fz
ZSBVQkxPQ0tfRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUzoKLSAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JB
UEhTX0VYVEVOU0lPTl9BOgotICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFM6
Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUzoKLSAgICBjYXNl
IFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9GT1JNUzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5J
RklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9COgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJ
QklMSVRZX0lERU9HUkFQSFNfU1VQUExFTUVOVDoKLSAgICBjYXNlIFVCTE9DS19DSktfU1RST0tF
UzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9DOgot
ICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0Q6Ci0gICAg
Y2FzZSBVQkxPQ0tfSURFT0dSQVBISUNfREVTQ1JJUFRJT05fQ0hBUkFDVEVSUzoKLSAgICBjYXNl
IFVCTE9DS19MSU5FQVJfQl9JREVPR1JBTVM6Ci0gICAgY2FzZSBVQkxPQ0tfRU5DTE9TRURfSURF
T0dSQVBISUNfU1VQUExFTUVOVDoKLSAgICBjYXNlIFVCTE9DS19ISVJBR0FOQToKLSAgICBjYXNl
IFVCTE9DS19LQVRBS0FOQToKLSAgICBjYXNlIFVCTE9DS19CT1BPTU9GTzoKLSAgICBjYXNlIFVC
TE9DS19CT1BPTU9GT19FWFRFTkRFRDoKLSAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNTzoKLSAg
ICBjYXNlIFVCTE9DS19IQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1POgotICAgIGNhc2UgVUJMT0NL
X0hBTkdVTF9TWUxMQUJMRVM6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURf
QToKLSAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9COgotICAgICAgICByZXR1
cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5
cGg7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6
R2x5cGhVbmRlcmxpbmVUeXBlOjpTa2lwRGVzY2VuZGVyczsKLSAgICB9Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250X2gKLSNkZWZpbmUg
Rm9udF9oCi0KLSNpbmNsdWRlICJEYXNoQXJyYXkuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2luY2x1
ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KLQotLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29tcGxleCB0byAwIGFuZCBjb25mbGljdHMK
LS8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0aCBlbnVtLgotI2lmZGVmIENvbXBsZXgK
LSN1bmRlZiBDb21wbGV4Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRm9udERhdGE7Ci1jbGFzcyBGb250
TWV0cmljczsKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBGb250U2VsZWN0b3I7Ci1j
bGFzcyBHbHlwaEJ1ZmZlcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIExheW91dFJl
Y3Q7Ci1jbGFzcyBSZW5kZXJUZXh0OwotY2xhc3MgVGV4dExheW91dDsKLWNsYXNzIFRleHRSdW47
Ci0KLXN0cnVjdCBHbHlwaERhdGE7Ci0KLXN0cnVjdCBHbHlwaE92ZXJmbG93IHsKLSAgICBHbHlw
aE92ZXJmbG93KCkKLSAgICAgICAgOiBsZWZ0KDApCi0gICAgICAgICwgcmlnaHQoMCkKLSAgICAg
ICAgLCB0b3AoMCkKLSAgICAgICAgLCBib3R0b20oMCkKLSAgICAgICAgLCBjb21wdXRlQm91bmRz
KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQgJiYgIXRvcCAmJiAhYm90dG9tOwotICAg
IH0KLQotICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNvbnN0IEdseXBoT3ZlcmZsb3cmIG90aGVy
KQotICAgIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIG90aGVyLmxlZnQpOwotICAg
ICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhlci5yaWdodCk7Ci0gICAgICAgIHRvcCA9
IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKLSAgICAgICAgYm90dG9tID0gc3RkOjptYXgoYm90
dG9tLCBvdGhlci5ib3R0b20pOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBH
bHlwaE92ZXJmbG93JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsZWZ0ICE9IG90aGVy
LmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwgdG9wICE9IG90aGVyLnRvcCB8fCBib3R0
b20gIT0gb3RoZXIuYm90dG9tOwotICAgIH0KLQotICAgIGludCBsZWZ0OwotICAgIGludCByaWdo
dDsKLSAgICBpbnQgdG9wOwotICAgIGludCBib3R0b207Ci0gICAgYm9vbCBjb21wdXRlQm91bmRz
OwotfTsKLQotY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xhdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVt
IGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERlc2NlbmRlcnMsIFNraXBHbHlwaCwgRHJh
d092ZXJHbHlwaH07Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zTW9yZVBhdGhzKCkgPSAwOwot
ICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOwotICAgIHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0
LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKLSAgICB2aXJ0dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1
bmRlcmxpbmVUeXBlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwotICAg
IHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQotfTsKLUdseXBoVG9QYXRoVHJh
bnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7Ci0KLWNsYXNzIEZvbnQgewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdv
cmRTcGFjaW5nKTsKLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUg
cGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250LgotICAgIFdFQkNPUkVf
RVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9u
dFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotI2lmIFBMQVRG
T1JNKElPUykKLSAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4pOwotI2VuZGlmCi0gICAgfkZvbnQoKTsKLQotICAgIEZvbnQoY29uc3QgRm9u
dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9wZXJhdG9yPShjb25zdCBGb250Jik7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNv
bnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb247IH0KLQotICAg
IGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRl
ZFBpeGVsU2l6ZSgpOyB9Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRy
PEZvbnRTZWxlY3Rvcj4pIGNvbnN0OwotCi0gICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkg
fTsKLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0g
LTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwotCi0g
ICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0
ZW50cykgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0aChjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVu
JiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7Ci0KLSAgICBQ
YXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBv
cywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQm
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cyA9IDApOwotCi0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVu
JiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkg
Y29uc3Q7Ci0KLSAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24uc21hbGxDYXBzKCk7IH0KLQotICAgIGZsb2F0IHdvcmRTcGFjaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQotICAgIGZsb2F0IGxldHRlclNwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KLSAgICB2b2lkIHNldFdvcmRTcGFjaW5nKGZs
b2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KLSAgICB2b2lkIHNldExldHRlclNwYWNpbmco
ZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9Ci0gICAgYm9vbCBpc0ZpeGVkUGl0Y2go
KSBjb25zdDsKLSAgICBib29sIGlzUHJpbnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Ci0gICAgCi0gICAgRm9udFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKTsgfQotCi0gICAgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZXNldHRpbmdGZWF0dXJlcz4obV90
eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZh
bWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0K
LSAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLmZhbWlseUNvdW50KCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseUF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9
Ci0KLSAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLml0YWxpYygpOyB9Ci0gICAgRm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQotICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhW
YXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7
IH0KLQotICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy0+
aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQotCi0gICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuZm9udE1ldHJpY3MoKTsgfQot
ICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEoKS5z
cGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KLSAgICBmbG9hdCB0YWJXaWR0aChjb25z
dCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25z
dDsKLSAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikg
Y29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZvbnREYXRhKCksIHRhYlNpemUsIHBvc2l0
aW9uKTsgfQotICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3Q7Ci0gICAg
Ym9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7
IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCi0KLSAgICBpbnQgZW1waGFzaXNNYXJrQXNjZW50
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgIGludCBlbXBoYXNpc01hcmtEZXNjZW50
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYg
cHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7Ci0gICAgY29uc3QgRm9udFJhbmdlcyYgZmFsbGJhY2tS
YW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQp
IGNvbnN0OwotICAgIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBjb25zdDsKLSNlbmRpZgotCi0gICAgc3Rh
dGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7Ci0gICAgc3RhdGljIGJvb2wgaXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKLQotICAgIC8vIEJFV0FSRTogSWYgaXNBZnRlckV4
cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rpb24gY2FsbCwgdGhlbiB0aGUgcmV0dXJu
ZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBvcnR1bml0eQotICAgIC8vIHdoaWNoIG1h
eSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQuIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0
ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQoKSBjb21wZW5zYXRlcwotICAgIC8v
IGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4
cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgotICAgIHN0YXRpYyB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29sKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsKLQotICAgIGVudW0gQ29kZVBhdGggeyBB
dXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93IH07Ci0gICAgQ29k
ZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwotICAgIHN0YXRpYyBDb2RlUGF0
aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJu
IFNpbXBsZTsgfQotICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKLQotICAgIGJvb2wgcHJpbWFyeUZvbnREYXRhSXNT
eXN0ZW1Gb250KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBGb3JUZXh0RW1waGFzaXNP
ck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07Ci0KLSAgICAvLyBS
ZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0
bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNp
cykgY29uc3Q7Ci0gICAgZmxvYXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
LSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxv
YXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIGludCBv
ZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0
aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0RW1waGFz
aXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYsIEdseXBoRGF0YSYpIGNvbnN0Owot
Ci0gICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCk7
Ci0gICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KTsKLQotICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAg
ZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
aW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5v
dEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgZmxvYXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICBmbG9h
dCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkg
Y29uc3Q7Ci0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsK
LSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNv
bnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4
cGFuc2lvbik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wm
IGlzQWZ0ZXJFeHBhbnNpb24pOwotCi0gICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwot
ICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKLQotcHVibGljOgot
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0
b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRvU2l6aW5nKG90aGVyLm1fZm9udERlc2Ny
aXB0aW9uKQotICAgICAgICAgICAgJiYgbV9sZXR0ZXJTcGFjaW5nID09IG90aGVyLm1fbGV0dGVy
U3BhY2luZwotICAgICAgICAgICAgJiYgbV93b3JkU3BhY2luZyA9PSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRp
ZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhzLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsKLSAgICBzdGF0aWMgQ29kZVBhdGggY29k
ZVBhdGgoKTsKLSAgICBzdGF0aWMgQ29kZVBhdGggc19jb2RlUGF0aDsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0
aW5nRmVhdHVyZXMpOwotICAgIHN0YXRpYyBUeXBlc2V0dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBzX3JvdW5kaW5n
SGFja0NoYXJhY3RlclRhYmxlWzI1Nl07Ci0gICAgc3RhdGljIGJvb2wgaXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIoVUNoYXIzMiBjKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEoYyAmIH4weEZGKSAm
JiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2NdOwotICAgIH0KLQotICAgIEZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNl
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwg
YyA9PSBub0JyZWFrU3BhY2U7IH0KLSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJl
YXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAw
eDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0gc29mdEh5cGhlbiB8fCBjID09
IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9IDB4MjAwZikgfHwgKGMgPj0g
MHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBj
ID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAgc3RhdGljIGJvb2wgY2FuUmVj
ZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOwotCi0gICAgc3RhdGljIGlubGluZSBVQ2hhciBu
b3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRyZWF0
QXNTcGFjZShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotCi0gICAgICAg
IGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVy
biB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyOwotICAgIH0KLQot
ICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhcios
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICBib29sIHVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsgfQotICAgIEZvbnRHbHlw
aHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmdldCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0OwotCi0gICAgVHlwZXNldHRp
bmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSA9IG1fZm9udERlc2NyaXB0
aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVh
dHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwotCi0gICAgICAgIHN3aXRjaCAo
dGV4dFJlbmRlcmluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBBdXRvVGV4dFJlbmRlcmluZzoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wdGltaXplU3BlZWQ6Ci0gICAgICAgICAg
ICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9uOgotICAgICAgICBjYXNlIE9wdGltaXpl
TGVnaWJpbGl0eToKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobV9mb250
RGVzY3JpcHRpb24ua2VybmluZygpKSB7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpO
b25lS2VybmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzICY9IH5LZXJuaW5nOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3JtYWxLZXJuaW5nOgot
ICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24uY29tbW9u
TGlnYXR1cmVzU3RhdGUoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RGlzYWJs
ZWRMaWdhdHVyZXNTdGF0ZToKLSAgICAgICAgICAgIGZlYXR1cmVzICY9IH5MaWdhdHVyZXM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRM
aWdhdHVyZXNTdGF0ZToKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IExpZ2F0dXJlczsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBmZWF0dXJlczsKLSAgICB9Ci0KLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2Rl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwotCi0gICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERl
c2NyaXB0aW9uOwotICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1fZ2x5cGhzOwotICAg
IGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKLSAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOwotICAgIG11
dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAgIG11dGFibGUgdW5zaWdu
ZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8gKFR5cGVzZXR0aW5nRmVhdHVyZXMpIENh
Y2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnREZXNjcmlwdGlvbi4KLX07Ci0KLXZvaWQg
aW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJp
ZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Ci12b2lkIGNsZWFyV2lkdGhDYWNoZXMoKTsKLQotaW5s
aW5lIEZvbnQ6On5Gb250KCkKLXsKLX0KLQotaW5saW5lIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBG
b250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250RGVzY3JpcHRp
b24pOwotfQotCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJl
dHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24s
IGluZGV4KTsKLX0KLQotaW5saW5lIGJvb2wgRm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJldHVybiBtX2dseXBocy0+aXNGaXhlZFBpdGNo
KG1fZm9udERlc2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIEZvbnRTZWxlY3RvciogRm9udDo6Zm9u
dFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9u
dFNlbGVjdG9yKCkgOiAwOwotfQotCi1pbmxpbmUgZmxvYXQgRm9udDo6dGFiV2lkdGgoY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3QKLXsKLSAgICBpZiAoIXRhYlNpemUpCi0gICAgICAgIHJldHVybiBsZXR0ZXJTcGFj
aW5nKCk7Ci0gICAgZmxvYXQgdGFiV2lkdGggPSB0YWJTaXplICogZm9udERhdGEuc3BhY2VXaWR0
aCgpICsgbGV0dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0
aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Ci0gICAgcmV0dXJuICh0YWJEZWx0YVdpZHRo
IDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7
Ci19Ci0KLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3du
ZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCopOwotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgi
CiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBs
YXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxE
YXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcDoxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKwor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUg
IkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIlRleHRS
dW4uaCIKKyNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKKworbmFtZXNw
YWNlIFdURiB7CisKKy8vIGFsbG93IGNvbXBpbGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBp
biBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBj
bGFzcyBkZWZpbml0aW9uCit0ZW1wbGF0ZSA8PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6
OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqIHB0cikKK3sKKyAgICBXZWJDb3JlOjpG
b250OjpkZWxldGVMYXlvdXQocHRyKTsKK30KKworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKworY29uc3Qg
dWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7CisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAg
IDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSov
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8q
PyovLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MAorfTsKKworc3RhdGljIGJvb2wgaXNEcmF3bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1
bikKK3sKKyAgICByZXR1cm4gcnVuLnJlbmRlcmluZ0NvbnRleHQoKTsKK30KKworc3RhdGljIGJv
b2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KQoreworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogc2V0OworICAgIGlmICghc2V0KSB7
CisgICAgICAgIHNldCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZz47CisgICAgICAgIHNldC0+
YWRkKCJNUyBQR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10g
PSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMz
LCAweDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BH
b3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU1BHb3RoaWMpKSk7CisKKyAgICAg
ICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BN
aW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFE
fTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBX
VEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQTWluY2hvKSkpOworCisgICAgICAgIHNldC0+
YWRkKCJNUyBHb3RoaWMiKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0g
ezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07
CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZf
QVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNHb3RoaWMpKSk7CisKKyAgICAgICAgc2V0LT5hZGQo
Ik1TIE1pbmNobyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhG
RjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBFLCAweDY3MUR9OworICAgICAgICBzZXQtPmFkZChB
dG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01pbmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2Rl
TmFtZU1TTWluY2hvKSkpOworCisgICAgICAgIHNldC0+YWRkKCJNZWlyeW8iKTsKKyAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMw
QUF9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdU
Rl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNZWlyeW8pKSk7CisgICAgfQorICAgIHJldHVybiBz
ZXQtPmNvbnRhaW5zKGZhbWlseSk7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBh
dGggPSBBdXRvOworCitUeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0
aW5nRmVhdHVyZXMgPSAwOworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvbnQ6OkZvbnQoKQorICAgIDog
bV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisgICAgLCBtX3VzZUJh
Y2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDAp
Cit7Cit9CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihm
ZCkKKyAgICAsIG1fbGV0dGVyU3BhY2luZyhsZXR0ZXJTcGFjaW5nKQorICAgICwgbV93b3JkU3Bh
Y2luZyh3b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFj
a3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZkLmZpcnN0RmFtaWx5KCkpKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7Cit9CisKKy8v
IEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5k
ZW50LgorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBp
c1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKKyAgICA6
IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCisg
ICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSkKK3sKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50ZXJGb250KTsKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZv
bnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShD
VEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNl
dElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKKyNlbmRpZgorfQorCisvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
KyNpZiBQTEFURk9STShJT1MpCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9n
bHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAs
IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgQ1RG
b250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50
ZXJGb250KCkpOworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMo
bV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Cit9CisjZW5kaWYKKworRm9u
dDo6Rm9udChjb25zdCBGb250JiBvdGhlcikKKyAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVy
Lm1fZm9udERlc2NyaXB0aW9uKQorICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCisgICAg
LCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQorICAgICwgbV93b3JkU3Bh
Y2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQorICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJv
bChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKQorICAgICwgbV90eXBlc2V0dGluZ0Zl
YXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7Cit9CisKK0ZvbnQmIEZvbnQ6
Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK3sKKyAgICBtX2ZvbnREZXNjcmlwdGlvbiA9
IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOworICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7
CisgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOworICAgIG1fd29y
ZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIG1fdXNlQmFja3NsYXNoQXNZZW5T
eW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOworICAgIG1fdHlwZXNldHRp
bmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNldHRpbmdGZWF0dXJlczsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK2Jvb2wgRm9udDo6b3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QK
K3sKKyAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0
b21Gb250cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9mb250RGVzY3Jp
cHRpb24gIT0gb3RoZXIubV9mb250RGVzY3JpcHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90
aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dvcmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNp
bmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9n
bHlwaHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVy
Lm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzLT5mb250
U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVjdG9yKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAvLyBDYW4gdGhlc2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1
cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lwZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgor
ICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhz
LT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBvdGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCBGb250
R2x5cGhzQ2FjaGVLZXkgeworICAgIC8vIFRoaXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3
aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cyku
CisgICAgRm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNo
ZUtleTsKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICB1bnNpZ25l
ZCBmb250U2VsZWN0b3JJZDsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJzaW9uOworICAg
IHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdzOworfTsKKworc3RydWN0IEZvbnRHbHlwaHNDYWNo
ZUVudHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGb250
R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhzQ2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4m
JiBnKQorICAgICAgICA6IGtleShXVEY6Om1vdmUoaykpCisgICAgICAgICwgZ2x5cGhzKFdURjo6
bW92ZShnKSkKKyAgICB7IH0KKyAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OworICAgIFJlZjxG
b250R2x5cGhzPiBnbHlwaHM7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6
dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlw
aHNDYWNoZTsKKworc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVL
ZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYikKK3sKKyAgICBpZiAoYS5mb250RGVz
Y3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuZm9udFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJ
ZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24gIT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEu
Zm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250U2VsZWN0b3JGbGFncykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChhLmZhbWlsaWVzLnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZh
bWlsaWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5m
YW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxpZXNbaV0uaW1wbCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBGb250R2x5
cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwgY2FjaGUsICgpKTsKKyAgICByZXR1cm4gY2FjaGU7
Cit9CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgZm9udEdseXBo
c0NhY2hlKCkuY2xlYXIoKTsKK30KKwordm9pZCBjbGVhcldpZHRoQ2FjaGVzKCkKK3sKKyAgICBm
b3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhz
Q2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPmdseXBo
cy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG1ha2VG
b250U2VsZWN0b3JGbGFncyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8
IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOworfQor
CitzdGF0aWMgdm9pZCBtYWtlRm9udEdseXBoc0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYg
a2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcikKK3sKKyAgICBrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVz
Y3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRlc2NyaXB0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKQorICAgICAgICBrZXku
ZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpKTsKKyAgICBrZXkuZm9udFNl
bGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwor
ICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9y
LT52ZXJzaW9uKCkgOiAwOworICAgIGtleS5mb250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3Rv
ciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVzRmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VG
b250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlvbikgOiAwOworfQorCitzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkp
Cit7CisgICAgVmVjdG9yPHVuc2lnbmVkLCA3PiBoYXNoQ29kZXM7CisgICAgaGFzaENvZGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtleS5mYW1pbGllcy5zaXplKCkpOworCisgICAgaGFz
aENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0
ZUhhc2goKSk7CisgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9y
SWQpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNp
b24pOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdz
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytp
KQorICAgICAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBs
KCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2goa2V5LmZhbWlsaWVzW2ldKSA6IDApOworCisgICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29k
ZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7Cit9CisKK3ZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkLCA1
MD4gdG9SZW1vdmU7CisgICAgRm9udEdseXBoc0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5
cGhzQ2FjaGUoKS5lbmQoKTsKKyAgICBmb3IgKEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQg
PSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgpLmhhc09uZVJlZigpKQorICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGl0LT5rZXkpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92
ZSh0b1JlbW92ZVtpXSk7Cit9CisKK3N0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFk
ZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCit7CisgICAgRm9udEdseXBo
c0NhY2hlS2V5IGtleTsKKyAgICBtYWtlRm9udEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2Ny
aXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworCisgICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1
dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7CisgICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0NhY2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0
cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRy
eSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0ga2V5KQorICAgICAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Z2x5cGhzLmdldCgpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgIG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhz
Q2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSksIEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0
b3IpKTsKKyAgICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQo
KTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFs
ID0gNTA7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9IDQwMDsKKyAgICBz
dGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVyOworICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBo
cyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnku
CisgICAgaWYgKCEoKytwcnVuZUNvdW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkK
KyAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwor
ICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2FsIGdyb3d0aC4KKyAgICBpZiAoZm9udEdseXBoc0Nh
Y2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJpZXMpCisgICAgICAgIGZvbnRHbHlwaHNDYWNoZSgp
LnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpKTsKKyAgICByZXR1cm4gZ2x5cGhzOwor
fQorCit2b2lkIEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVj
dG9yKSBjb25zdAoreworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZh
bWlseSgpKTsKKyAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdG
ZWF0dXJlcygpOworfQorCitmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24pIGNvbnN0Cit7CisgICAgLy8gRG9uJ3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUg
dXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCisg
ICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3
aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sKKyAgICAvLyBmb250KS4KKyAgICBpZiAo
aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9O
b3RQYWludElmRm9udE5vdFJlYWR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHRvID0gKHRv
ID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOworCisgICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKKyAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CisKKyAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQorICAgICAgICByZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwg
cnVuLCBwb2ludCwgZnJvbSwgdG8pOworCisgICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250
ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh0byA8IDApCisgICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwor
CisgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CisgICAgLy8gRklY
TUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3
aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUw
CisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVz
KCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkp
ICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgY29kZVBhdGhUb1VzZSA9IENv
bXBsZXg7CisKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQorICAgICAgICBkcmF3
RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJv
bSwgdG8pOworICAgIGVsc2UKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Cit9CisKK2Zsb2F0IEZvbnQ6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorewor
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKKyAgICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBt
b3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVybmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBz
aW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBleHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVo
YXZpb3JzIG1hdGNoLgorICAgICAgICBpZiAoIWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpKQorICAgICAgICAgICAgZmFsbGJhY2tGb250cyA9IDA7CisgICAgICAgIC8vIFRo
ZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cg
aXMgbm90IG9ic2VydmFibGUuCisgICAgICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdp
dGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21w
dXRlQm91bmRzKSkKKyAgICAgICAgICAgIGdseXBoT3ZlcmZsb3cgPSAwOworICAgIH0KKworICAg
IGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtl
cm5pbmcgfCBMaWdhdHVyZXMpOworICAgIGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNp
bmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRlclNwYWNpbmcoKTsKKyAgICBmbG9hdCogY2FjaGVF
bnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFj
aW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92ZXJmbG93KTsKKyAgICBpZiAoY2FjaGVFbnRyeSAm
JiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkpCisgICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsK
KworICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7
CisgICAgaWYgKCFmYWxsYmFja0ZvbnRzKQorICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2Fs
RmFsbGJhY2tGb250czsKKworICAgIGZsb2F0IHJlc3VsdDsKKyAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KQorICAgICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQo
cnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhP
dmVyZmxvdyk7CisKKyAgICBpZiAoY2FjaGVFbnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5
KCkpCisgICAgICAgICpjYWNoZUVudHJ5ID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2Zsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1
bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgcmV0dXJuIHJ1bi5yZW5k
ZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnND
b25zdW1lZCwgZ2x5cGhOYW1lKTsKKyNlbmRpZgorCisgICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5s
ZW5ndGgoKTsKKyAgICBnbHlwaE5hbWUgPSAiIjsKKyAgICByZXR1cm4gd2lkdGgocnVuKTsKK30K
KworR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wg
bWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK3sKKyAgICBpZiAodmFyaWFu
dCA9PSBBdXRvVmFyaWFudCkgeworICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxD
YXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7CisgICAgICAgICAgICBV
Q2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihjKTsKKyAgICAgICAgICAgIGlmICh1cHBlckMgIT0g
YykgeworICAgICAgICAgICAgICAgIGMgPSB1cHBlckM7CisgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2
YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKKyAgICB9CisKKyAgICBpZiAobWlycm9yKQorICAgICAg
ICBjID0gdV9jaGFyTWlycm9yKGMpOworCisgICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOworfQorCisjaWYgIVBM
QVRGT1JNKENPQ09BKQorUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQo
UmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KikKK3sKK30KKworZmxvYXQg
Rm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKworc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGll
c1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7CisgICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAor
ICAgICJBcmlhbCBIZWJyZXciLAorICAgICJDaGFsa2JvYXJkIiwKKyAgICAiQ29jaGluIiwKKyAg
ICAiQ29yc2l2YSBIZWJyZXciLAorICAgICJDb3VyaWVyIiwKKyAgICAiRXVwaGVtaWEgVUNBUyIs
CisgICAgIkdlbmV2YSIsCisgICAgIkdpbGwgU2FucyIsCisgICAgIkhlaSIsCisgICAgIkhlbHZl
dGljYSIsCisgICAgIkhvZWZsZXIgVGV4dCIsCisgICAgIkluYWlNYXRoaSIsCisgICAgIkthaSIs
CisgICAgIkx1Y2lkYSBHcmFuZGUiLAorICAgICJNYXJrZXIgRmVsdCIsCisgICAgIk1vbmFjbyIs
CisgICAgIk1zaHRha2FuIiwKKyAgICAiTmV3IFBlbmluaW0gTVQiLAorICAgICJPc2FrYSIsCisg
ICAgIlJhYW5hbmEiLAorICAgICJTVEhlaXRpIiwKKyAgICAiU3ltYm9sIiwKKyAgICAiVGltZXMi
LAorICAgICJBcHBsZSBCcmFpbGxlIiwKKyAgICAiQXBwbGUgTGlHb3RoaWMiLAorICAgICJBcHBs
ZSBMaVN1bmciLAorICAgICJBcHBsZSBTeW1ib2xzIiwKKyAgICAiQXBwbGVHb3RoaWMiLAorICAg
ICJBcHBsZU15dW5nam8iLAorICAgICIjR3VuZ1NlbyIsCisgICAgIiNIZWFkTGluZUEiLAorICAg
ICIjUENNeXVuZ2pvIiwKKyAgICAiI1BpbEdpIiwKK307CisKKy8vIEZvciBmb250IGZhbWlsaWVz
IHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9uJ3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBP
Uy8yIHRhYmxlCisvLyBmb3IgYXZnQ2hhcldpZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdl
YmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRoZSBhdmdDaGFyV2lkdGgKKy8vIGZyb20gdGhlIHdp
ZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2VlbXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIg
b2YgTWFjIGZvbnRzLAorLy8gYnV0LCBpbiBvcmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcg
YWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhpcyBjaGVjayBmb3IKKy8vIGFsbCBwbGF0Zm9ybXMu
Citib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Cit7CisgICAgQXRv
bWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUg
YW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorCisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0
aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOworCisgICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aE1hcCkgeworICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJX
aWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZz47CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoKTsgKytpKQorICAgICAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lk
dGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhb
aV0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldp
ZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOworfQorCitib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hh
cldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAoreworICAgIGJvb2wgc3VjY2Vz
cyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOworICAgIGlmIChzdWNjZXNzKQorICAgICAg
ICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJ
WE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWls
eSgpLgorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVj
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5s
ZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChy
dW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxl
cyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlw
ZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykg
IT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNv
ZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxl
eCkKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwg
c2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOworCisgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKK30KKworaW50
IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBm
YXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBh
bmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29k
ZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICghdHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKworICAgIHJldHVybiBv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxp
bmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6
ZWQ7CisgICAgbm9ybWFsaXplZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZC5hcHBl
bmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKKworICAgIHJldHVybiBu
b3JtYWxpemVkLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4g
bm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworU3RyaW5n
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJz
LCBsZW5ndGgpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1
ZTsKKwordm9pZCBGb250OjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9v
dGhpbmcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzaG91bGRVc2VGb250
U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3RoaW5nOworfQorCitib29sIEZvbnQ6OnNob3VsZFVz
ZVNtb290aGluZygpCit7CisgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Cit9CisK
K3ZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3sKKyAgICBzX2NvZGVQYXRoID0g
cDsKK30KKworRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoKQoreworICAgIHJldHVybiBz
X2NvZGVQYXRoOworfQorCit2b2lkIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKK3sKKyAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKK30KKworVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCit7CisgICAg
cmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisKK0ZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBpZiAoc19j
b2RlUGF0aCAhPSBBdXRvKQorICAgICAgICByZXR1cm4gc19jb2RlUGF0aDsKKworI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgaWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAgICAgICBy
ZXR1cm4gU2ltcGxlOworI2VuZGlmCisKKyAgICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVy
ZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUo
KSA+IDApCisgICAgICAgIHJldHVybiBDb21wbGV4OworICAgIAorICAgIGlmIChydW4ubGVuZ3Ro
KCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRo
aXMpKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgIGlmICghcnVuLmNoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aCgpKQorICAgICAgICByZXR1cm4gU2ltcGxlOworCisgICAgaWYgKHJ1bi5p
czhCaXQoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIC8vIFN0YXJ0IGZyb20gMCBz
aW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRpbmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJz
IGJlZm9yZSBydW4tPmZyb20uCisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVu
LmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250
OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW4pCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRz
IHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRoYXQgd2UgCisgICAgLy8gY2FuJ3Qgc2ltcGx5IHVz
ZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJz
CisgICAgLy8gYXJlIG5vdCAnY29tYmluaW5nJywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhl
IGNvbXBsZXggcGF0aC4KKyAgICAvLyBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25z
aWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBzb3J0ZWQKKyAgICAvLyBsaXN0IG9mIHJhbmdlcy4K
KyAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwor
ICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBVKzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVy
IExldHRlcnMgOiBUb25lIGxldHRlcnMpICAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDJFOSkgCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAgdGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNy
aXRpY2FsIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
NkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MDU5
MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkxIHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1
QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywgSGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2Yg
UGFzdXEgYW5kIE51biBIYWZ1a2hhCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KGMgPD0gMHgwNUNGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgLy8g
VSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJpYywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJp
dGFuLCBNYW5kYWljLAorICAgICAgICAvLyBEZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwg
R3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVsdWd1LCBLYW5uYWRhLCAKKyAgICAgICAgLy8gTWFs
YXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8sIFRpYmV0YW4sIE15YW5tYXIKKyAgICAgICAgaWYg
KGMgPCAweDA2MDApIAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4
MTA5RikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8vIFUrMTEwMCB0
aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAob25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUg
bGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3NlOworICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdp
bGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1bHQgb2Ygc3RlcCBBKQorICAgICAgICBpZiAoYyA8
IDB4MTEwMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDExRkYp
CisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTM1RCkg
Ly8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0aGlvcGljIGNvbWJpbmluZyBtYXJrcworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MTM1RikKKyAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3Vn
aCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywgQnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xp
YW4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDE4QUYpCisgICAg
ICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsx
OTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChVbmljb2RlIDQuMCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweDE5NEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICBpZiAoYyA8IDB4MTk4MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5l
dyBUYWkgTHVlCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOURG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDFBMDAp
IC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBCdWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBC
YXRhaywgTGVwY2hhLCBWZWRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MUNGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3VnaCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwg
bWFyayBzdXBwbGVtZW50CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxREZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgLy8gVSsxRTAw
IHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMgd2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRp
YWNyaXRpY3MKKyAgICAgICAgaWYgKGMgPD0gMHgyMDAwKSB7CisgICAgICAgICAgICByZXN1bHQg
PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGMgPCAweDIwRDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBD
b21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDIwRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VGIHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJr
cyBmb3IgQ29wdGljCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgy
Q0YxKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDMw
MkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAyRiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUg
bWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDMwMkYpCisg
ICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8g
VStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJpbmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNjdEKQorICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0
aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFyayBmb3IgQmFtdW0KKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweEE2RjEpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgIC8vIFUrQTgwMCB0aHJvdWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNh
dXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5kZWQsCisgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0
LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVr
LAorICAgICAgICBpZiAoYyA8IDB4QTgwMCkgCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGMgPD0gMHhBQkZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAg
ICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdCMCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBF
eHQuIEIKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCisg
ICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsK
KyAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlCisKKyAgICAgICAgICAgIGlmIChpID09IGxl
biAtIDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFyIG5l
eHQgPSBjaGFyYWN0ZXJzWysraV07CisgICAgICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgVUNoYXIzMiBzdXBw
bGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOworCisg
ICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYx
RTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFsIEluZGljYXRvciBTeW1ib2xzCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweDFGMUZGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3Vn
aCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycy4KKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAx
RUYpCisgICAgICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzExMDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJs
b2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3JpcHRzCisgICAgICAgICAgICAvLyBpbiBwbGFuZSAx
IG9yIGhpZ2hlci4KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAwIHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0
aW9uIHNlbGVjdG9ycworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4
RkUwRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhG
RTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZFMkYgQ29tYmluaW5nIGhhbGYgbWFya3MKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEZFMkYpCisgICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBGb250
Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMpCit7CisgICAgLy8gVGhlIGJhc2ljIENKSyBVbmlm
aWVkIElkZW9ncmFwaHMgYmxvY2suCisgICAgaWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZG
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3Jh
cGhzIEV4dGVuc2lvbiBBLgorICAgIGlmIChjID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQu
CisgICAgaWYgKGMgPj0gMHgyRTgwICYmIGMgPD0gMHgyRUZGKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICAvLyBLYW5neGkgUmFkaWNhbHMuCisgICAgaWYgKGMgPj0gMHgyRjAwICYm
IGMgPD0gMHgyRkRGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgU3Ry
b2tlcy4KKyAgICBpZiAoYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRUYpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCisgICAg
aWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhGQUZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCLgorICAgIGlmIChj
ID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQy4KKyAgICBpZiAo
YyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjczRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRC4KKyAgICBpZiAoYyA+
PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50LgorICAgIGlmIChj
ID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVD
aGFyMzIgYykKK3sKKyAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9u
ZQorICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENo
aW5lc2UgMm5kIFRvbmUKKyAgICAvLyAweDJDQiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNz
LCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25lIAorICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFu
ZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKKyAgICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4
MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMgPT0gMHgyRDkpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICgoYyA9PSAweDIwMjApIHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgy
MDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChjID09IDB4MjAzQykKKyAgICAgICAgfHwgKGMgPT0g
MHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5
KSB8fCAoYyA9PSAweDIwNTEpCisgICAgICAgIHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgy
MERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChjID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQor
ICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEz
KSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09IDB4MjEyMSkKKyAgICAgICAgfHwgKGMgPT0gMHgy
MTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChjID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8
fCAoYyA9PSAweDIxNTIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4
MjE1NiAmJiBjIDw9IDB4MjE1QSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+
PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAo
YyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNCRSkgfHwgKGMgPT0gMHgyM0JGKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIz
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAw
eDI0OTIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDlDICYmIGMg
PD0gMHgyNEZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDI1QTAp
IHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0gMHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChj
ID09IDB4MjVBQikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjVC
MSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwg
KGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1QkMpIHx8IChjID09IDB4MjVCRCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIGlmICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVD
MSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwg
KGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1Q0MpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9IDB4MjVEMykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI1RTIgJiYgYyA8PSAweDI1RTYpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGMgPT0gMHgyNUVGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4MjYwMykKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAoYyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkg
fHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAweDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMg
PT0gMHgyNjQyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI2NjAg
JiYgYyA8PSAweDI2NkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgy
NjcyICYmIGMgPD0gMHgyNjdEKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkgfHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3
MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMgPT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8
IChjID09IDB4Mjc1NikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgy
Nzc2ICYmIGMgPD0gMHgyNzdGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09
IDB4MkIxQSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZGVvZ3JhcGhpYyBEZXNj
cmlwdGlvbiBDaGFyYWN0ZXJzLgorICAgIGlmIChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgorICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0g
MHgzMDNGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEhpcmFnYW5hCisgICAgaWYg
KGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIEthdGFrYW5hIAorICAgIGlmIChjID49IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBCb3BvbW9mbworICAgIGlmIChjID49IDB4MzEwMCAm
JiBjIDw9IDB4MzEyRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDMx
OTAgJiYgYyA8PSAweDMxOUYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21v
Zm8gRXh0ZW5kZWQKKyAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCisgICAgICAg
IHJldHVybiB0cnVlOworIAorICAgIC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMu
CisgICAgaWYgKGMgPj0gMHgzMjAwICYmIGMgPD0gMHgzMkZGKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eS4KKyAgICBpZiAoYyA+PSAweDMzMDAg
JiYgYyA8PSAweDMzRkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHhG
ODYwICYmIGMgPD0gMHhGODYyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IEZvcm1zLgorICAgIGlmIChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAw
eEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwgKGMgPT0gMHhGRTE5KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHhGRjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09
IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMKKyAgICAvLyBVc3VhbGx5IG9ubHkgdXNl
ZCBpbiBDSksKKyAgICBpZiAoYyA+PSAweEZGMDAgJiYgYyA8PSAweEZGRUYpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gRW1vamkuCisgICAgaWYgKGMgPT0gMHgxRjEwMCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgx
RjE0OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMg
PD0gMHgxRjE2OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTcw
ICYmIGMgPD0gMHgxRjE4OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAw
eDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gaXNDSktJZGVvZ3JhcGgoYyk7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7Cisg
ICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBjb3VudCsr
OworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7
IC0taSkgeworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkp
IHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBh
bnNpb24gPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaXNBZnRl
ckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsK
K30KKwordW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3sKKyAgICBzdGF0aWMgYm9vbCBleHBhbmRB
cm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0
ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkp
IHsKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hh
cmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0Fm
dGVyRXhwYW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAg
ICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBVQ2hhcjMy
IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAtIDFdOworICAgICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAg
ICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAm
JiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFyYWN0ZXJzW2kgLSAyXSkpIHsKKyAgICAgICAgICAg
ICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0s
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQor
ICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCit1bnNpZ25l
ZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQor
eworICAgIGlmIChzdHJpbmdWaWV3LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Vmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICByZXR1cm4g
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2
KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Cit9
CisKK2Jvb2wgRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCit7CisgICAg
aWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dD
X0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9yIGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0
IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBOb3ZlbWJlciAyMDEwLgorICAgIGlmIChjID09IGV0
aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBh
ZWdlYW5Xb3JkU2VwYXJhdG9yRG90CisgICAgICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRl
ciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJzeWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1h
cmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBGb250Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1fZ2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygp
OworfQorICAgIAorR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29t
cHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgpCit7CisgICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2Fu
dCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pL
IGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywKKyAgICAvLyBzbyB3
ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnkt
Y2hhcmFjdGVyIGJhc2lzKS4KKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CisgICAgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7CisK
KyAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0gR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7CisgICAg
ICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGljaCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBo
LiBCYWlsLgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVy
bGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7CisgICAgfQorICAgIAorICAgIGlmICh0ZXh0UnVuLmlz
OEJpdCgpKQorICAgICAgICBiYXNlQ2hhcmFjdGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29m
ZnNldEluU3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFj
dGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVy
KTsKKyAgICAKKyAgICAvLyB1X2dldEludFByb3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JB
UEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZvciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50
cy4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gdXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJs
b2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9j
a19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOworICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7CisgICAg
Y2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NVUFBMRU1FTlQ6CisgICAgY2FzZSBVQkxPQ0tfQ0pL
X1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgorICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19M
RVRURVJTX0FORF9NT05USFM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Cisg
ICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQToKKyAgICBj
YXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19D
T01QQVRJQklMSVRZX0lERU9HUkFQSFM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJ
VFlfRk9STVM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQjoKKyAgICBjYXNlIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBM
RU1FTlQ6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1NUUk9LRVM6CisgICAgY2FzZSBVQkxPQ0tfQ0pL
X1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQzoKKyAgICBjYXNlIFVCTE9DS19DSktfVU5J
RklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9EOgorICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElD
X0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6CisgICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dS
QU1TOgorICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Cisg
ICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6CisgICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6CisgICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk86CisgICAgY2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6
CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NP
TVBBVElCSUxJVFlfSkFNTzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgorICAg
IGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0E6CisgICAgY2FzZSBVQkxPQ0tfSEFO
R1VMX0pBTU9fRVhURU5ERURfQjoKKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRv
cjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tp
cERlc2NlbmRlcnM7CisgICAgfQorfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExheW91dD4gaW4gc291
cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRMYXlvdXQgY2xhc3Mg
ZGVmaW5pdGlvbgogdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0
TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6
ZGVsZXRlTGF5b3V0KHB0cik7CisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRlbGV0ZUxheW91
dChwdHIpOwogfQogCiB9CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhjb25z
dCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogCi1jb25zdCB1
aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9IHsKK2NvbnN0
IHVpbnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9
IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDEgLyo/Ki8sCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwK
QEAgLTk4LDE1ICs5OCwxNSBAQCBzdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JG
YW1pCiAgICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKIH0KIAotRm9udDo6Q29kZVBh
dGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87CitGb250Q2FzY2FkZTo6Q29kZVBhdGggRm9udENh
c2NhZGU6OnNfY29kZVBhdGggPSBBdXRvOwogCi1UeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OnNf
ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250
Q2FzY2FkZTo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7CiAKIC8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb250IEltcGxlbWVudGF0aW9uIChDcm9z
cy1QbGF0Zm9ybSBQb3J0aW9uKQorLy8gRm9udENhc2NhZGUgSW1wbGVtZW50YXRpb24gKENyb3Nz
LVBsYXRmb3JtIFBvcnRpb24pCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQogCi1Gb250OjpGb250KCkKK0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZSgpCiAgICAgOiBtX2xl
dHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMTQsNyArMTE0LDcgQEAgRm9udDo6Rm9udCgpCiB7
CiB9CiAKLUZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVy
U3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNw
YWNpbmcpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKICAgICAsIG1fbGV0dGVyU3BhY2lu
ZyhsZXR0ZXJTcGFjaW5nKQogICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKQEAgLTEy
NCw3ICsxMjQsNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsCiB9
CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWlu
ZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwg
Ym9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0
YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9k
ZSkKICAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250
RGF0YSkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkK
QEAgLTE2OSw3ICsxNjksNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQogewogfQog
Ci1Gb250JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCitGb250Q2FzY2FkZSYg
Rm9udENhc2NhZGU6Om9wZXJhdG9yPShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpCiB7CiAgICAg
bV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKICAgICBtX2dseXBo
cyA9IG90aGVyLm1fZ2x5cGhzOwpAQCAtMTgwLDcgKzE4MCw3IEBAIEZvbnQmIEZvbnQ6Om9wZXJh
dG9yPShjb25zdCBGb250JiBvdGhlcikKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRm9u
dDo6b3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6
Om9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKSBjb25zdAogewogICAgIGlmIChp
c0xvYWRpbmdDdXN0b21Gb250cygpIHx8IG90aGVyLmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyMywxNCArMzIzLDE0IEBAIHN0YXRpYyBSZWY8Rm9u
dEdseXBocz4gcmV0cmlldmVPckFkZENhY2gKICAgICByZXR1cm4gZ2x5cGhzOwogfQogCi12b2lk
IEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25z
dAordm9pZCBGb250Q2FzY2FkZTo6dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpIGNvbnN0CiB7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKICAgICBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gdXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZp
cnN0RmFtaWx5KCkpOwogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1dGVUeXBlc2V0
dGluZ0ZlYXR1cmVzKCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbikgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24pIGNvbnN0CiB7CiAgICAgLy8gRG9uJ3QgZHJhdyBhbnl0aGluZyB3aGls
ZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxv
YWRpbmcsCiAgICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3VtZW50IGlzIHNldCB0byB0
cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sKQEAgLTM1MSw3ICszNTEs
NyBAQCBmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvCiAgICAgcmV0dXJu
IGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLXZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3
RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3MoR3JhcGhpY3NDb24KICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZv
bnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAor
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93KSBjb25zdAogewogICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChy
dW4pOwogICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTQwMyw3ICs0MDMs
NyBAQCBmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQm
IGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcm
IGdseXBoTmFtZSkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGlmIChpc0Ry
YXduV2l0aFNWR0ZvbnQocnVuKSkKQEAgLTQxNSw3ICs0MTUsNyBAQCBmbG9hdCBGb250Ojp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIGluCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUds
eXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJv
ciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CitHbHlwaERhdGEgRm9udENhc2NhZGU6
OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZh
cmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkg
ewogICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlG
b250RGF0YSgpLmlzU1ZHRm9udCgpKSB7CkBAIC00MzYsMTYgKzQzNiwxNiBAQCBHbHlwaERhdGEg
Rm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1QYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnQ6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0Kiwg
ZmxvYXQsIGJvb2wpIGNvbnN0CitQYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnRDYXNjYWRlOjpj
cmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBjb25zdAogewogICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KikKK3Zv
aWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KikKIHsKIH0KIAotZmxvYXQg
Rm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KikKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0
JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKQog
ewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpAQCAtNDk2LDcgKzQ5
Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmb250RmFtaWxpZXNXaXRoSW52YWwKIC8vIGZyb20g
dGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2VlbXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBu
dW1iZXIgb2YgTWFjIGZvbnRzLAogLy8gYnV0LCBpbiBvcmRlciB0byBnZXQgc2ltaWxhciByZW5k
ZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhpcyBjaGVjayBmb3IKIC8vIGFsbCBwbGF0
Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Citib29s
IEZvbnRDYXNjYWRlOjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAogewogICAgIEF0
b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOwogICAgIGlmIChmYW1pbHkuaXNFbXB0
eSgpKQpAQCAtNTIwLDcgKzUyMCw3IEBAIGJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldp
ZHRoKCkgY28KICAgICByZXR1cm4gIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFw
LT5jb250YWlucyhmYW1pbHkpOwogfQogCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRo
SWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2
ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgYm9v
bCBzdWNjZXNzID0gaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCk7CiAgICAgaWYgKHN1Y2Nlc3Mp
CkBAIC01MjgsNyArNTI4LDcgQEAgYm9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZh
aWxhYgogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVj
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICB0byA9ICh0byA9PSAtMSA/IHJ1
bi5sZW5ndGgoKSA6IHRvKTsKIApAQCAtNTQzLDcgKzU0Myw3IEBAIHZvaWQgRm9udDo6YWRqdXN0
U2VsZWN0aW9uUmVjdEZvclRleHQoY28KICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOwogfQogCi1pbnQgRm9u
dDo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBp
dCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0
dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCiAgICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxl
eCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkp
CkBAIC01NTksNTUgKzU1OSw1NSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFj
ZXNJbnRlCiAgICAgbm9ybWFsaXplZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5h
cHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKKyAgICAgICAgbm9y
bWFsaXplZC5hcHBlbmQoRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ld
KSk7CiAKICAgICByZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOwogfQogCi1TdHJpbmcgRm9u
dDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCitTdHJpbmcgRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJ
bnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCi1TdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitTdHJpbmcg
Rm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFy
YWN0ZXJzLCBsZW5ndGgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5n
ID0gdHJ1ZTsKIAotdm9pZCBGb250OjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCBzaG91bGRV
c2VTbW9vdGhpbmcpCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9v
bCBzaG91bGRVc2VTbW9vdGhpbmcpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3RoaW5nOwogfQogCi1ib29s
IEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCitib29sIEZvbnRDYXNjYWRlOjpzaG91bGRVc2VT
bW9vdGhpbmcoKQogewogICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5nOwogfQogCi12
b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRD
b2RlUGF0aChDb2RlUGF0aCBwKQogewogICAgIHNfY29kZVBhdGggPSBwOwogfQogCi1Gb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aCgpCitGb250Q2FzY2FkZTo6Q29kZVBhdGggRm9udENhc2Nh
ZGU6OmNvZGVQYXRoKCkKIHsKICAgICByZXR1cm4gc19jb2RlUGF0aDsKIH0KIAotdm9pZCBGb250
OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVz
ZXR0aW5nRmVhdHVyZXMpCit2b2lkIEZvbnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCiB7CiAgICAg
c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAK
LVR5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQor
VHlwZXNldHRpbmdGZWF0dXJlcyBGb250Q2FzY2FkZTo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXMoKQogewogICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwogfQogCi1G
b250OjpDb2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0CitG
b250Q2FzY2FkZTo6Q29kZVBhdGggRm9udENhc2NhZGU6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4m
IHJ1bikgY29uc3QKIHsKICAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQogICAgICAgICByZXR1
cm4gc19jb2RlUGF0aDsKQEAgLTYzMyw3ICs2MzMsNyBAQCBGb250OjpDb2RlUGF0aCBGb250Ojpj
b2RlUGF0aChjb25zdCBUZXh0CiAgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVu
LmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCkpOwogfQogCi1Gb250OjpDb2RlUGF0aCBGb250
OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW4pCitGb250Q2FzY2FkZTo6Q29kZVBhdGggRm9udENhc2NhZGU6OmNoYXJhY3RlclJhbmdl
Q29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikKIHsKICAgICAv
LyBGSVhNRTogU2hvdWxkIHVzZSBhIFVuaWNvZGVTZXQgaW4gcG9ydHMgd2hlcmUgSUNVIGlzIHVz
ZWQuIE5vdGUgdGhhdCB3ZSAKICAgICAvLyBjYW4ndCBzaW1wbHkgdXNlIFVuaWNvZGVDaGFyYWN0
ZXIgUHJvcGVydHkvY2xhc3MgYmVjYXVzZSBzb21lIGNoYXJhY3RlcnMKQEAgLTczNCw4ICs3MzQs
OCBAQCBGb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQCiAgICAgICAgIGlm
IChjIDw9IDB4QTZGMSkKICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwogCi0gICAgICAgLy8g
VStBODAwIHRocm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5h
Z2FyaSBFeHRlbmRlZCwKLSAgICAgICAvLyBIYW5ndWwgSmFtbyBFeHQuIEEsIEphdmFuZXNlLCBN
eWFubWFyIEV4dGVuZGVkIEEsIFRhaSBWaWV0LCBNZWV0ZWkgTWF5ZWssCisgICAgICAgIC8vIFUr
QTgwMCB0aHJvdWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdh
cmkgRXh0ZW5kZWQsCisgICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15
YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKICAgICAgICAgaWYgKGMg
PCAweEE4MDApIAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjIDw9IDB4QUJG
RikKQEAgLTc4Nyw3ICs3ODcsNyBAQCBGb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5n
ZUNvZGVQCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFw
aChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMp
CiB7CiAgICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCiAgICAg
aWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQpAQCAtODEyLDExICs4MTIsMTEgQEAgYm9v
bCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMpCiAgICAgLy8gQ0pLIENvbXBhdGliaWxp
dHkgSWRlb2dyYXBocy4KICAgICBpZiAoYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBF
eHRlbnNpb24gQi4KICAgICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorCiAgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBo
cyBFeHRlbnNpb24gQy4KICAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjczRikKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC04MzIsNyArODMyLDcgQEAgYm9vbCBGb250Ojppc0NKS0lk
ZW9ncmFwaChVQ2hhcjMyIGMpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBjKQorYm9vbCBGb250Q2FzY2FkZTo6aXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCiB7CiAgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRh
cmluIENoaW5lc2UgM3JkIFRvbmUKICAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUg
QWNjZW50LCBNYW5kYXJpbiBDaGluZXNlIDJuZCBUb25lCkBAIC05MTQsNyArOTE0LDcgQEAgYm9v
bCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMwogICAgIC8vIElkZW9ncmFwaGlj
IERlc2NyaXB0aW9uIENoYXJhY3RlcnMuCiAgICAgaWYgKGMgPj0gMHgyRkYwICYmIGMgPD0gMHgy
RkZGKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIC8vIENKSyBTeW1ib2xzIGFu
ZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KICAgICBpZiAoYyA+PSAweDMwMDAgJiYg
YyA8IDB4MzAzMCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05NDAsNyArOTQwLDcgQEAgYm9v
bCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMwogICAgIC8vIEJvcG9tb2ZvIEV4
dGVuZGVkCiAgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAKKwogICAgIC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCiAg
ICAgaWYgKGMgPj0gMHgzMjAwICYmIGMgPD0gMHgzMkZGKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTk4OSw3ICs5ODksNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNo
YXIzCiAgICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOwogfQogCi11bnNpZ25lZCBGb250Ojpl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhw
YW5zaW9uKQordW5zaWduZWQgRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCiB7CiAgICAgdW5zaWduZWQg
Y291bnQgPSAwOwogICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7CkBAIC0xMDEyLDcgKzEwMTIs
NyBAQCB1bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50CiAgICAgcmV0dXJu
IGNvdW50OwogfQogCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50
ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQordW5zaWduZWQgRm9udENhc2Nh
ZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0
ZXJFeHBhbnNpb24pCiB7CiAgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9
IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAgICAgdW5zaWduZWQg
Y291bnQgPSAwOwpAQCAtMTA2MiwxNCArMTA2MiwxNCBAQCB1bnNpZ25lZCBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi11bnNpZ25lZCBGb250
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQordW5zaWdu
ZWQgRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBh
bnNpb24pCiB7CiAgICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAg
IHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5z
aW9uKTsKIH0KIAotYm9vbCBGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYykK
K2Jvb2wgRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQogewog
ICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNLIHwg
VV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTA4Miw3ICsxMDgyLDcgQEAgYm9vbCBGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFy
MwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvbnQ6OmlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9nbHlwaHMgJiYgbV9nbHlwaHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRz
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmgJKHJldmlzaW9uIDE3ODQ5NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oOjE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAg
ICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAg
ICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgRm9udF9oCisjZGVmaW5lIEZvbnRfaAorCisjaW5jbHVkZSAiRGFzaEFy
cmF5LmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udEdseXBo
cy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKKy8vICJYMTEvWC5oIiBkZWZp
bmVzIENvbXBsZXggdG8gMCBhbmQgY29uZmxpY3RzCisvLyB3aXRoIENvbXBsZXggdmFsdWUgaW4g
Q29kZVBhdGggZW51bS4KKyNpZmRlZiBDb21wbGV4CisjdW5kZWYgQ29tcGxleAorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0UmVj
dDsKK2NsYXNzIEZvbnREYXRhOworY2xhc3MgRm9udE1ldHJpY3M7CitjbGFzcyBGb250UGxhdGZv
cm1EYXRhOworY2xhc3MgRm9udFNlbGVjdG9yOworY2xhc3MgR2x5cGhCdWZmZXI7CitjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CitjbGFzcyBMYXlvdXRSZWN0OworY2xhc3MgUmVuZGVyVGV4dDsKK2Ns
YXNzIFRleHRMYXlvdXQ7CitjbGFzcyBUZXh0UnVuOworCitzdHJ1Y3QgR2x5cGhEYXRhOworCitz
dHJ1Y3QgR2x5cGhPdmVyZmxvdyB7CisgICAgR2x5cGhPdmVyZmxvdygpCisgICAgICAgIDogbGVm
dCgwKQorICAgICAgICAsIHJpZ2h0KDApCisgICAgICAgICwgdG9wKDApCisgICAgICAgICwgYm90
dG9tKDApCisgICAgICAgICwgY29tcHV0ZUJvdW5kcyhmYWxzZSkKKyAgICB7CisgICAgfQorCisg
ICAgaW5saW5lIGJvb2wgaXNFbXB0eSgpCisgICAgeworICAgICAgICByZXR1cm4gIWxlZnQgJiYg
IXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRvbTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBleHRl
bmRUbyhjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAgICB7CisgICAgICAgIGxlZnQgPSBz
dGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0KTsKKyAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdo
dCwgb3RoZXIucmlnaHQpOworICAgICAgICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7
CisgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbGVmdCAhPSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJp
Z2h0IHx8IHRvcCAhPSBvdGhlci50b3AgfHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKKyAgICB9
CisKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgcmlnaHQ7CisgICAgaW50IHRvcDsKKyAgICBpbnQg
Ym90dG9tOworICAgIGJvb2wgY29tcHV0ZUJvdW5kczsKK307CisKK2NsYXNzIEdseXBoVG9QYXRo
VHJhbnNsYXRvciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUg
e1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5cGgsIERyYXdPdmVyR2x5cGh9OworICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc01vcmVQYXRocygpID0gMDsKKyAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0g
MDsKKyAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Cisg
ICAgdmlydHVhbCBHbHlwaFVuZGVybGluZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0gMDsKKyAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5z
bGF0b3IoKSB7IH0KK307CitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlw
ZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBpbnQgaW5kZXgpOworCitjbGFzcyBGb250IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9S
VCBGb250KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CisgICAgLy8gVGhpcyBj
b25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdp
dGggYSBuYXRpdmUgZm9udC4KKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290
aGluZyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKyNlbmRpZgorICAg
IH5Gb250KCk7CisKKyAgICBGb250KGNvbnN0IEZvbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBG
b250JiBvcGVyYXRvcj0oY29uc3QgRm9udCYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRm9udCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisK
KyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9CisKKyAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsgfQorICAgIGZsb2F0
IHNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsg
fQorCisgICAgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKKwor
ICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJl
YWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07CisgICAgV0VCQ09SRV9FWFBPUlQgZmxv
YXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVm
ZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsK
KyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJv
bSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKworICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRl
cnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRP
cmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OworCisgICAgV0VCQ09S
RV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3Ry
aW5nJiBnbHlwaE5hbWUpIGNvbnN0OworCisgICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVh
dGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNl
KSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOworICAg
IHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsK
KworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRp
b24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworCisgICAgYm9vbCBpc1NtYWxs
Q2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9CisK
KyAgICBmbG9hdCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0K
KyAgICBmbG9hdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5n
OyB9CisgICAgdm9pZCBzZXRXb3JkU3BhY2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBz
OyB9CisgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5n
ID0gczsgfQorICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CisgICAgYm9vbCBpc1ByaW50
ZXJGb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQo
KTsgfQorICAgIAorICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCk7IH0KKworICAgIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFR5cGVzZXR0aW5nRmVhdHVyZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KKwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOyB9CisgICAgdW5zaWduZWQgZmFtaWx5Q291bnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsgfQorCisgICAgRm9udEl0YWxpYyBpdGFsaWMo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQorICAgIEZvbnRX
ZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7
IH0KKyAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpOyB9CisKKyAgICBib29sIGlzUGxhdGZvcm1G
b250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KKwor
ICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1h
cnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFj
aW5nOyB9CisgICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25l
ZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7CisgICAgZmxvYXQgdGFiV2lkdGgodW5z
aWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHBy
aW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBib29sIGhhc1ZhbGlk
QXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0OworICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJ
ZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2Vz
cworCisgICAgaW50IGVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25z
dDsKKyAgICBpbnQgZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25z
dDsKKyAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0
OworCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0Owor
ICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0Owor
ICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3Is
IEZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICAKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFy
aWFudCkgY29uc3Q7CisjZW5kaWYKKworICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVD
aGFyMzIpOworICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7
CisKKyAgICAvLyBCRVdBUkU6IElmIGlzQWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlz
IGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhlIHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxp
bmcgb3Bwb3J0dW5pdHkKKyAgICAvLyB3aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBw
cmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNG
b3JTZWdtZW50KCkgY29tcGVuc2F0ZXMKKyAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcg
dGhlIHJldHVybmVkIHZhbHVlIGlmIGlzQWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5k
IG9mIGEgbGluZS4KKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dChjb25zdCBTdHJpbmdWaWV3JiwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhp
bmcoYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3Ro
aW5nKCk7CisKKyAgICBlbnVtIENvZGVQYXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1w
bGVXaXRoR2x5cGhPdmVyZmxvdyB9OworICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRS
dW4mKSBjb25zdDsKKyAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChj
b25zdCBMQ2hhciosIHVuc2lnbmVkKSB7IHJldHVybiBTaW1wbGU7IH0KKyAgICBzdGF0aWMgQ29k
ZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7
CisKKyAgICBib29sIHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIGVudW0gRm9yVGV4dEVtcGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMs
IEZvclRleHRFbXBoYXNpcyB9OworCisgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJl
YW0gYWR2YW5jZS4KKyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVt
cGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OworICAgIGZsb2F0IGRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJr
c0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OworICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVU
ZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChj
b25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0
bykgY29uc3Q7CisKKyAgICBib29sIGdldEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9t
aWNTdHJpbmcmLCBHbHlwaERhdGEmKSBjb25zdDsKKworICAgIHN0YXRpYyBib29sIGNhblJldHVy
bkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpOworICAgIHN0YXRpYyBib29sIGNhbkV4cGFu
ZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBp
bml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0Owor
ICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgs
IFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgIHN0YXRpYyB1bnNp
Z25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXpl
X3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKworICAg
IGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ7CisKK3B1YmxpYzoKKyNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJ
WklORykKKyAgICBib29sIGVxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JU
ZXh0QXV0b1NpemluZyhvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAgICAgICAgICYmIG1f
bGV0dGVyU3BhY2luZyA9PSBvdGhlci5tX2xldHRlclNwYWNpbmcKKyAgICAgICAgICAgICYmIG1f
d29yZFNwYWNpbmcgPT0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICB9CisjZW5kaWYKKworICAg
IC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29k
ZSBwYXRocy4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2Rl
UGF0aCk7CisgICAgc3RhdGljIENvZGVQYXRoIGNvZGVQYXRoKCk7CisgICAgc3RhdGljIENvZGVQ
YXRoIHNfY29kZVBhdGg7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzKTsKKyAgICBzdGF0aWMg
VHlwZXNldHRpbmdGZWF0dXJlcyBkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOworCisgICAg
c3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwor
ICAgIHN0YXRpYyBib29sIGlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKKyAgICB7
CisgICAgICAgIHJldHVybiAhKGMgJiB+MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJU
YWJsZVtjXTsKKyAgICB9CisKKyAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0
OworICAgIHN0YXRpYyBib29sIHRyZWF0QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcg
JyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9CisgICAg
c3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0
QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09
IDB4MjAwZDsgfQorICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAw
eEEwKSB8fCBjID09IHNvZnRIeXBoZW4gfHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAw
eDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwg
YyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJh
Y3RlcjsgfQorICAgIHN0YXRpYyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBj
KTsKKworICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJh
Y3RlcikKKyAgICB7CisgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBzcGFjZTsKKworICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNl
KGNoYXJhY3RlcikpCisgICAgICAgICAgICByZXR1cm4gemVyb1dpZHRoU3BhY2U7CisKKyAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6
ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFN0cmlu
ZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworCisgICAg
Ym9vbCB1c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2w7IH0KKyAgICBGb250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVy
biBtX2dseXBocy5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSBjb25zdDsKKworICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0
aW5nRmVhdHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4
dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnREZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwor
ICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRp
bmdGZWF0dXJlczsKKworICAgICAgICBzd2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7CisgICAg
ICAgIGNhc2UgQXV0b1RleHRSZW5kZXJpbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPcHRpbWl6ZVNwZWVkOgorICAgICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwg
TGlnYXR1cmVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdlb21ldHJpY1By
ZWNpc2lvbjoKKyAgICAgICAgY2FzZSBPcHRpbWl6ZUxlZ2liaWxpdHk6CisgICAgICAgICAgICBm
ZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGlnYXR1cmVzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewor
ICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CisgICAgICAgICAgICBm
ZWF0dXJlcyAmPSB+S2VybmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsS2VybmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtl
cm5pbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
OkF1dG9LZXJuaW5nOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBz
d2l0Y2ggKG1fZm9udERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKKyAgICAg
ICAgY2FzZSBGb250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAg
ICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1cmVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAg
ICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorCisgICAg
c3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsK
KworICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtdXRhYmxlIFJl
ZlB0cjxGb250R2x5cGhzPiBtX2dseXBoczsKKyAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Cisg
ICAgZmxvYXQgbV93b3JkU3BhY2luZzsKKyAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hB
c1llblN5bWJvbDsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6
IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20g
bV9mb250RGVzY3JpcHRpb24uCit9OworCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUo
KTsKK3ZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwor
dm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CisKK2lubGluZSBGb250Ojp+Rm9udCgpCit7Cit9CisK
K2lubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFy
eVNpbXBsZUZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5lIGNvbnN0IEZv
bnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fZ2x5cGhzKTsKKyAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KG1fZm9udERlc2NyaXB0aW9uLCBpbmRleCk7Cit9CisKK2lubGluZSBib29s
IEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZ2x5cGhzKTsKKyAg
ICByZXR1cm4gbV9nbHlwaHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Cit9CisK
K2lubGluZSBGb250U2VsZWN0b3IqIEZvbnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKK30KKworaW5s
aW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwg
dW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCF0YWJT
aXplKQorICAgICAgICByZXR1cm4gbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0IHRhYldpZHRo
ID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNwYWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKKyAg
ICBmbG9hdCB0YWJEZWx0YVdpZHRoID0gdGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lk
dGgpOworICAgIHJldHVybiAodGFiRGVsdGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAv
IDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOworfQorCit9CisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZSA8PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+
KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnRfaAotI2Rl
ZmluZSBGb250X2gKKyNpZm5kZWYgRm9udENhc2NhZGVfaAorI2RlZmluZSBGb250Q2FzY2FkZV9o
CiAKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
QEAgLTEwNiwyNCArMTA2LDI0IEBAIHB1YmxpYzoKIH07CiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwogCi1jbGFzcyBGb250IHsKK2NsYXNzIEZv
bnRDYXNjYWRlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFj
aW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CiAgICAgLy8gVGhpcyBj
b25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdp
dGggYSBuYXRpdmUgZm9udC4KLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290
aGluZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5n
KTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRm
b3JtLWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLSAgICBGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworICAgIEZvbnRDYXNjYWRl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogI2Vu
ZGlmCi0gICAgfkZvbnQoKTsKKyAgICB+Rm9udENhc2NhZGUoKTsKIAotICAgIEZvbnQoY29uc3Qg
Rm9udCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9wZXJhdG9yPShjb25zdCBGb250Jik7
CisgICAgRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBGb250Q2FzY2FkZSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OwotICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udENhc2NhZGUmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dENhc2NhZGUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogCiAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbjsgfQogCkBAIC0yNDMsNyArMjQzLDcgQEAgcHJpdmF0ZToKIAog
cHVibGljOgogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgZXF1YWxG
b3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QKKyAgICBib29sIGVxdWFs
Rm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGUmIG90aGVyKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmVxdWFsRm9yVGV4dEF1dG9TaXppbmco
b3RoZXIubV9mb250RGVzY3JpcHRpb24pCiAgICAgICAgICAgICAmJiBtX2xldHRlclNwYWNpbmcg
PT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nCkBAIC0yNjksNyArMjY5LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBib29sIHRyZWF0QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBj
ID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJv
V2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAw
ZDsgfQogICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlw
dChVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8
fCBjID09IHNvZnRIeXBoZW4gfHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUg
JiYgYyA8PSAweDIwMGYpIHx8IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6
ZXJvV2lkdGhOb0JyZWFrU3BhY2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcjsg
fQotICAgIHN0YXRpYyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKKyAg
ICBzdGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIpOwogCiAgICAgc3Rh
dGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQogICAgIHsK
QEAgLTM0NywzNCArMzQ3LDM0IEBAIHZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwog
dm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CiB2b2lk
IGNsZWFyV2lkdGhDYWNoZXMoKTsKIAotaW5saW5lIEZvbnQ6On5Gb250KCkKK2lubGluZSBGb250
Q2FzY2FkZTo6fkZvbnRDYXNjYWRlKCkKIHsKIH0KIAotaW5saW5lIGNvbnN0IFNpbXBsZUZvbnRE
YXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5saW5lIGNvbnN0IFNpbXBsZUZv
bnREYXRhJiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKIHsKICAgICBBU1NF
UlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRh
KG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6
OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CitpbmxpbmUgY29uc3QgRm9u
dFJhbmdlcyYgRm9udENhc2NhZGU6OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKICAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2NyaXB0aW9uLCBpbmRleCk7CiB9CiAKLWlubGlu
ZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250Q2FzY2Fk
ZTo6aXNGaXhlZFBpdGNoKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJl
dHVybiBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAotaW5s
aW5lIEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK2lubGluZSBGb250
U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2VsZWN0b3IoKSBjb25zdAogewogICAgIHJldHVy
biBtX2dseXBocyA/IG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSA6IDA7CiB9CiAKLWlubGluZSBm
bG9hdCBGb250Ojp0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIHVuc2ln
bmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAoraW5saW5lIGZsb2F0IEZvbnRDYXNj
YWRlOjp0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKQEAgLTQxLDcgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBtYXkgbm90IHdvcmsg
aWYgdGhlIGVtcGhhc2lzIG1hcmsgdXNlcyBhIGNvbXBsZXggc2NyaXB0LCBidXQgbm9uZSBvZiB0
aGUKIC8vIHN0YW5kYXJkIGVtcGhhc2lzIG1hcmtzIGRvIHNvLgotYm9vbCBGb250OjpnZXRFbXBo
YXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBHbHlwaERhdGEmIGds
eXBoRGF0YSkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OmdldEVtcGhhc2lzTWFya0dseXBoRGF0
YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRhKSBjb25zdAog
ewogICAgIGlmIChtYXJrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjYs
NyArNjYsNyBAQCBib29sIEZvbnQ6OmdldEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2Nl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJr
R2x5cGhEYXRhOwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtH
bHlwaERhdGEpKQpAQCAtODAsNyArODAsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrQXNjZW50
KGNvbnN0IEF0b21pCiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5hc2Nl
bnQoKTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtEZXNjZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBo
RGF0YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhE
YXRhKSkKQEAgLTk0LDcgKzk0LDcgQEAgaW50IEZvbnQ6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29u
c3QgQXRvbQogICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgp
OwogfQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaykgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0YTsK
ICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkK
QEAgLTEwOCw3ICsxMDgsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0
b21pCiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKIH0K
IAotZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBG
b3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250Q2Fz
Y2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1w
aGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFk
dmFuY2U7CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZh
bmNlc0ZvclNpbXBsCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi1mbG9hdCBGb250
OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Citm
bG9hdCBGb250Q2FzY2FkZTo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlw
aHMrYWR2YW5jZXMrZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwpAQCAtMTU0LDcgKzE1NCw3IEBAIGZsb2F0IEZvbnQ6OmRyYXdTaW1wbGVUZXh0
KEdyYXBoaWNzQ29udGUKICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAK
LXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVy
LCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JTaW1wbGVUZXgKICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBy
dW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZh
bmNlLCBwb2ludC55KCkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRl
OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CiB7CiAjaWYgIUVOQUJMRShTVkdfRk9OVFMpCiAgICAgVU5VU0VEX1BBUkFNKHJ1bik7
CkBAIC0yMzEsNyArMjMxLDcgQEAgaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9m
R2x5cAogICAgIHJldHVybiBvZmZzZXRUb01pZGRsZU9mR2x5cGgoZ2x5cGhCdWZmZXIuZm9udERh
dGFBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtH
bHlwaERhdGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0ds
eXBoRGF0YSkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbgogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZm
ZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1
biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhC
dWZmZXI7CkBAIC0yNzYsNyArMjc2LDcgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBs
ZVRleHQoY29ucwogICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZvaWQgRm9u
dDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIFdpZHRoSXRlcmF0b3IgaXQo
dGhpcywgcnVuKTsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JTaW1wbGVUCiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0g
YmVmb3JlV2lkdGgpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBo
cykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3QKIHsKICAgICBmbG9hdCBkZWx0YSA9IHg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZvbnRHbHlwaHMuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yNjQsNyArMjY0LDcgQEAgR2x5cGhEYXRhIEZvbnRHbHlw
aHM6OmdseXBoRGF0YUZvclN5c3RlbQogICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250RGF0YSkK
ICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogCi0gICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3Rl
bUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChjKSkKKyAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250
RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhP
clN5bWJvbChjKSkKICAgICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7CiAK
ICAgICBHbHlwaERhdGEgZmFsbGJhY2tHbHlwaERhdGE7CkBAIC0yNzQsNyArMjc0LDcgQEAgR2x5
cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbQogICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnZhcmlhbnRGb250RGF0YShkZXNjcmlw
dGlvbiwgdmFyaWFudCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKIAogICAgIGlmICh2YXJp
YW50ID09IE5vcm1hbFZhcmlhbnQgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEpIHsKLSAg
ICAgICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpICYmIGZhbGxiYWNrR2x5
cGhEYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
ICYmICFmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
aygpKQorICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YS0+aXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlw
aERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlv
bi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAK
QEAgLTMyMiw3ICszMjIsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9y
bWFsCiAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMpOwogICAgICAgICBpZiAoZGF0YS5mb250RGF0YSkgewogICAgICAgICAgICAgaWYgKGRhdGEu
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWRh
dGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewotICAgICAgICAgICAg
ICAgIGlmICghRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3Jp
ZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRhKTsK
IAogICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNyArNDMwLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQoKQog
Ly8gdGhlIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LiBFbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3Qg
bm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQuCiAjaWYgIVBMQVRGT1JNKElPUykKICNp
ZiAhVVNFKFdJTkdESSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9uCiB9CiAjZW5kaWYKICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDQ4LDcgKzQ0OCw3IEBAIGZs
b2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250
JiBmb250LCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVy
JiBidWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBi
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00NTYs
NyArNDU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRgogICAg
IGZvbnQuZHJhd0dseXBocyh0aGlzLCAmZm9udERhdGEsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhz
LCBwb2ludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhj
b25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00NjUsMTIgKzQ2NSwxMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoCiB9CiAKIC8vIEZJWE1FOiBCZXR0ZXIgbWVy
Z2UgdGhlIGlPUyBhbmQgbm9uLWlPUyBkaWZmZXJlbmNlcy4gSW4gcGFydGljdWxhciwgbWFrZSB0
aGlzIG1ldGhvZCB1c2UgdGhlCi0vLyByZXR1cm5lZCB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dCwg
Rm9udDo6ZHJhd1RleHQoKSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRo
ZXJlCisvLyByZXR1cm5lZCB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dCwgRm9udENhc2NhZGU6OmRy
YXdUZXh0KCksIGluc3RlYWQgb2YgY29tcHV0aW5nIGl0LiBFbnN1cmUgdGhhdCB0aGVyZQogLy8g
YXJlbid0IG5vdGljZWFibGUgZGlmZmVyZW5jZXMgaW4gbGF5b3V0IHdpdGggc3VjaCBhIGNoYW5n
ZS4KICNpZiAhUExBVEZPUk0oSU9TKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4
dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24pCiAjZWxzZQotZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiwg
QmlkaVN0YXR1cyogc3RhdHVzLCBpbnQgbGVuZ3RoKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3RhdHVzKiBzdGF0dXMsIGludCBs
ZW5ndGgpCiAjZW5kaWYKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNTE1LDcg
KzUxNSw3IEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnMKICAgICAg
ICAgZm9udC5kcmF3VGV4dCh0aGlzLCBzdWJydW4sIGN1cnJQb2ludCwgMCwgLTEsIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbik7CiAKICAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4tPm5leHQoKTsK
LSAgICAgICAgLy8gRklYTUU6IEhhdmUgRm9udDo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBv
ZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4K
KyAgICAgICAgLy8gRklYTUU6IEhhdmUgRm9udENhc2NhZGU6OmRyYXdUZXh0IHJldHVybiB0aGUg
d2lkdGggb2Ygd2hhdCBpdCBkcmV3IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byByZS1tZWFzdXJl
IGhlcmUuCiAgICAgICAgIGlmIChiaWRpUnVuKQogICAgICAgICAgICAgY3VyclBvaW50Lm1vdmUo
Zm9udC53aWR0aChzdWJydW4pLCAwKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgi
CiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKQEAg
LTM1NiwxNiArMzU2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgICAgICAK
ICNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0g
LTEpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNl
bHNlCi0gICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworICAgICAgICBm
bG9hdCBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAjZW5kaWYKLSAgICAgICAg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
KTsKLSAgICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250JiwgY29uc3QgVGV4
dFJ1biYgLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQg
ZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiAsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpOwogI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd0JpZGlU
ZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFk
eSk7CisgICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAjZWxz
ZQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3QmlkaVRleHQoY29uc3QgRm9udCYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9
IDAsIGludCBsZW5ndGggPSAtMSk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdC
aWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRl
OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50IGxlbmd0aCA9
IC0xKTsKICNlbmRpZgogICAgICAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CiAgICAgICAgICAgICBS
b3VuZEFsbFNpZGVzLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw4ICszMyw4IEBACiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3Jl
VGV4dFNQSS5oIgogI2VuZGlmCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC00MTksNyArNDE5LDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6cwogICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CiAgICAgICAgIGludCBj
b2RlVW5pdHNMZW5ndGg7CiAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAg
ICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyKTsK
KyAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMo
Y2hhcmFjdGVyKTsKICAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDE7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjaGFyYWN0ZXIpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgi
CiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsZWZ0
VHJ1bmNhdGVUb0J1ZmZlcihjb24KICAgICByZXR1cm4gbGVuZ3RoIC0gYWRqdXN0ZWRTdGFydElu
ZGV4OwogfQogCi1zdGF0aWMgZmxvYXQgc3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuZGVyZXIs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgZGlzYWJsZVJv
dW5kaW5nSGFja3MpCitzdGF0aWMgZmxvYXQgc3RyaW5nV2lkdGgoY29uc3QgRm9udENhc2NhZGUm
IHJlbmRlcmVyLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29s
IGRpc2FibGVSb3VuZGluZ0hhY2tzKQogewogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxl
bmd0aCk7CiAgICAgaWYgKGRpc2FibGVSb3VuZGluZ0hhY2tzKQpAQCAtMjAwLDcgKzIwMCw3IEBA
IHN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW4KICAgICByZXR1cm4gcmVu
ZGVyZXIud2lkdGgocnVuKTsKIH0KIAotc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIFRydW5j
YXRpb25GdW5jdGlvbiB0cnVuY2F0ZVRvQnVmZmVyLCBib29sIGRpc2FibGVSb3VuZGluZ0hhY2tz
LCBmbG9hdCogcmVzdWx0V2lkdGggPSBudWxscHRyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
ID0gdHJ1ZSwgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFs
d2F5c1RydW5jYXRlID0gZmFsc2UpCitzdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IFRydW5jYXRpb25GdW5jdGlvbiB0cnVuY2F0ZVRvQnVmZmVyLCBib29sIGRpc2FibGVSb3VuZGlu
Z0hhY2tzLCBmbG9hdCogcmVzdWx0V2lkdGggPSBudWxscHRyLCBib29sIHNob3VsZEluc2VydEVs
bGlwc2lzID0gdHJ1ZSwgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBi
b29sIGFsd2F5c1RydW5jYXRlID0gZmFsc2UpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBzdHJpbmc7CkBAIC0yOTUsNDIgKzI5NSw0MiBAQCBzdGF0aWMgU3Ry
aW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluCiAgICAgcmV0dXJuIFN0cmluZyhzdHJpbmdC
dWZmZXIsIHRydW5jYXRlZExlbmd0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OmNl
bnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3Mp
CitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0
cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3Vu
ZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwg
IWVuYWJsZVJvdW5kaW5nSGFja3MpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdo
dFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9u
dCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCitT
dHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0
cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotZmxvYXQgU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aChjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCitmbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHN0cmluZ1dp
ZHRoKGZvbnQsIFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgc3Ry
aW5nLmxlbmd0aCgpLCAhZW5hYmxlUm91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdU
cnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJv
dW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVu
Y2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0
aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFi
bGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCiB7CiAgICAgcmV0dXJu
IHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIGNlbnRlclRydW5jYXRlVG9C
dWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVs
bGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmlu
Z1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVS
b3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1
bmNhdG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0
aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFi
bGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCiB7CiAgICAgcmV0dXJu
IHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1
ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5n
VHJ1bmNhdG9yOjpsZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91
bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
LCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5j
YXRvcjo6bGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVS
b3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCiB7CiAgICAgcmV0dXJuIHRy
dW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIGxlZnRUcnVuY2F0ZVRvQnVmZmVy
LCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNp
cywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVu
Y2F0b3I6OnJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBt
YXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJs
ZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxp
cHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdU
cnVuY2F0b3I6OnJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9h
dCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NP
ck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxk
SW5zZXJ0RWxsaXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCiB7CiAg
ICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xp
cFRvQ2hhcmFjdGVyQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBz
aG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAK
LVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJpbmcmIHN0
cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hv
dWxkSW5zZXJ0RWxsaXBzaXMsICBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoLCBi
b29sIGFsd2F5c1RydW5jYXRlKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9X
b3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBm
bG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsICBmbG9hdCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoLCBib29sIGFsd2F5c1RydW5jYXRlKQogewogICAgIHJl
dHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb1dv
cmRCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2Vy
dEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoLCBhbHdheXNUcnVuY2F0ZSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJp
bmdUcnVuY2F0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDIzICsz
MywyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgRm9udDsKLSAg
ICAKLSAgICBjbGFzcyBTdHJpbmdUcnVuY2F0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51
bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxlUm91bmRpbmdIYWNrcywgRW5hYmxl
Um91bmRpbmdIYWNrcyB9OwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQm
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRpbmdIYWNrcyk7Ci0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRUcnVuY2F0ZShjb25zdCBTdHJp
bmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5v
dCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgU3RyaW5nIGNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgs
IGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9u
RWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYs
IEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3Vs
ZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0
aCA9IDApOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGxlZnRUcnVuY2F0
ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5k
aW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlw
c2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOwotICAg
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNv
bnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmlu
ZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0
ZSA9IGZhbHNlKTsKK2NsYXNzIEZvbnRDYXNjYWRlOworCitjbGFzcyBTdHJpbmdUcnVuY2F0b3Ig
eworcHVibGljOgorICAgIGVudW0gRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IHsgRGlzYWJsZVJv
dW5kaW5nSGFja3MsIEVuYWJsZVJvdW5kaW5nSGFja3MgfTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lk
dGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJs
ZVJvdW5kaW5nSGFja3MpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRU
cnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUm
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRpbmdIYWNrcyk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmlu
ZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0g
dHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9h
dCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3Qs
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZs
b2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIGxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0
aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3Rv
bVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJl
c3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9t
VHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBT
dHJpbmcgcmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSk7CiAKLSAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IHdpZHRoKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRpbmdIYWNr
cyk7Ci0gICAgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBE
aXNhYmxlUm91bmRpbmdIYWNrcyk7Cit9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRm9udDsKK2NsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR2x5cGhCdWZmZXI7
CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7CkBAIC0xOTcsOSArMTk3LDkgQEAgcHVibGlj
OgogICAgICAgICB2aXJ0dWFsIH5SZW5kZXJpbmdDb250ZXh0KCkgeyB9CiAKICNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY29uc3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3Ry
aW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKKyAgICAgICAgdmlydHVhbCBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlJiwgV2lkdGhJ
dGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFy
YWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNT
dHJpbmdDYWNoZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0ID0gMDsKLSAgICAgICAg
dmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBU
ZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5n
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50
IGZyb20pIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhU
b1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgU2ltcGxl
Rm9udERhdGEmLCBjb25zdCBUZXh0UnVuKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0ID0gMDsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgogCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJMYXRpbjFUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgpAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1XaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0
IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBm
b3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRD
YXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMsIGJvb2wg
Zm9yVGV4dEVtcGhhc2lzKQogICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAg
ICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkKQEAgLTU3LDcgKzU3LDcgQEAgV2lkdGhJdGVyYXRv
cjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KgogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0g
bV9pc0FmdGVyRXhwYW5zaW9uOwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50ID0gRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1f
cnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgdW5zaWdu
ZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0
ZXJFeHBhbnNpb24pOwogICAgICAgICBpZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAhbV9ydW4uYWxs
b3dzVHJhaWxpbmdFeHBhbnNpb24oKSkKICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQtLTsKIApAQCAtMjI5LDkgKzIyOSw5IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgIGlmICh3aWR0aCAmJiBtX2ZvbnQtPmxldHRlclNw
YWNpbmcoKSkKICAgICAgICAgICAgICAgICB3aWR0aCArPSBtX2ZvbnQtPmxldHRlclNwYWNpbmco
KTsKIAotICAgICAgICAgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IEZv
bnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7Ci0gICAgICAgICAg
ICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpKSB7CisgICAgICAgICAgICBz
dGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CisgICAgICAgICAgICBib29sIHRyZWF0
QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKICAgICAgICAgICAg
ICAgICAvLyBEaXN0cmlidXRlIHRoZSBydW4ncyB0b3RhbCBleHBhbnNpb24gZXZlbmx5IG92ZXIg
YWxsIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBydW4uCiAgICAgICAgICAgICAgICAg
aWYgKG1fZXhwYW5zaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHByZXZpb3VzRXhw
YW5zaW9uID0gbV9leHBhbnNpb247CkBAIC0yNjgsOSArMjY4LDEwIEBAIGlubGluZSB1bnNpZ25l
ZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICBtX2lzQWZ0ZXJFeHBh
bnNpb24gPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzaG91bGRBcHBseUZvbnRU
cmFuc2Zvcm1zKCkgJiYgZ2x5cGhCdWZmZXIgJiYgRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rl
cikpCisgICAgICAgIGlmIChzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgJiYgZ2x5cGhCdWZm
ZXIgJiYgRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAg
ICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGdseXBoQnVm
ZmVyLT5zaXplKCksCiAgICAgICAgICAgICAgICAgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3Rl
clRyZWF0ZWRBc1NwYWNlKGNoYXJhY3RlciA9PSAnICcsIGdseXBoQnVmZmVyLT5zaXplKCkgPyBn
bHlwaEJ1ZmZlci0+YWR2YW5jZUF0KGdseXBoQnVmZmVyLT5zaXplKCkgLSAxKS53aWR0aCgpIDog
MCwgd2lkdGgpKSk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhC
b3VuZHMpIHsKICAgICAgICAgICAgIGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChn
bHlwaCk7CkBAIC0yNzgsNyArMjc5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1fZmlyc3RHbHlwaE92ZXJmbG93ID0gc3RkOjpt
YXg8ZmxvYXQ+KDAsIC1ib3VuZHMueCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2Zv
clRleHRFbXBoYXNpcyAmJiAhRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaGFyYWN0ZXIp
KQorICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgIUZvbnRDYXNjYWRlOjpjYW5SZWNl
aXZlVGV4dEVtcGhhc2lzKGNoYXJhY3RlcikpCiAgICAgICAgICAgICBnbHlwaCA9IDA7CiAKICAg
ICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBjaGFyYWN0ZXIgd2UganVzdCBkZWFsdCB3aXRoLgpA
QCAtMjg4LDcgKzI4OSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
SW4KIAogICAgICAgICAvLyBGb3JjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZXJt
aW5lIHdvcmQgYm91bmRhcmllcyBmb3IgdGhlIHJvdW5kaW5nIGhhY2sKICAgICAgICAgLy8gdG8g
YmUgaW50ZWdlciB3aWR0aCwgc28gZm9sbG93aW5nIHdvcmRzIHdpbGwgc3RhcnQgb24gYW4gaW50
ZWdlciBib3VuZGFyeS4KLSAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYg
Rm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoY2hhcmFjdGVyKSkgeworICAgICAgICBpZiAo
bV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgd2lkdGggPSBjZWlsZih3aWR0aCk7
CiAKICAgICAgICAgICAgIC8vIFNpbmNlIHdpZHRoU2luY2VMYXN0Um91bmRpbmcgY2FuIGxvc2Ug
cHJlY2lzaW9uIGlmIHdlIGluY2x1ZGUgbWVhc3VyZW1lbnRzIGZvcgpAQCAtMzAxLDcgKzMwMiw3
IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIg
aXMgYSAicm91bmRpbmcgaGFjayBjaGFyYWN0ZXIiLCBpZiBzbywgYWRqdXN0CiAgICAgICAgICAg
ICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBhbiBpbnRl
Z2VyIGJvdW5kYXJ5LgotICAgICAgICAgICAgaWYgKChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3Rlcigp
KSA8IG1fcnVuLmxlbmd0aCgpICYmIEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKCoodGV4
dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQorICAgICAgICAgICAgaWYgKChtX3J1bi5hcHBseVdv
cmRSb3VuZGluZygpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXh0SXRlcmF0b3IuY3VycmVu
dENoYXJhY3RlcigpKSA8IG1fcnVuLmxlbmd0aCgpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5n
SGFja0NoYXJhY3RlcigqKHRleHRJdGVyYXRvci5jaGFyYWN0ZXJzKCkpKSkKICAgICAgICAgICAg
ICAgICB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpKSA+PSBtX3J1bi5sZW5ndGgoKSkpIHsK
ICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbFdpZHRoID0gd2lkdGhTaW5jZUxhc3RSb3VuZGlu
ZyArIHdpZHRoOwogICAgICAgICAgICAgICAgIHdpZHRoU2luY2VMYXN0Um91bmRpbmcgPSBjZWls
Zih0b3RhbFdpZHRoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NyArMjIsNyBAQAogI2lmbmRlZiBXaWR0aEl0ZXJhdG9yX2gKICNkZWZpbmUgV2lkdGhJdGVyYXRv
cl9oCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNs
dWRlICJTVkdHbHlwaC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwogY2xhc3MgU2lt
cGxlRm9udERhdGE7CiBjbGFzcyBUZXh0UnVuOwpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgR2x5
cGhEYXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udCosIGNvbnN0IFRleHRS
dW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBi
b29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9
IGZhbHNlKTsKKyAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4
dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAs
IGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
ID0gZmFsc2UpOwogCiAgICAgdW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7
CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIm
KTsKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxTVkdHbHlwaDo6QXJhYmlj
Rm9ybT4mIGFyYWJpY0Zvcm1zKCkgeyByZXR1cm4gbV9hcmFiaWNGb3JtczsgfQogI2VuZGlmCiAK
LSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYg
Zm9udCkKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAg
IGlmICghZm9udC5pc1ByaW50ZXJGb250KCkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIH0KIAotICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSogbV9mb250OwogCiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5t
bQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAj
aW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0U1BJLmgiCi0jaW1w
b3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiUmVuZGVyVGhl
bWVJT1MuaCIKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1Np
bXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0
aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCiAj
aW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJG
b250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgogI2ltcG9ydCA8
Q29yZVRleHQvQ29yZVRleHQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTQzLDEzICs0MywxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFRleHRMYXlvdXQgewogcHVibGljOgotICAgIHN0YXRpYyBib29sIGlzTmVl
ZGVkKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQpCisgICAgc3RhdGljIGJvb2wg
aXNOZWVkZWQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAg
ewogICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRl
eHQsIGZvbnQsIHRleHQsIHRleHQtPnN0eWxlKCkpOwotICAgICAgICByZXR1cm4gZm9udC5jb2Rl
UGF0aChydW4pID09IEZvbnQ6OkNvbXBsZXg7CisgICAgICAgIHJldHVybiBmb250LmNvZGVQYXRo
KHJ1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAgICAgfQogCi0gICAgVGV4dExheW91dChS
ZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB4UG9zKQorICAgIFRleHRM
YXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQ
b3MpCiAgICAgICAgIDogbV9mb250KGZvbnQpCiAgICAgICAgICwgbV9ydW4oY29uc3RydWN0VGV4
dFJ1bih0ZXh0LCBmb250LCB4UG9zKSkKICAgICAgICAgLCBtX2NvbnRyb2xsZXIoc3RkOjptYWtl
X3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+KCZtX2ZvbnQsIG1fcnVuLCB0cnVlKSkKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZh
bmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBmbG9h
dCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBp
ZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBGb250Ojp0cmVhdEFzU3BhY2UobV9y
dW5bZnJvbV0pKQorICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkKICAgICAgICAgICAgIGJlZm9y
ZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgICAgICBtX2NvbnRyb2xsZXItPmFk
dmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAg
ICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgVGV4
dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQs
IGZsb2F0IHhQb3MpCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJU
ZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvcykKICAgICB7CiAg
ICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwg
Zm9udCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7CiAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJzTGVu
Z3RoKHRleHQtPnRleHRMZW5ndGgoKSk7CkBAIC03OCwyNSArNzgsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHJ1bjsKICAgICB9CiAKLSAgICAvLyBDb21wbGV4VGV4dENvbnRyb2xsZXIg
aGFzIG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9udCBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3Qg
YmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnQgbV9mb250OworICAgIC8vIENvbXBsZXhUZXh0
Q29udHJvbGxlciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBGb250Q2FzY2FkZSBhbmQgVGV4
dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgorICAgIEZvbnRDYXNjYWRlIG1f
Zm9udDsKICAgICBUZXh0UnVuIG1fcnVuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4VGV4
dENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07CiAKLVBhc3NPd25QdHI8VGV4dExheW91dD4g
Rm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGZsb2F0IHhQb3MsIGJvb2wgY29s
bGFwc2VXaGl0ZVNwYWNlKSBjb25zdAorUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250Q2FzY2Fk
ZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFw
c2VXaGl0ZVNwYWNlKSBjb25zdAogewogICAgIGlmICghY29sbGFwc2VXaGl0ZVNwYWNlIHx8ICFU
ZXh0TGF5b3V0Ojppc05lZWRlZCh0ZXh0LCAqdGhpcykpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dExheW91dCh0ZXh0LCAqdGhpcywgeFBvcykp
OwogfQogCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KiBsYXlvdXQpCit2b2lk
IEZvbnRDYXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4dExheW91dCogbGF5b3V0KQogewogICAgIGRl
bGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMpCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYg
bGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cykKIHsKICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZy
b20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlu
bGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxvYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
R0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dENvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1h
eVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQorQ29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRF
bXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
aXNMVFJPbmx5KHRydWUpCkBAIC0xNDQsNyArMTQ0LDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dENvbnRybwogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0g
MDsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gbV9hZnRlckV4
cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZv
bnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/
IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9u
KTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1fcnVuLmFsbG93c1RyYWlsaW5n
RXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LS07CiAK
QEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5
cGhzCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbmV4dENoID0gKihtX2NvbXBs
ZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29tcGxleFRleHRSdW5zW3IgKyAx
XS0+aW5kZXhBdCgwKSk7CiAKLSAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6
dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENh
c2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJl
YXRBc1NwYWNlID8gZm9udERhdGEuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAg
ICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgs
IGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKICNpZiBQTEFURk9STShJT1MpCkBA
IC02MjUsNyArNjI1LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBo
cwogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkKICAg
ICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gbV9mb250LnRhYldpZHRoKGZvbnREYXRhLCBt
X3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VM
YXN0Q29tbWl0KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhT
cGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgeworICAgICAgICAgICAgZWxzZSBpZiAoRm9udENh
c2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgewogICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwogICAgICAgICAgICAgICAgIGdseXBoID0g
Zm9udERhdGEuc3BhY2VHbHlwaCgpOwogICAgICAgICAgICAgfQpAQCAtNjUxLDcgKzY1MSw3IEBA
IHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCArPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpOwogCiAgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRpb24gYW5kIHdvcmQtc3BhY2luZy4KLSAgICAg
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
RGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBh
bnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9leHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHByZXZpb3VzRXhw
YW5zaW9uID0gbV9leHBhbnNpb247CkBAIC02ODUsMTIgKzY4NSwxMyBAQCB2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAvLyBXZSBhZGp1c3QgdGhl
IHdpZHRoIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhICJ3b3JkIiB0byBlbnN1cmUgYW4gaW50
ZWdlciB3aWR0aC4gCiAgICAgICAgICAgICAvLyBGb3JjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVz
ZWQgdG8gZGV0ZXJtaW5lIHdvcmQgYm91bmRhcmllcyBmb3IgdGhlIHJvdW5kaW5nIGhhY2sgCiAg
ICAgICAgICAgICAvLyB0byBiZSBpbnRlZ2VyIHdpZHRoLCBzbyB0aGUgZm9sbG93aW5nIHdvcmRz
IHdpbGwgc3RhcnQgb24gYW4gaW50ZWdlciBib3VuZGFyeS4gCi0gICAgICAgICAgICBpZiAobV9y
dW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3Rlcihj
aCkpIAorICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgRm9udENh
c2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoKSkgCiAgICAgICAgICAgICAgICAgYWR2
YW5jZS53aWR0aCA9IGNlaWxDR0Zsb2F0KGFkdmFuY2Uud2lkdGgpOyAKIAogICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICJyb3VuZGluZyBoYWNr
IGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QgdGhlIAotICAgICAgICAgICAgLy8gd2lkdGggc28g
dGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4g
Ci0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgIWxhc3RHbHlw
aCAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0Q2gpKSB8fCAobV9ydW4uYXBw
bHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkpIHsgCisgICAgICAgICAgICAvLyB3aWR0aCBz
byB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5
LgorICAgICAgICAgICAgYm9vbCBuZWVkc1JvdW5kaW5nRm9yQ2hhcmFjdGVyID0gbV9ydW4uYXBw
bHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEdseXBoICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5n
SGFja0NoYXJhY3RlcihuZXh0Q2gpOworICAgICAgICAgICAgaWYgKG5lZWRzUm91bmRpbmdGb3JD
aGFyYWN0ZXIgfHwgKG1fcnVuLmFwcGx5UnVuUm91bmRpbmcoKSAmJiBsYXN0R2x5cGgpKSB7CiAg
ICAgICAgICAgICAgICAgQ0dGbG9hdCB0b3RhbFdpZHRoID0gd2lkdGhTaW5jZUxhc3RDb21taXQg
KyBhZHZhbmNlLndpZHRoOyAKICAgICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCA9
IGNlaWxDR0Zsb2F0KHRvdGFsV2lkdGgpOyAKICAgICAgICAgICAgICAgICBDR0Zsb2F0IGV4dHJh
V2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1pdCAtIHRvdGFsV2lkdGg7IApAQCAtNzA5LDcgKzcx
MCw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAg
ICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCArPSBhZHZhbmNlLndpZHRoOyAKIAogICAgICAg
ICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBtYXJrcyBzaG91bGQgcmVjZWl2ZSBhIHRleHQgZW1w
aGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21iaW5lIHdpdGggYSBzcGFjZS4KLSAgICAgICAgICAg
IGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMo
Y2gpIHx8IChVX0dFVF9HQ19NQVNLKGNoKSAmIFVfR0NfTV9NQVNLKSkpCisgICAgICAgICAgICBp
ZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgKCFGb250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBo
YXNpcyhjaCkgfHwgKFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19NX01BU0spKSkKICAgICAgICAg
ICAgICAgICBnbHlwaCA9IDA7CiAKICAgICAgICAgICAgIGFkdmFuY2UuaGVpZ2h0ICo9IC0xOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RM
aW5lICogQ1RMaW5lUmUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xh
c3MgRm9udENhc2NhZGU7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIGNsYXNzIFRleHRSdW47CiAK
QEAgLTUwLDcgKzUwLDcgQEAgZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRp
YQogLy8gY29tcGxleCBzY3JpcHRzIG9uIE9TIFguCiBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250KiwgY29u
c3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBm
b3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0
IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdE
aXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZh
bmNlIGFuZCBlbWl0IGdseXBocyB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KICAgICB2
b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9u
U3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8dW5zaWduZWQsIDE2PiBtX3J1bkluZGljZXM7CiAgICAgVmVjdG9yPHVuc2lnbmVk
LCAxNj4gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9JbmRleDsKIAotICAgIGNvbnN0IEZvbnQmIG1f
Zm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGNvbnN0IFRleHRSdW4m
IG1fcnVuOwogICAgIGJvb2wgbV9pc0xUUk9ubHk7CiAgICAgYm9vbCBtX21heVVzZU5hdHVyYWxX
cml0aW5nRGlyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3Jl
VGV4dC5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAK
ICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJG
b250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRSdW4u
aCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKQEAgLTQwLDE5ICs0MCwx
OSBAQAogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDogTlNBcnJheSB7CiAgICAgQHByaXZh
dGUKLSAgICBjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udDsKKyAgICBjb25zdCBXZWJDb3JlOjpG
b250Q2FzY2FkZSogX2ZvbnQ7CiAgICAgVUNoYXIzMiBfY2hhcmFjdGVyOwogICAgIE5TVUludGVn
ZXIgX2NvdW50OwogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4sIDE2
PiBfZm9udERlc2NyaXB0b3JzOwogfQogCi0tIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNv
cmU6OkZvbnQqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJhY3RlcjsKKy0gKGlkKWluaXRX
aXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZvbnQgY2hhcmFjdGVyOihVQ2hh
cjMyKWNoYXJhY3RlcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQ2FzY2FkZUxpc3QK
IAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250Kilmb250IGNoYXJhY3Rl
cjooVUNoYXIzMiljaGFyYWN0ZXIKKy0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6
Rm9udENhc2NhZGUqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJhY3RlcgogewogICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNjAsNyAr
NjAsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqCiAgICAgX2Zv
bnQgPSBmb250OwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAKLSAgICAvLyBCeSB0aGUg
dGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250IGhhcyBhbHJlYWR5IGJlZW4g
YXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCisgICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNj
YWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENhc2NhZGUgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0
byByZWFsaXplIGFsbCBvZiBpdHMKICAgICAvLyBGb250RGF0YSwgc28gdGhpcyBsb29wIGRvZXMg
bm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdoaWxlICghX2ZvbnQtPmZhbGxiYWNrUmFuZ2Vz
QXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAgX2NvdW50Kys7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpZiAhUExB
VEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQu
aCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgog
I2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2ltcG9ydCAiTlNGb250U1BJLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJDb21w
bGV4VGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCkBAIC0zNyw3ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRq
dXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0
UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBDb21w
bGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIu
YWR2YW5jZShmcm9tKTsKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleAogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAt
IGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBj
b25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAtNzUsNyArNzUsNyBAQCBmbG9hdCBGb250
OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNl
OwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBi
dWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGds
eXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtOTMsNyArOTMsNyBAQCBmbG9h
dCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250CiAgICAgcmV0dXJuIHN0YXJ0UG9p
bnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZs
b2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChy
dW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTEwNCw3ICsx
MDQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRlCiAgICAgZHJh
d0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2lu
dChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAKLWZsb2F0IEZv
bnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5
cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAg
ICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxs
YmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVyZmxvdykgewpAQCAtMTE2LDEzICsxMTYsMTMg
QEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgogICAgIHJldHVybiBj
b250cm9sbGVyLnRvdGFsV2lkdGgoKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxl
cih0aGlzLCBydW4pOwogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgs
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6
OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorY29u
c3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7
CiAgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogCiAjaW1wb3J0ICJD
b3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0U1BJLmgiCkBAIC01OCwxMiArNTgs
MTIgQEAgU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRHZXRUZXh0RWZmZWN0c0NhdAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBs
ZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6Y2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQorYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogewogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUo
Q0dDb24KIH0KICNlbmRpZgogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1E
YXRhLnNpemUoKSkKQEAgLTUyNiw3ICs1MjYsNyBAQCB2b2lkIE1hY0dseXBoVG9QYXRoVHJhbnNs
YXRvcjo6YWR2YW5jZSgpCiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYg
bV9pbmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0
CitEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZs
b2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZv
bnRzKCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCBE
YXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIg
Z2x5cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOwogICAg
IGZsb2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBGb250OjpDb21wbGV4KQor
ICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpDb21wbGV4KQogICAgICAgICBk
ZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVu
Z3RoKCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVm
ZmVyKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBEYXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJz
ZWN0aW9uc1dpCiB9CiAjZW5kaWYKIAotYm9vbCBGb250OjpwcmltYXJ5Rm9udERhdGFJc1N5c3Rl
bUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1G
b250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPiAxMDkwCiAgICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9u
dERhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlw
aFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW5j
bHVkZSAiQ29yZVRleHRTUEkuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDcsNyArNDcsNyBAQCBz
dGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhCiAgICAgaWYgKGZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSAhPSBSZWd1bGFyV2lkdGggfHwgZm9udERh
dGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAgICAgICAgLy8gSWRlb2dyYXBocyBkb24ndCBo
YXZlIGEgdmVydGljYWwgdmFyaWFudCBvciB3aWR0aCB2YXJpYW50cy4KICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
IUZvbnQ6OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltpXSkpCisgICAgICAgICAgICBpZiAoIUZvbnRD
YXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBACiAjaW1wb3J0
ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJG
bG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9y
dCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0JKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgog
I2ltcG9ydCAiQ3Vyc29yLmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRm9udC5o
IgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBhZ2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIFBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiQ29y
ZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5o
IgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViQ29yZVRo
cmVhZC5oIgogI2ltcG9ydCA8SW1hZ2VJTy9JbWFnZUlPLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogI2ltcG9ydCAiQml0
bWFwSW1hZ2UuaCIKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5o
IgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgog
I2ltcG9ydCAiRm9udFNlbGVjdG9yLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKQEAg
LTE1NywxMCArMTU3LDEwIEBAIGNvbnN0IGZsb2F0IERyYWdMaW5rVXJsRm9udFNpemUgPSAxMDsK
IAogLy8gRklYTUUgLSB3ZSBzaG91bGQgbW92ZSBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgTlNT
dHJpbmcgZXh0cmFzIHRvIFdlYkNvcmUKICAgICAKLXN0YXRpYyBGb250JiBmb250RnJvbU5TRm9u
dChOU0ZvbnQgKmZvbnQpCitzdGF0aWMgRm9udENhc2NhZGUmIGZvbnRGcm9tTlNGb250KE5TRm9u
dCAqZm9udCkKIHsKICAgICBzdGF0aWMgTlNGb250ICpjdXJyZW50Rm9udDsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRm9udCwgY3VycmVudFJlbmRlcmVyLCAoKSk7CisgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRDYXNjYWRlLCBjdXJyZW50UmVuZGVy
ZXIsICgpKTsKICAgICAKICAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50Rm9udF0pCiAgICAg
ICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIEZv
bnQmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udAogICAgIGN1cnJlbnRGb250ID0gZm9udDsK
ICAgICBDRlJldGFpbihjdXJyZW50Rm9udCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBmKGZvbnQs
IFtmb250IHBvaW50U2l6ZV0pOwotICAgIGN1cnJlbnRSZW5kZXJlciA9IEZvbnQoZiwgIVtbTlNH
cmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAg
Y3VycmVudFJlbmRlcmVyID0gRm9udENhc2NhZGUoZiwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgcmV0dXJuIGN1cnJlbnRSZW5k
ZXJlcjsKIH0KIApAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBmbG9hdCB3aWR0aFdpdGhGb250
KE5TU3RyaW5nICpzdHIKICAgICBbc3RyaW5nIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07
CiAgICAgCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIuZGF0YSgpLCBsZW5ndGgp
KSB7Ci0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9u
dCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJh
d2luZ1RvU2NyZWVuXSk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNvcmVGb250KEZvbnRQbGF0
Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgICAgICBUZXh0UnVuIHJ1bihi
dWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3Mo
KTsKICAgICAgICAgcmV0dXJuIHdlYkNvcmVGb250LndpZHRoKHJ1bik7CkBAIC0yMjQsNyArMjI0
LDcgQEAgc3RhdGljIHZvaWQgZHJhd0F0UG9pbnQoTlNTdHJpbmcgKnN0cmluZwogICAgICAgICBp
ZiAoIWZsaXBwZWQpCiAgICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEs
IC0xKTsKICAgICAgICAgICAgIAotICAgICAgICBGb250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9y
bURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbbnNDb250ZXh0IGlzRHJhd2luZ1RvU2Ny
ZWVuXSwgQW50aWFsaWFzZWQpOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250
UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdp
bmdUb1NjcmVlbl0sIEFudGlhbGlhc2VkKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTMgKzQxLDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGludCBiYXNl
bGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRy
b2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9s
UGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKLSAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQ
YXJ0LCBjb25zdCBGb250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBM
ZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExl
bmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCi0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29u
dHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpv
b21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3gg
Y29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJv
eCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBM
ZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVh
bCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFy
dCBwYXJ0KSBjb25zdCB7IHJldHVybiBwYXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIFRoZW1lKiBwbGF0Zm9ybVRoZW1lKCkKIAogLy8gSGVscGVy
IGZ1bmN0aW9ucyB1c2VkIGJ5IGEgYnVuY2ggb2YgZGlmZmVyZW50IGNvbnRyb2wgcGFydHMuCiAK
LXN0YXRpYyBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250JiBmb250
KQorc3RhdGljIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KQogewogICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4ZWxTaXplKCk7CiAgICAg
aWYgKGZvbnRTaXplID49IDE2KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHN0YXRpYyBMZW5ndGhTaXpl
IHNpemVGcm9tTlNDb250cm9sU2l6ZSgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
TGVuZ3RoU2l6ZSBzaXplRnJvbUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6
ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvciwgY29uc3Qgc3RkOjphcnJheTxJbnRTaXpl
LCAzPiYgc2l6ZXMpCitzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbUZvbnQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0
b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQogewogICAgIHJldHVybiBz
aXplRnJvbU5TQ29udHJvbFNpemUoY29udHJvbFNpemVGb3JGb250KGZvbnQpLCB6b29tZWRTaXpl
LCB6b29tRmFjdG9yLCBzaXplcyk7CiB9CkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIGNvbnN0
IGludCogY2hlY2tib3hNYXJnaW5zKE5TQ29udAogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xT
aXplXTsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgY2hlY2tib3hTaXplKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCitzdGF0
aWMgTGVuZ3RoU2l6ZSBjaGVja2JveFNpemUoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KICAgICBpZiAoIXpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICF6b29tZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCkBAIC0zMjMs
NyArMzIzLDcgQEAgc3RhdGljIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbAogICAg
IHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgcmFk
aW9TaXplKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZs
b2F0IHpvb21GYWN0b3IpCitzdGF0aWMgTGVuZ3RoU2l6ZSByYWRpb1NpemUoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0
b3IpCiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVk
LCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIXpvb21lZFNpemUud2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmICF6b29tZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2lj
T3JBdXRvKCkpCkBAIC01OTMsNyArNTkzLDcgQEAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8SW50
U2l6ZSwgMz4mIHN0ZQogCiAvLyBXZSBkb24ndCB1c2UgY29udHJvbFNpemVGb3JGb250KCkgZm9y
IHN0ZXBwZXJzIGJlY2F1c2UgdGhlIHN0ZXBwZXIgaGVpZ2h0CiAvLyBzaG91bGQgYmUgZXF1YWwg
dG8gb3IgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIHRleHQgZmllbGQgaGVpZ2h0LAotc3Rh
dGljIE5TQ29udHJvbFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250JiBm
b250KQorc3RhdGljIE5TQ29udHJvbFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25z
dCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6
ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxOCkKQEAgLTY3Myw3ICs2NzMsNyBAQCBpbnQgVGhl
bWVNYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50CiAgICAgcmV0dXJuIFRoZW1lOjpiYXNl
bGluZVBvc2l0aW9uQWRqdXN0bWVudChwYXJ0KTsKIH0KIAotRm9udERlc2NyaXB0aW9uIFRoZW1l
TWFjOjpjb250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdAorRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpjb250cm9sRm9u
dChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0
dG9uUGFydDogewpAQCAtNjkxLDcgKzY5MSw3IEBAIEZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6
Y29udHJvbEZvbnQoQ28KICAgICB9CiB9CiAKLUxlbmd0aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xT
aXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhTaXplIFRoZW1lTWFj
Ojpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CkBAIC03MTAs
NyArNzEwLDcgQEAgTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29udHJvbAogICAg
IH0KIH0KIAotTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQ
YXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5n
dGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKQEAgLTcyNyw3ICs3
MjcsNyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoCiAgICAgfQog
fQogCi1MZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBh
cnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVk
Qm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAg
ICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MzksNyArNzM5LDcgQEAgTGVuZ3RoQm94
IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRybwogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRo
ZW1lTWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xl
bmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIFB1c2hC
dXR0b25QYXJ0OiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMu
bW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRn
ZXRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIkNocm9t
ZS5oIgogI2ltcG9ydCAiQ3Vyc29yLmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAi
Rm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1w
b3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBQTEFURk9STShJT1MpCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiAjZW5k
aWYKIAogY2xhc3MgTG9jYWxlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
aW9zL0xvY2FsaXplZERhdGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBMb2NhbGl6ZWREYXRlQ2Fj
aGVfaAogCiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogY2xhc3MgTG9jYWxpemVkRGF0ZUNhY2hlIHsKIHB1Ymxp
YzoKICAgICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRlckZvckRhdGVUeXBlKERhdGVDb21wb25l
bnRzOjpUeXBlKTsKLSAgICBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9u
ZW50czo6VHlwZSwgY29uc3QgRm9udCYsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50Jik7CisgICAg
ZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmKTsKICAgICB2b2lkIGxvY2Fs
ZUNoYW5nZWQoKTsKIAogcHJpdmF0ZToKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBmbG9hdD4gRGF0ZVR5cGVNYXhXaWR0aE1hcDsKICAgICBEYXRl
VHlwZUZvcm1hdHRlck1hcCBtX2Zvcm1hdHRlck1hcDsKICAgICBEYXRlVHlwZU1heFdpZHRoTWFw
IG1fbWF4V2lkdGhNYXA7Ci0gICAgRm9udCBtX2ZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9mb250
OwogCiAgICAgZnJpZW5kIExvY2FsaXplZERhdGVDYWNoZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCk7
CiAgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPExvY2FsaXplZERhdGVDYWNoZT47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0
ZUNhY2hlLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNhY2hlLmgi
CiAKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJU
ZXh0UnVuLmgiCiAjaW1wb3J0IDxtYXRoLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgpA
QCAtNTIsNyArNTIsNiBAQCBzdGF0aWMgdm9pZCBfbG9jYWxlQ2hhbmdlZChDRk5vdGlmaWNhdGlv
CiB9CiAKIExvY2FsaXplZERhdGVDYWNoZTo6TG9jYWxpemVkRGF0ZUNhY2hlKCkKLSAgICA6IG1f
Zm9udChGb250KCkpCiB7CiAgICAgLy8gTGlzdGVuIHRvIENGIE5vdGlmaWNhdGlvbnMgZm9yIGxv
Y2FsZSBjaGFuZ2UsIGFuZCBjbGVhciB0aGUgY2FjaGUgd2hlbiBpdCBkb2VzLgogICAgIENGTm90
aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENl
bnRlcigpLCAodm9pZCopdGhpcywgX2xvY2FsZUNoYW5nZWQsCkBAIC04NCwxNCArODMsMTQgQEAg
TlNEYXRlRm9ybWF0dGVyICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmZvcgogICAgIHJldHVybiBkYXRl
Rm9ybWF0dGVyOwogfQogCi1mbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZv
ckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IE1lYXN1cmVUZXh0Q2xpZW50JiBtZWFzdXJlcikKK2Zsb2F0IExvY2FsaXplZERhdGVDYWNo
ZTo6bWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50JiBtZWFzdXJlcikK
IHsKICAgICBpbnQga2V5ID0gc3RhdGljX2Nhc3Q8aW50Pih0eXBlKTsKICAgICBpZiAobV9mb250
ID09IGZvbnQpIHsKICAgICAgICAgaWYgKG1fbWF4V2lkdGhNYXAuY29udGFpbnMoa2V5KSkKICAg
ICAgICAgICAgIHJldHVybiBtX21heFdpZHRoTWFwLmdldChrZXkpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1fZm9udCA9IEZvbnQoZm9udCk7CisgICAgICAgIG1fZm9udCA9IEZvbnRDYXNjYWRl
KGZvbnQpOwogICAgICAgICBtX21heFdpZHRoTWFwLmNsZWFyKCk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgogCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIEVs
bGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgICAgIHNldFNoYWRvdyA9IHRy
dWU7CiAgICAgfQogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZS5mb250KCk7Cisg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsK
ICAgICAgICAgcGFpbnRTZWxlY3Rpb24oY29udGV4dCwgcGFpbnRPZmZzZXQsIGxpbmVTdHlsZSwg
Zm9udCk7CiAKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludE1hcmt1
cEJveChQYWludEluCiBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KCkKIHsKICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAg
Y29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBjb25zdCBSb290SW5saW5l
Qm94JiByb290Qm94ID0gcm9vdCgpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMg
TFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgogICAgIExh
eW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QoeCgpLCB5KCkgKyByb290Qm94LnNl
bGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSwgMCwgcm9vdEJveC5zZWxlY3Rp
b25IZWlnaHRBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpOwpAQCAtMTE5LDcgKzExOSw3IEBA
IEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwogfQogCi12b2lkIEVsbGlwc2lzQm94OjpwYWludFNl
bGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQordm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUu
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIENvbG9yIGMgPSBi
bG9ja0Zsb3coKS5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSwgY29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZSB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRl
OyB9Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlv
dXRQb2ludCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAgICAgSW5saW5lQm94KiBtYXJrdXBC
b3goKSBjb25zdDsKIAogICAgIGJvb2wgbV9zaG91bGRQYWludE1hcmt1cEJveDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsbGlwc2lzQm94LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGlu
ZShJbmxpbmVCb3gqCiAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVM
aW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChjaGlsZC0+YmVo
YXZlc0xpa2VUZXh0KCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc0xp
bmVCcmVhaygpIHx8IGNoaWxkLT5yZW5kZXJlcigpLnBhcmVudCgpICE9ICZyZW5kZXJlcigpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5o
YXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnQoKS5mb250
TWV0cmljcygpKQorICAgICAgICAgICAgICAgIGlmICghcGFyZW50U3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxk
U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpKQogICAgICAgICAgICAgICAgICAgICB8
fCBwYXJlbnRTdHlsZS5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS5saW5lSGVpZ2h0KCkKICAg
ICAgICAgICAgICAgICAgICAgfHwgKHBhcmVudFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNF
TElORSAmJiAhaXNSb290SW5saW5lQm94KCkpIHx8IGNoaWxkU3R5bGUudmVydGljYWxBbGlnbigp
ICE9IEJBU0VMSU5FKQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRz
SGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSB0cnVlOwpAQCAtMTM4LDcgKzEzOCw3IEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKElubGluZUJveCoKICAgICAgICAgICAgICAg
ICBhdXRvJiBjaGlsZEZsb3dCb3ggPSBkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpOwog
ICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBjaGlsZCdzIGJpdCwgYW5kIHRoZW4gYWxzbyBj
aGVjayBmb3IgZGlmZmVyZW5jZXMgaW4gZm9udCwgbGluZS1oZWlnaHQsIHZlcnRpY2FsLWFsaWdu
CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZEZsb3dCb3guZGVzY2VuZGFudHNIYXZlU2FtZUxp
bmVIZWlnaHRBbmRCYXNlbGluZSgpCi0gICAgICAgICAgICAgICAgICAgIHx8ICFwYXJlbnRTdHls
ZS5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdh
cChjaGlsZFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICAgICAgICAgICAgICB8
fCAhcGFyZW50U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFz
Y2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpKQogICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRTdHlsZS5saW5lSGVpZ2h0KCkgIT0g
Y2hpbGRTdHlsZS5saW5lSGVpZ2h0KCkKICAgICAgICAgICAgICAgICAgICAgfHwgKHBhcmVudFN0
eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSAmJiAhaXNSb290SW5saW5lQm94KCkpIHx8
IGNoaWxkU3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgICAgICAgICAg
ICAgIHx8IGNoaWxkU3R5bGUuaGFzQm9yZGVyKCkgfHwgY2hpbGRTdHlsZS5oYXNQYWRkaW5nKCkg
fHwgY2hpbGRTdHlsZS5oYXNUZXh0Q29tYmluZSgpKQpAQCAtMzg4LDcgKzM4OCw3IEBAIGZsb2F0
IElubGluZUZsb3dCb3g6OnBsYWNlQm94UmFuZ2VJbklubGkKICAgICAgICAgICAgIFJlbmRlclRl
eHQmIHJlbmRlclRleHQgPSB0ZXh0Qm94LnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAocmVu
ZGVyVGV4dC50ZXh0TGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXb3JkU3Bh
Y2luZyAmJiBpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQodGV4dEJveC5z
dGFydCgpKSkpCi0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHRleHRCb3gubGlu
ZVN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGxvZ2lj
YWxMZWZ0ICs9IHRleHRCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygp
OwogICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShy
ZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3guZW5kKCkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRleHRCb3guc2V0TG9naWNhbExlZnQobG9naWNhbExlZnQpOwpAQCAtNDQ5LDcg
KzQ0OSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKIAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBp
ZiAobGluZVN0eWxlLmZvbnREZXNjcmlwdGlvbigpLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9
PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodAotICAgICAgICB8fCBsaW5lU3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxp
bmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhz
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CkBAIC00
NjAsNyArNDYwLDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgog
ICAgICAgICAgICAgaWYgKGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpjaGlsZCkucmVxdWlyZXNJ
ZGVvZ3JhcGhpY0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0
eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAg
ICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7CkBAIC04NzMsNyArODczLDcgQEAgaW5saW5lIHZv
aWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpcwogCiAgICAgYm9vbCBlbXBoYXNpc01hcmtJ
c0Fib3ZlOwogICAgIGlmIChsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBo
YXNpc01hcmtOb25lICYmIHRleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5l
U3R5bGUsIGVtcGhhc2lzTWFya0lzQWJvdmUpKSB7Ci0gICAgICAgIGludCBlbXBoYXNpc01hcmtI
ZWlnaHQgPSBsaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChsaW5lU3R5bGUudGV4
dEVtcGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodCA9
IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChsaW5lU3R5bGUudGV4
dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgaWYgKGVtcGhhc2lzTWFya0lzQWJvdmUg
PT0gIWxpbmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICB0
b3BHbHlwaE92ZXJmbG93ID0gc3RkOjptaW4odG9wR2x5cGhPdmVyZmxvdywgLWVtcGhhc2lzTWFy
a0hlaWdodCk7CiAgICAgICAgIGVsc2UKQEAgLTg4Miw3ICs4ODIsNyBAQCBpbmxpbmUgdm9pZCBJ
bmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzCiAKICAgICAvLyBJZiBsZXR0ZXItc3BhY2luZyBp
cyBuZWdhdGl2ZSwgd2Ugc2hvdWxkIGZhY3RvciB0aGF0IGludG8gcmlnaHQgbGF5b3V0IG92ZXJm
bG93LiAoRXZlbiBpbiBSVEwsIGxldHRlci1zcGFjaW5nIGlzCiAgICAgLy8gYXBwbGllZCB0byB0
aGUgcmlnaHQsIHNvIHRoaXMgaXMgbm90IGFuIGlzc3VlIHdpdGggbGVmdCBvdmVyZmxvdy4KLSAg
ICByaWdodEdseXBoT3ZlcmZsb3cgLT0gc3RkOjptaW4oMCwgKGludClsaW5lU3R5bGUuZm9udCgp
LmxldHRlclNwYWNpbmcoKSk7CisgICAgcmlnaHRHbHlwaE92ZXJmbG93IC09IHN0ZDo6bWluKDAs
IChpbnQpbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2luZygpKTsKIAogICAgIExh
eW91dFVuaXQgdGV4dFNoYWRvd0xvZ2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCB0ZXh0U2hhZG93
TG9naWNhbEJvdHRvbTsKQEAgLTE1MzQsMTAgKzE1MzQsMTAgQEAgTGF5b3V0VW5pdCBJbmxpbmVG
bG93Qm94Ojpjb21wdXRlT3ZlckFubgogICAgICAgICAgICAgYm9vbCBlbXBoYXNpc01hcmtJc0Fi
b3ZlOwogICAgICAgICAgICAgaWYgKGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAh
PSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqY2hpbGQp
LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY2hpbGRMaW5lU3R5bGUsIGVtcGhhc2lzTWFy
a0lzQWJvdmUpICYmIGVtcGhhc2lzTWFya0lzQWJvdmUpIHsKICAgICAgICAgICAgICAgICBpZiAo
IWNoaWxkTGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpbnQgdG9wT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0g
Y2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgdG9wT2ZF
bXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENh
c2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0
LCBhbGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJvdHRvbU9mRW1waGFzaXNNYXJrID0g
Y2hpbGQtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01h
cmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxC
b3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0
KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYm90dG9tT2ZFbXBoYXNpc01hcmsgLSBh
bGxvd2VkUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE1
ODMsMTAgKzE1ODMsMTAgQEAgTGF5b3V0VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlVW5kZXJB
bgogICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01h
cmtFeGlzdHNBbmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKTsK
ICAgICAgICAgICAgIGlmIChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4
dEVtcGhhc2lzTWFya05vbmUgJiYgIWVtcGhhc2lzTWFya0lzQWJvdmUpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWNoaWxkTGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hp
bGQtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtI
ZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dp
Y2FsQm90dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hl
aWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChyZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJr
IC0gYWxsb3dlZFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxU
b3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5l
U3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExp
bmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dGQ6Om1heChyZXN1bHQsIGFsbG93ZWRQb3NpdGlvbiAtIHRvcE9mRW1waGFzaXNNYXJrKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSwx
NCArMjQ1LDE0IEBAIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEIKICAg
ICByZXR1cm4gc3RhdGU7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250JiBmb250VG9Vc2UoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikKK3N0YXRpYyBj
b25zdCBGb250Q2FzY2FkZSYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpCiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5l
KCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKSkgewogICAgICAgICBjb25zdCBh
dXRvJiB0ZXh0Q29tYmluZVJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJl
bmRlcmVyKTsKICAgICAgICAgaWYgKHRleHRDb21iaW5lUmVuZGVyZXIuaXNDb21iaW5lZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRleHRDb21iaW5lUmVuZGVyZXIudGV4dENvbWJpbmVGb250KCk7
CiAgICAgfQotICAgIHJldHVybiBzdHlsZS5mb250KCk7CisgICAgcmV0dXJuIHN0eWxlLmZvbnRD
YXNjYWRlKCk7CiB9CiAKIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25S
ZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKQEAgLTI2Niw3ICsyNjYsNyBAQCBM
YXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uCiAgICAgTGF5b3V0VW5pdCBz
ZWxlY3Rpb25Ub3AgPSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IHNlbGVj
dGlvbkhlaWdodCA9IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpOwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250
ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKIAogICAgIFN0cmlu
ZyBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyOwogICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IGVQb3Mg
PT0gbV9sZW4gJiYgaGFzSHlwaGVuKCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxl
ID0gdGV4dFBhaW50U3R5bGU7CiAKICAgICAvLyBTZXQgb3VyIGZvbnQuCi0gICAgY29uc3QgRm9u
dCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAg
Ly8gMS4gUGFpbnQgYmFja2dyb3VuZHMgYmVoaW5kIHRleHQgaWYgbmVlZGVkLiBFeGFtcGxlcyBv
ZiBzdWNoIGJhY2tncm91bmRzIGluY2x1ZGUgc2VsZWN0aW9uCiAgICAgLy8gYW5kIGNvbXBvc2l0
aW9uIHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2Vs
ZWN0aW9uICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlVGV4dENsaXAgJiYgIWlzUHJp
bnRpbmcpIHsKQEAgLTY3OCw3ICs2NzgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnNlbGVjdGlv
blN0YXJ0RW5kKGluCiAgICAgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQp
bV9sZW4pOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKK3ZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKIHsKICNpZiBFTkFCTEUoVEVY
VF9TRUxFQ1RJT04pCiAgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNzM3
LDcgKzczNyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgKICNl
bmRpZgogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGludCBzdGFydFBvcywg
aW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGludCBz
dGFydFBvcywgaW50IGVuZFBvcykKIHsKICAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKICAgICBp
bnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gb2Zmc2V0LCAwKTsKQEAgLTEwNTgsNyArMTA1
OCw3IEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGkKICAgICB9CiB9
CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVu
dE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQsIGJvb2wgZ3JhbW1hcikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtl
cihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
UmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIg
cHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5kZXJl
cigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSkKQEAgLTExMjgsNyArMTEyOCw3IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcigKICAgICBjb250ZXh0LmRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIoRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdp
bi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgbGluZVN0eWxlRm9yTWFya2VyVHlwZSht
YXJrZXIudHlwZSgpKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hN
YXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBGb250JiBmb250KQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRj
aE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIExheW91dFVuaXQgc2VsZWN0
aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAKQEAgLTExNTksNyArMTE1OSw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIKICAgICB9CiB9CiAK
LXZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihSZW5k
ZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNl
bWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gUmVwbGFjZW1l
bnQgbWFya2VycyBhcmUgbm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVjdHMgbmVlZCB0
byBiZSBjb21wdXRlZCBmb3IgaGl0IHRlc3RpbmcuCiAgICAgTGF5b3V0VW5pdCB0b3AgPSBzZWxl
Y3Rpb25Ub3AoKTsKQEAgLTExNzcsNyArMTE3Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29t
cHV0ZVJlY3RGb3JSZXBsYWMKICAgICBtYXJrZXIuc2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3Qp
OwogfQogICAgIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2
b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBib29sIGJhY2tncm91bmQpCiB7CiAgICAg
aWYgKCFyZW5kZXJlcigpLnRleHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMjksNyAr
MTMyOSw3IEBAIGludCBJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihmbG8KICAgICAg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBsZW4oKTsKIAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25z
dCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsK
ICAgICByZXR1cm4gZm9udC5vZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKGxpbmVT
dHlsZSwgZm9udCksIGxpbmVPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEds
eXBocyk7CiB9CiAKQEAgLTEzNDIsNyArMTM0Miw3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBv
c2l0aW9uRm9yT2Zmc2V0KGkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0KCk7CiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29u
c3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7
CiAgICAgaW50IGZyb20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0gbV9z
dGFydCA6IDA7CiAgICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVu
IDogb2Zmc2V0IC0gbV9zdGFydDsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmln
aHRCZWFyaW5nIGhlcmU/CkBAIC0xMzUyLDcgKzEzNTIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldChpCiAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVRleHRSdW4gSW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEZvbnQmIGZvbnQsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1Rl
eHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdC
dWZmZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dCgpKTsKIApAQCAtMTM2
Niw3ICsxMzY2LDcgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKAog
ICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250LCBzdHJpbmcsIHJlbmRlcmVy
KCkudGV4dExlbmd0aCgpIC0gc3RhcnRQb3MsIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpOwogfQog
Ci1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBtYXhp
bXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVu
IElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11
bUxlbmd0aCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAogewogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCAr
MTA0LDggQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0
OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgU3RyaW5n
KiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7Ci0gICAgVGV4dFJ1biBj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZywg
dW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0g
bnVsbHB0cikgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZm
ZXIgPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIFN0cmluZywgdW5zaWduZWQgbWF4aW11
bUxlbmd0aCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7
CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkg
Y29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0K
QEAgLTE0OCwxNyArMTQ4LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9u
Rm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYWlu
dENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50
JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGludCBzdGFydFBv
cywgaW50IGVuZFBvcyk7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3VuZCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9u
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpOworICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRp
b25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgVGV4dERlY29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEq
LCBUZXh0UGFpbnRlciYpOwotICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEZvbnQmLCBDb2xvciB0ZXh0Q29sb3IpOwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29sIGdyYW1t
YXIpOwotICAgIHZvaWQgcGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBDb2xvciB0ZXh0Q29sb3IpOworICAgIHZvaWQgcGFp
bnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgYm9vbCBncmFtbWFyKTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFy
a2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUm
KTsKIAotICAgIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9p
ZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKICAgICBUZXh0UnVu
OjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiAgICAgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1
c3RMb2dpY2FsTGVmCiAgICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vz
bid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlk
LT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBm
bG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAg
ICAgICByZXR1cm4gbGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKICAgICAv
LyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVk
IHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldp
ZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJX
aWR0aCgpOworICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhD
aGFyV2lkdGgpCiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzAwMyw3ICszMDAzLDcgQEAg
c3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAgICBuZXdGb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKICAgICAgICAg
bmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKICAg
ICAgICAgcHNldWRvU3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24p
OwotICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udCgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9udCgp
LmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBk
YXRlKHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAg
CiAgICAgICAgIGludCBkZXNpcmVkQ2FwSGVpZ2h0ID0gKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0
dGVySGVpZ2h0KCkgLSAxKSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1l
dHJpY3MoKS5jYXBIZWlnaHQoKTsKICAgICAgICAgaW50IGFjdHVhbENhcEhlaWdodCA9IHBzZXVk
b1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwpAQCAtMzAxMiw3ICszMDEyLDcgQEAg
c3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAgICAgICAgbmV3
Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNp
ZmllZFNpemUoKSAtIDEpOwogICAgICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgLTEpOwogICAgICAgICAg
ICAgcHNldWRvU3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwot
ICAgICAgICAgICAgcHNldWRvU3R5bGUtPmZvbnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQo
KS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUo
KS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAgICAgYWN0dWFsQ2FwSGVpZ2h0ID0gcHNldWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuY2Fw
SGVpZ2h0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjkzLDcgKzM2OTMsNyBAQCBjb25zdCBj
aGFyKiBSZW5kZXJCbG9jazo6cmVuZGVyTmFtZSgpIGNvCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5J
bnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENo
YXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorc3RhdGljIGlubGlu
ZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24g
PSBMVFI7CiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmco
KSA9PSBWaXN1YWxPcmRlcjsKQEAgLTM3MDgsNyArMzcwOCw3IEBAIHN0YXRpYyBpbmxpbmUgVGV4
dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1zdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJl
bmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK3N0
YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVu
OjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAg
ICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBMVFI7CiAgICAgYm9vbCBkaXJlY3Rpb25h
bE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKQEAgLTM3Mjcs
MjQgKzM3MjcsMjQgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5Jbgog
ICAgIHJldHVybiBydW47CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVu
OjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBy
ZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZvbnQsIGNoYXJhY3RlcnMs
IGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lv
bikKIHsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZvbnQs
IGNoYXJhY3RlcnMsIGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVy
QmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgaWYg
KHRleHQtPmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFs
KGNvbnRleHQsIGZvbnQsIHRleHQtPmNoYXJhY3RlcnM4KCksIHRleHQtPnRleHRMZW5ndGgoKSwg
c3R5bGUsIGV4cGFuc2lvbik7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChj
b250ZXh0LCBmb250LCB0ZXh0LT5jaGFyYWN0ZXJzMTYoKSwgdGV4dC0+dGV4dExlbmd0aCgpLCBz
dHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRl
clRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1Rl
eHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIEFTU0VSVChvZmZzZXQg
KyBsZW5ndGggPD0gdGV4dC0+dGV4dExlbmd0aCgpKTsKICAgICBpZiAodGV4dC0+aXM4Qml0KCkp
CkBAIC0zNzUyLDcgKzM3NTIsNyBAQCBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0
UnVuKFJlCiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250
LCB0ZXh0LT5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9u
KTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lv
biwgVGV4dFJ1bkZsYWdzIGZsYWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBh
bnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDIyICsyMDIsMjIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gb2JqLT5pc0Zsb2F0aW5nKCkgfHwgKG9iai0+aXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIW9iai0+c3R5bGUoKS5pc09yaWdpbmFsRGlzcGxheUlu
bGluZVR5cGUoKSAmJiAhb2JqLT5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNv
bnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBSZW5kZXJTdHlsZSYsCisg
ICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAog
ICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRSdW46OkFsbG93VHJhaWxp
bmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBUZXh0UnVuRmxh
Z3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVy
VGV4dCosIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBS
ZW5kZXJUZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNp
b25CZWhhdmlvciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpG
b3JiaWRMZWFkaW5nRXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRl
eHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4
dCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYs
CisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRl
eHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBS
ZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3Rh
dGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVkIG9mZnNldCwgY29uc3Qg
UmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRS
dW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5z
aW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBU
ZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNp
b24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Jiwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwK
KyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlv
ciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFk
aW5nRXhwYW5zaW9uKTsKICAgICAKICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ3LDcgKzM5NDcsNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgc3RyaXBUcmFpbGluZ1NwYWNlKGZsCiAgICAgICAgIC8vIENvbGxhcHNlIGF3
YXkgdGhlIHRyYWlsaW5nIHNwYWNlIGF0IHRoZSBlbmQgb2YgYSBibG9jay4KICAgICAgICAgUmVu
ZGVyVGV4dCYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCp0cmFpbGluZ1NwYWNl
Q2hpbGQpOwogICAgICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsKLSAgICAgICAgY29uc3Qg
Rm9udCYgZm9udCA9IHJlbmRlclRleHQuc3R5bGUoKS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGln
bm9yZXMgZmlyc3QtbGluZS4KKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSByZW5k
ZXJUZXh0LnN0eWxlKCkuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJz
dC1saW5lLgogICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bigmcmVuZGVyVGV4dCwgZm9udCwgJnNwYWNlLCAxLCByZW5kZXJU
ZXh0LnN0eWxlKCkpKTsKICAgICAgICAgaW5saW5lTWF4IC09IHNwYWNlV2lkdGggKyBmb250Lndv
cmRTcGFjaW5nKCk7CiAgICAgICAgIGlmIChpbmxpbmVNaW4gPiBpbmxpbmVNYXgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CiAgICAgR2x5cGhPdmVyZmxvdyBnbHlwaE92
ZXJmbG93OwogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBh
cmVudCgpLCBsaW5lSW5mbykuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
bGluZVN0eWxlKCpyZW5kZXJlci0+cGFyZW50KCksIGxpbmVJbmZvKS5mb250Q2FzY2FkZSgpOwog
ICAgIC8vIEFsd2F5cyBjb21wdXRlIGdseXBoIG92ZXJmbG93IGlmIHRoZSBibG9jaydzIGxpbmUt
Ym94LWNvbnRhaW4gdmFsdWUgaXMgImdseXBocyIuCiAgICAgaWYgKGxpbmVCb3gtPmZpdHNUb0ds
eXBocygpKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IHN0aWNrIG91dCBvZiB0aGUgcm9vdCBs
aW5lJ3MgZm9udCBib3gsIHRoZW4gZG9uJ3QgYm90aGVyIGNvbXB1dGluZyBvdXIgZ2x5cGggb3Zl
cmZsb3cuIFRoaXMgb3B0aW1pemF0aW9uCkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogICAgICAgICAgICAgICAgICAgICAmd29yZE1l
YXN1cmVtZW50LmZhbGxiYWNrRm9udHMsICZvdmVyZmxvdyk7CiAgICAgICAgICAgICAgICAgVUNo
YXIgYyA9IHJlbmRlcmVyLT5jaGFyYWN0ZXJBdCh3b3JkTWVhc3VyZW1lbnQuc3RhcnRPZmZzZXQp
OwogICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiB3b3JkTGVuZ3RoID09IDEgJiYgKGMgPT0g
JyAnIHx8IGMgPT0gJ1x0JykpCi0gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0g
cmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1lYXN1cmVkV2lkdGggKz0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS53b3Jk
U3BhY2luZygpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbWVhc3VyZWRX
aWR0aCArPSB3b3JkTWVhc3VyZW1lbnQud2lkdGg7CiAgICAgICAgICAgICBpZiAoIXdvcmRNZWFz
dXJlbWVudC5mYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewpAQCAtNzQzLDE0ICs3NDMsMTQgQEAg
QmlkaVJ1biogUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRAogICAgICAgICAgICAgaWYg
KHRleHRBbGlnbiA9PSBKVVNUSUZZICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQogICAgICAgICAgICAgICAgICAgICBk
b3duY2FzdDxJbmxpbmVUZXh0Qm94PigqcnVuLT5ib3goKSkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBh
bnNpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVu
ID0gRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0cmluZ1ZpZXco
cnVuLT5tX3N0YXJ0LCBydW4tPm1fc3RvcCksIHJ1bi0+Ym94KCktPmRpcmVjdGlvbigpLCBpc0Fm
dGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5S
dW4gPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0
cmluZ1ZpZXcocnVuLT5tX3N0YXJ0LCBydW4tPm1fc3RvcCksIHJ1bi0+Ym94KCktPmRpcmVjdGlv
bigpLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1
bml0aWVzLmFwcGVuZChvcHBvcnR1bml0aWVzSW5SdW4pOwogICAgICAgICAgICAgICAgIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoaW50IGxlbmd0aCA9IHJlbmRlclRleHQudGV4dExlbmd0aCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFydW4tPm1fc3RhcnQgJiYgbmVlZHNXb3JkU3BhY2lu
ZyAmJiBpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQocnVuLT5tX3N0YXJ0
KSkpCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGxpbmVTdHlsZSgq
cmVuZGVyVGV4dC5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnQoKS53b3JkU3BhY2luZygpOworICAg
ICAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRl
eHQucGFyZW50KCksIGxpbmVJbmZvKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7CiAgICAg
ICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRl
eHQuY2hhcmFjdGVyQXQocnVuLT5tX3N0b3AgLSAxKSkgJiYgcnVuLT5tX3N0b3AgPT0gbGVuZ3Ro
OwogICAgICAgICAgICAgfQogCkBAIC03NjgsNyArNzY4LDcgQEAgQmlkaVJ1biogUmVuZGVyQmxv
Y2tGbG93Ojpjb21wdXRlSW5saW5lRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25j
YXN0PElubGluZVRleHRCb3g+KCpsZWFmQ2hpbGQpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9u
KHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgZW5jb3VudGVyZWRKdXN0aWZpZWRSdWJ5
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlclRleHQgPSBkb3du
Y2FzdDxSZW5kZXJUZXh0PihsZWFmQ2hpbGQtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udDo6ZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0cmluZ1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rp
b24oKSwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudChyZW5kZXJUZXh0LnN0cmluZ1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSwgaXNB
ZnRlckV4cGFuc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1
bml0aWVzLmFwcGVuZChvcHBvcnR1bml0aWVzSW5SdW4pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBvcHBvcnR1bml0aWVzSW5SdW47CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTE5MDcsOSArMTkwNyw5IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpjaGVja0xpbmVzRm9yVGV4dE8KIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIG9m
IHRoZSBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgogICAgIC8vIEZJWE1FOiBDU1Mz
IHNheXMgdGhpcyBpcyBjb25maWd1cmFibGUsIGFsc28gbmVlZCB0byB1c2UgMHgwMDJFIChGVUxM
IFNUT1ApIGlmIGhvcml6b250YWwgZWxsaXBzaXMgaXMgIm5vdCByZW5kZXJhYmxlIgotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBlbGxpcHNpc1N0ciwgKCZob3Jpem9udGFsRWxsaXBzaXMs
IDEpKTsKLSAgICBjb25zdCBGb250JiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5m
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZpcnN0TGluZUZvbnQgPSBmaXJzdExpbmVT
dHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgZmxvYXQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9
IGZpcnN0TGluZUZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmaXJzdExpbmVGb250
LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBmaXJzdExpbmVTdHlsZSgpKSk7CiAgICAgZmxvYXQg
ZWxsaXBzaXNXaWR0aCA9IChmb250ID09IGZpcnN0TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBz
aXNXaWR0aCA6IGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmaG9yaXpv
bnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRl
eHQoCiAgICAgbV9uZWVkc0ZvbnRVcGRhdGUgPSB0cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21i
aW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250
JiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0
IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVy
ZmxvdykgY29uc3QKIHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICByZXR1cm4gZm9u
dC5zaXplKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29t
YmluZVRleHQoKQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoID0gd2lkdGgoMCwgdGV4dExl
bmd0aCgpLCBvcmlnaW5hbEZvbnQoKSwgMCwgbnVsbHB0ciwgJmdseXBoT3ZlcmZsb3cpOwogICAg
IG1faXNDb21iaW5lZCA9IGNvbWJpbmVkVGV4dFdpZHRoIDw9IGVtV2lkdGg7CiAgICAgCi0gICAg
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnQoKS5mb250U2VsZWN0b3Io
KTsKKyAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5mb250U2VsZWN0b3IoKTsKIAogICAgIGlmIChtX2lzQ29tYmluZWQpCiAgICAgICAgIHNob3Vs
ZFVwZGF0ZUZvbnQgPSBtX2NvbWJpbmVGb250U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZXNj
cmlwdGlvbik7IC8vIE5lZWQgdG8gY2hhbmdlIGZvbnQgb3JpZW50YXRpb24gdG8gaG9yaXpvbnRh
bC4KQEAgLTExNyw3ICsxMTcsOCBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4
dCgpCiAgICAgICAgIHN0YXRpYyBjb25zdCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudHNb
XSA9IHsgSGFsZldpZHRoLCBUaGlyZFdpZHRoLCBRdWFydGVyV2lkdGggfTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDAgOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh3aWR0aFZhcmlhbnRzKSA7ICsr
aSkgewogICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0V2lkdGhWYXJpYW50KHdpZHRoVmFyaWFu
dHNbaV0pOwotICAgICAgICAgICAgRm9udCBjb21wcmVzc2VkRm9udCA9IEZvbnQoZGVzY3JpcHRp
b24sIHN0eWxlKCkuZm9udCgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250KCkud29yZFNw
YWNpbmcoKSk7CisKKyAgICAgICAgICAgIEZvbnRDYXNjYWRlIGNvbXByZXNzZWRGb250KGRlc2Ny
aXB0aW9uLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2luZygpLCBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICBjb21wcmVzc2VkRm9udC51
cGRhdGUoZm9udFNlbGVjdG9yKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZmxvYXQgcnVu
V2lkdGggPSBSZW5kZXJUZXh0Ojp3aWR0aCgwLCB0ZXh0TGVuZ3RoKCksIGNvbXByZXNzZWRGb250
LCAwLCBudWxscHRyLCAmZ2x5cGhPdmVyZmxvdyk7CkBAIC0xMzYsNyArMTM3LDcgQEAgdm9pZCBS
ZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBzaG91bGRVcGRhdGVGb250
ID0gbV9jb21iaW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24ob3JpZ2luYWxGb250KCku
Zm9udERlc2NyaXB0aW9uKCkpOwogCiAgICAgaWYgKHNob3VsZFVwZGF0ZUZvbnQpCi0gICAgICAg
IG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgICAg
ICBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7
CiAKICAgICBpZiAobV9pc0NvbWJpbmVkKSB7CiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyU3RyaW5nLCAoJm9i
amVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgUmVuZGVyQ29tYmluZVRleHRfaAogI2RlZmluZSBSZW5k
ZXJDb21iaW5lVGV4dF9oCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTM4LDE1ICszOCwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGp1c3RUZXh0T3JpZ2luKEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVj
dCYgYm94UmVjdCkgY29uc3Q7CiAgICAgdm9pZCBnZXRTdHJpbmdUb1JlbmRlcihpbnQsIFN0cmlu
ZyYsIGludCYgbGVuZ3RoKSBjb25zdDsKICAgICBib29sIGlzQ29tYmluZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzQ29tYmluZWQ7IH0KLSAgICBmbG9hdCBjb21iaW5lZFRleHRXaWR0aChjb25zdCBG
b250JiBmb250KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQotICAgIGNvbnN0IEZvbnQm
IG9yaWdpbmFsRm9udCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpLmZvbnQoKTsg
fQotICAgIGNvbnN0IEZvbnQmIHRleHRDb21iaW5lRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY29t
YmluZUZvbnRTdHlsZS0+Zm9udCgpOyB9CisgICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CisgICAg
Y29uc3QgRm9udENhc2NhZGUmIG9yaWdpbmFsRm9udCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCgp
LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCk7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgdGV4dENv
bWJpbmVGb250KCkgY29uc3QgeyByZXR1cm4gbV9jb21iaW5lRm9udFN0eWxlLT5mb250Q2FzY2Fk
ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBub2RlKCkgY29uc3QgPSBkZWxldGU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb21iaW5lVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgRm9udCYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0g
MCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlckNvbWJpbmVUZXh0IjsgfQogICAgIHZpcnR1
YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlcmVkVGV4dChj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0
UmVwYWludGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3g6OmFwcGx5TAogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWlj
U3RyaW5nLCBlbGxpcHNpc0FuZFNwYWNlU3RyLCAoZWxsaXBzaXNBbmRTcGFjZSwgMikpOwogICAg
ICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBlbGxpcHNp
c1N0ciwgKCZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGxpbmVTdHlsZSA9IG51bVZpc2libGVMaW5lcyA9PSAxID8gZmlyc3RMaW5lU3R5bGUoKSA6
IHN0eWxlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOwor
ICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgp
OwogCiAgICAgICAgIC8vIEdldCBlbGxpcHNpcyB3aWR0aCwgYW5kIGlmIHRoZSBsYXN0IGNoaWxk
IGlzIGFuIGFuY2hvciwgaXQgd2lsbCBnbyBhZnRlciB0aGUgZWxsaXBzaXMsIHNvIGFkZCBpbiBh
IHNwYWNlIGFuZCB0aGUgYW5jaG9yIHdpZHRoIHRvbwogICAgICAgICBMYXlvdXRVbml0IHRvdGFs
V2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9p
ZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIEZsb2F0UmVjdCBpbmRp
Y2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0OwogICAgIEZsb2F0
UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAg
ICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsKICAgICBpZiAoIWdldFJl
cGxhY2VtZW50VGV4dEdlb21ldHJ5KHBhaW50T2Zmc2V0LCBjb250ZW50UmVjdCwgaW5kaWNhdG9y
UmVjdCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0
aCkpCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2V0VW5h
dmFpbGFibAogICAgIHJlcGFpbnQoKTsKIH0KIAotYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3Qs
IEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZv
bnQmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3QKK2Jvb2wgUmVu
ZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRS
ZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0
UmVjdCYgYXJyb3dSZWN0LCBGb250Q2FzY2FkZSYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYg
dGV4dFdpZHRoKSBjb25zdAogewogICAgIGJvb2wgaW5jbHVkZXNBcnJvdyA9IHNob3VsZFVuYXZh
aWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKGRvY3VtZW50KCksIG1fcGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24pOwogCkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6Z2V0UmVwbGFjZW1lbgogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdl
aWdodEJvbGQpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKGZyYW1lKCku
c2V0dGluZ3MoKS5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKDEyKTsKLSAgICBmb250ID0gRm9udChmb250RGVzY3JpcHRpb24sIDAsIDAp
OworICAgIGZvbnQgPSBGb250Q2FzY2FkZShmb250RGVzY3JpcHRpb24sIDAsIDApOwogICAgIGZv
bnQudXBkYXRlKDApOwogCiAgICAgcnVuID0gVGV4dFJ1bihtX3VuYXZhaWxhYmxlUGx1Z2luUmVw
bGFjZW1lbnRUZXh0KTsKQEAgLTM5MSw3ICszOTEsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckVtYmVk
ZGVkT2JqZWN0Ojp1bmF2YWlsCiAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3Q7CiAgICAgRmxv
YXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRSZWN0IGFycm93UmVjdDsKLSAg
ICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBUZXh0UnVuIHJ1bigiIiwg
MCk7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIGlmIChnZXRSZXBsYWNlbWVudFRleHRHZW9t
ZXRyeShhY2N1bXVsYXRlZE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxh
Y2VtZW50VGV4dFJlY3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtNTgy
LDcgKzU4Miw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWIKICAg
ICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0
UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0OwotICAgIEZvbnQgZm9udDsKKyAgICBGb250
Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIiKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7
CiAgICAgcmV0dXJuIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KEludFBvaW50KCksIGNvbnRl
bnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBhcnJvd1JlY3QsIGZv
bnQsIHJ1biwgdGV4dFdpZHRoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGlj
YXRvcklzUHJlc3NlZChib29sKTsKICAgICBib29sIGlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGlj
YXRvcihjb25zdCBNb3VzZUV2ZW50JikgY29uc3Q7CiAgICAgYm9vbCBpc0luVW5hdmFpbGFibGVQ
bHVnaW5JbmRpY2F0b3IoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0UmVw
bGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0
UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnQmLCBU
ZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3Q7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVu
dFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0
UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwgRmxvYXRSZWN0JiBy
ZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9udENhc2NhZGUmLCBU
ZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCB1bmF2YWls
YWJsZVBsdWdpbkluZGljYXRvckJvdW5kcyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsy
Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKIAogI2luY2x1ZGUg
IkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKIAogICAgIGlmIChwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNw
bGF5ZWRGaWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0
VGV4dFJ1bih0aGlzLCBmb250LCBkaXNwbGF5ZWRGaWxlbmFtZSwgc3R5bGUoKSwgVGV4dFJ1bjo6
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJlY3Rp
b25PdmVycmlkZSk7CiAgICAgICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApA
QCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVJ
bnQKICAgICAvLyAodXNpbmcgIjAiIGFzIHRoZSBub21pbmFsIGNoYXJhY3RlcikuCiAgICAgY29u
c3QgVUNoYXIgY2hhcmFjdGVyID0gJzAnOwogICAgIGNvbnN0IFN0cmluZyBjaGFyYWN0ZXJBc1N0
cmluZyA9IFN0cmluZygmY2hhcmFjdGVyLCAxKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcyBjb25zdF9j
YXN0IGJ5IG1ha2luZyBjb25zdHJ1Y3RUZXh0UnVuIHRha2UgYSBjb25zdCBSZW5kZXJPYmplY3Qq
LgogICAgIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wqPih0aGlzKTsKICAgICBmbG9hdCBtaW5EZWZhdWx0TGFiZWxX
aWR0aCA9IGRlZmF1bHRXaWR0aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVu
KHJlbmRlcmVyLCBmb250LCBjaGFyYWN0ZXJBc1N0cmluZywgc3R5bGUoKSwgVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbikpOwpAQCAtMjcxLDkgKzI3MSw5IEBAIFN0cmluZyBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6ZmlsZVRleHQKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50KCkuZmls
ZXMoKSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChpbnB1dEVsZW1lbnQoKS5maWxlcygp
LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0
ZShpbnB1dEVsZW1lbnQoKS5kaXNwbGF5U3RyaW5nKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgc3R5
bGUoKS5mb250KCksIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CisgICAg
ICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50KCku
ZGlzcGxheVN0cmluZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udENhc2NhZGUo
KSwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKICNlbmRpZgotICAgIHJl
dHVybiB0aGVtZSgpLmZpbGVMaXN0TmFtZUZvcldpZHRoKGlucHV0RWxlbWVudCgpLmZpbGVzKCks
IHN0eWxlKCkuZm9udCgpLCBtYXhGaWxlbmFtZVdpZHRoKCksIGlucHV0RWxlbWVudCgpLm11bHRp
cGxlKCkpOworICAgIHJldHVybiB0aGVtZSgpLmZpbGVMaXN0TmFtZUZvcldpZHRoKGlucHV0RWxl
bWVudCgpLmZpbGVzKCksIHN0eWxlKCkuZm9udENhc2NhZGUoKSwgbWF4RmlsZW5hbWVXaWR0aCgp
LCBpbnB1dEVsZW1lbnQoKS5tdWx0aXBsZSgpKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBSZWY8UmVu
ZGVyU3R5bGU+IFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0
VG9wKExlbmd0aCgwLCBGaXhlZCkpOwogICAgIG5ld1N0eWxlLmdldCgpLnNldFdpZHRoKExlbmd0
aCgxMDAsIFBlcmNlbnQpKTsKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRIZWlnaHQoTGVuZ3RoKDEw
MCwgUGVyY2VudCkpOwotICAgIG5ld1N0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoMCk7CisgICAg
bmV3U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS51cGRhdGUobnVsbHB0cik7CiAgICAgcmV0dXJu
IG5ld1N0eWxlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVs
bFNjcmVlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZ1bGxTY3JlZW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcg
QEAgc3RhdGljIFJlZjxSZW5kZXJTdHlsZT4gY3JlYXRlRnVsbFNjcmVlbgogICAgIGZ1bGxzY3Jl
ZW5TdHlsZS5nZXQoKS5zZXRaSW5kZXgoSU5UX01BWCk7CiAKICAgICBmdWxsc2NyZWVuU3R5bGUu
Z2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBmdWxsc2Ny
ZWVuU3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0
KCkuZm9udENhc2NhZGUoKS51cGRhdGUobnVsbHB0cik7CiAKICAgICBmdWxsc2NyZWVuU3R5bGUu
Z2V0KCkuc2V0RGlzcGxheShGTEVYKTsKICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0SnVz
dGlmeUNvbnRlbnQoSnVzdGlmeUNlbnRlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAK
IAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29s
IFJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0CiAKICAgICAvLyB3ZSBoYXZlIGFu
IGFsdCBhbmQgdGhlIHVzZXIgbWVhbnQgaXQgKGl0cyBub3QgYSB0ZXh0IHdlIGludmVudGVkKQog
ICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250
ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5
bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBJbnRTaXplIHBhZGRlZFRleHRTaXplKHBhZGRp
bmdXaWR0aCArIHN0ZDo6bWluKGNlaWxmKGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4odGhpcywgZm9udCwgbV9hbHRUZXh0LCBzdHlsZSgpKSkpLCBtYXhBbHRUZXh0V2lk
dGgpLCBwYWRkaW5nSGVpZ2h0ICsgc3RkOjptaW4oZm9udC5mb250TWV0cmljcygpLmhlaWdodCgp
LCBtYXhBbHRUZXh0SGVpZ2h0KSk7CiAgICAgICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZS5leHBh
bmRlZFRvKHBhZGRlZFRleHRTaXplKTsKICAgICB9CkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBS
ZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgaWYgKCFtX2Fs
dFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBkb2N1bWVu
dCgpLmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRUZXh0KTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCkuY29sb3JTcGFjZSgpKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAg
ICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmlj
cygpOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJpY3MuYXNj
ZW50KCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgYWx0VGV4dE9mZnNldCA9IHBhaW50
T2Zmc2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgICAgICB8fCAocGFyZW50UmVuZGVySW5saW5l
ICYmIHBhcmVudFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUpCiAgICAgICAgIHx8
IHN0eWxlKCkudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgIHx8IHN0eWxlKCku
dGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lCi0gICAgICAgIHx8IChj
aGVja0ZvbnRzICYmICghcGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50
aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKHN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCkp
CisgICAgICAgIHx8IChjaGVja0ZvbnRzICYmICghcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxp
bmVIZWlnaHQoKSAhPSBzdHlsZSgpLmxpbmVIZWlnaHQoKSkpCiAgICAgICAgIHx8IChmbG93VGhy
ZWFkICYmIGZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOyAvLyBGSVhNRTog
RW5hYmxlIHRoZSBvcHRpbWl6YXRpb24gb25jZSB3ZSBtYWtlIG92ZXJmbG93IGNvbXB1dGF0aW9u
IGZvciBjdWxsZWQgaW5saW5lcyBpbiByZWdpb25zLgogCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9p
ZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgICAgICAvLyBIYXZlIHRv
IGNoZWNrIHRoZSBmaXJzdCBsaW5lIHN0eWxlIGFzIHdlbGwuCiAgICAgICAgIHBhcmVudFN0eWxl
ID0gJnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBSZW5kZXJTdHlsZSYgY2hp
bGRTdHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7Ci0gICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hl
cyA9ICFwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50
RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAg
ICAgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZv
bnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHls
ZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICB8fCBjaGlsZFN0eWxl
LnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUt
PmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKTsKICAgICB9CkBAIC01NzQs
OCArNTc0LDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAg
ICAgICAgICAgaWYgKHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAgICAgICAgICAg
ICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcmVuZGVyQm94LmlubGluZUJveFdy
YXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250
YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5l
U3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250
YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAg
ICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0
eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5
bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAg
ICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KHJlbmRlckJveC5pbmxp
bmVCb3hXcmFwcGVyKCktPngoKSAtIHJlbmRlckJveC5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3As
IHJlbmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94Lmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSwg
bG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTU5MCw3ICs1OTAsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAgICAgICAgICAg
ICAgZm9yIChJbmxpbmVGbG93Qm94KiBjaGlsZExpbmUgPSByZW5kZXJJbmxpbmUuZmlyc3RMaW5l
Qm94KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGls
ZExpbmUtPnJvb3QoKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNv
bnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5maXJzdExp
bmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCku
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9w
ID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUtPm1h
cmdpbkxvZ2ljYWxMZWZ0KCksCkBAIC02MTAsOCArNjEwLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBj
aGlsZFRleHQgPSBjdXJyVGV4dC5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQg
PSBjaGlsZFRleHQtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBSb290
SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRUZXh0LT5yb290KCk7CiAgICAgICAgICAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgp
ID8gY29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9v
dEJveC5saW5lU3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5l
clN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhl
aWdodCgpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2Fs
VG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5
bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChG
bG9hdFJlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdp
ZHRoKCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC02MjIsNyAr
NjIyLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIHVzZSBhIGhlbHBlciB0byBzaGFyZSB0aGVz
ZSB3aXRoIHRleHQgcGF0aC4KICAgICAgICAgICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiBy
b290Qm94ID0gaW5saW5lQm94LT5yb290KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVy
LT5maXJzdExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5
bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRv
cCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhl
aWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRS
ZWN0KEZsb2F0UmVjdChpbmxpbmVCb3gtPngoKSwgbG9naWNhbFRvcCwgaW5saW5lQm94LT5sb2dp
Y2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTQg
KzExMiwxNCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOwogICAgICAgICAgICAgU3RyaW5nIHRleHQ7Ci0g
ICAgICAgICAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBG
b250Q2FzY2FkZSBpdGVtRm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAg
IGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHRl
eHQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRv
UmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxPcHRHcm91
cEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIHRleHQgPSBkb3duY2FzdDxI
VE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkuZ3JvdXBMYWJlbFRleHQoKTsKICAgICAgICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwotICAgICAgICAg
ICAgICAgIGl0ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1G
b250LndvcmRTcGFjaW5nKCkpOworICAgICAgICAgICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2Nh
ZGUoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsK
ICAgICAgICAgICAgICAgICBpdGVtRm9udC51cGRhdGUoZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJl
c29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgfQogCkBAIC0zNDcsNyArMzQ3
LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJhcihQYWludAogICAgIH0KIH0K
IAotc3RhdGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRS
dW4sIFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnQgaXRlbUZvbnQsIExheW91dFJlY3QgaXRl
bUJvdWRpbmdCb3gpCitzdGF0aWMgTGF5b3V0U2l6ZSBpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KFRl
eHRSdW4gdGV4dFJ1biwgUmVuZGVyU3R5bGUqIGl0ZW1TdHlsZSwgRm9udENhc2NhZGUgaXRlbUZv
bnQsIExheW91dFJlY3QgaXRlbUJvdWRpbmdCb3gpCiB7CiAgICAgRVRleHRBbGlnbiBhY3R1YWxB
bGlnbm1lbnQgPSBpdGVtU3R5bGUtPnRleHRBbGlnbigpOwogICAgIC8vIEZJWE1FOiBGaXJlZm94
IGRvZXNuJ3QgcmVzcGVjdCBKVVNUSUZZLiBTaG91bGQgd2U/CkBAIC00MDAsMTQgKzQwMCwxNCBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIGNvbG9yU3BhY2UpOwogCiAgICAgVGV4
dFJ1biB0ZXh0UnVuKGl0ZW1UZXh0LCAwLCAwLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uLCBpdGVtU3R5bGUtPmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKGl0ZW1TdHlsZS0+dW5pY29k
ZUJpZGkoKSksIHRydWUsIFRleHRSdW46Ok5vUm91bmRpbmcpOwotICAgIEZvbnQgaXRlbUZvbnQg
PSBzdHlsZSgpLmZvbnQoKTsKKyAgICBGb250Q2FzY2FkZSBpdGVtRm9udCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKTsKICAgICBMYXlvdXRSZWN0IHIgPSBpdGVtQm91bmRpbmdCb3hSZWN0KHBhaW50
T2Zmc2V0LCBsaXN0SW5kZXgpOwogICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRl
eHRSdW4sIGl0ZW1TdHlsZSwgaXRlbUZvbnQsIHIpKTsKIAogICAgIGlmIChpczxIVE1MT3B0R3Jv
dXBFbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KSkgewogICAgICAgICBGb250RGVzY3JpcHRpb24g
ZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBkLnNldFdlaWdodChkLmJv
bGRlcldlaWdodCgpKTsKLSAgICAgICAgaXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250LmxldHRl
clNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgIGl0ZW1Gb250ID0g
Rm9udENhc2NhZGUoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3Bh
Y2luZygpKTsKICAgICAgICAgaXRlbUZvbnQudXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVS
ZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5saW5l
RWxlbWVudEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC0xMzE0LDcgKzEzMTQs
NyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgaWYgKG1f
dGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKTsKICAgICBUZXh0UnVuIHRleHRSdW4gPSBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX3RleHQsIHN0eWxlKCkpOwogCiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CkBAIC0xNTI5LDcg
KzE1MjksNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVmZXJyZWRMCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250
KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7
CiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgRUxpc3RTdHlsZVR5cGUg
dHlwZSA9IHN0eWxlKCkubGlzdFN0eWxlVHlwZSgpOwpAQCAtMTc1Nyw3ICsxNzU3LDcgQEAgSW50
UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgIHN3aXRjaCAodHlwZSkg
ewogICAgICAgICBjYXNlIEFzdGVyaXNrczoKICAgICAgICAgY2FzZSBGb290bm90ZXM6IHsKLSAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAg
ICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBm
b250LCBtX3RleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBU
ZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKICAg
ICAgICAgICAgIHJlbGF0aXZlUmVjdCA9IEludFJlY3QoMCwgMCwgZm9udC53aWR0aChydW4pLCBm
b250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODUx
LDcgKzE4NTEsNyBAQCBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAg
ICAgICAgIGNhc2UgVXJkdToKICAgICAgICAgICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgICAgICAgICBjb25zdCBGb250JiBm
b250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVuID0gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHlsZSgpLCBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4
cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICBpbnQgaXRlbVdpZHRo
ID0gZm9udC53aWR0aChydW4pOwogICAgICAgICAgICAgVUNoYXIgc3VmZml4U3BhY2VbMl0gPSB7
IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS52YWx1ZSgpKSwgJyAnIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojpz
dHlsZURpZENoYW5nZShTdHlsCiAgICAgaWYgKG1faW5uZXJCbG9jaykgLy8gUmVuZGVyQmxvY2sg
aGFuZGxlZCB1cGRhdGluZyB0aGUgYW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCiAgICAgICAgIGFk
anVzdElubmVyU3R5bGUoKTsKIAotICAgIGJvb2wgZm9udENoYW5nZWQgPSAhb2xkU3R5bGUgfHwg
b2xkU3R5bGUtPmZvbnQoKSAhPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBib29sIGZvbnRDaGFuZ2Vk
ID0gIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5mb250Q2FzY2FkZSgpICE9IHN0eWxlKCkuZm9udENh
c2NhZGUoKTsKICAgICBpZiAoZm9udENoYW5nZWQpIHsKICAgICAgICAgdXBkYXRlT3B0aW9uc1dp
ZHRoKCk7CiAgICAgICAgIG1fbmVlZHNPcHRpb25zV2lkdGhVcGRhdGUgPSBmYWxzZTsKQEAgLTIy
MiwxMyArMjIyLDEzIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCgK
ICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21w
dXRlZFN0eWxlKCkpCiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gbWluaW11bVZhbHVl
Rm9yTGVuZ3RoKG9wdGlvblN0eWxlLT50ZXh0SW5kZW50KCksIDApOwogICAgICAgICAgICAgaWYg
KCF0ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBz
dHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRl
eHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhw
YW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKICAgICAgICAgICAgICAgICBvcHRpb25XaWR0
aCArPSBmb250LndpZHRoKHJ1bik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtYXhPcHRp
b25XaWR0aCA9IHN0ZDo6bWF4KG1heE9wdGlvbldpZHRoLCBvcHRpb25XaWR0aCk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBGb250JiBm
b250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVuID0gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgdGV4dCwgc3R5bGUoKSwgVGV4
dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBh
bnNpb24sIERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGgg
PSBzdGQ6Om1heChtYXhPcHRpb25XaWR0aCwgZm9udC53aWR0aChydW4pKTsKICAgICAgICAgfQpA
QCAtNTIzLDcgKzUyMyw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjppdGVtU3R5
bGUKICAgICBnZXRJdGVtQmFja2dyb3VuZENvbG9yKGxpc3RJbmRleCwgaXRlbUJhY2tncm91bmRD
b2xvciwgaXRlbUhhc0N1c3RvbUJhY2tncm91bmRDb2xvcik7CiAKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6
IGVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKLSAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVT
dHlsZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBpdGVt
QmFja2dyb3VuZENvbG9yLCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUsCisgICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwgc3R5
bGUtPmZvbnRDYXNjYWRlKCksIHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKICAgICAg
ICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FLCB0cnVlLCBzdHlsZS0+dGV4dEluZGVudCgpLCBz
dHlsZS0+ZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUtPnVuaWNvZGVCaWRpKCkpLAogICAg
ICAgICBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yID8gUG9wdXBNZW51U3R5bGU6OkN1c3Rv
bUJhY2tncm91bmRDb2xvciA6IFBvcHVwTWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9y
KSA6IG1lbnVTdHlsZSgpOwogfQpAQCAtNTY0LDcgKzU2NCw3IEBAIFBvcHVwTWVudVN0eWxlIFJl
bmRlck1lbnVMaXN0OjptZW51U3R5bGUKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1Vz
ZSA9IG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay0+c3R5bGUoKSA6IHN0eWxlKCk7CiAgICAg
SW50UmVjdCBhYnNCb3VuZHMgPSBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNm
b3JtcygpOwogICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZVRvVXNlLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLAotICAgICAgICBzdHlsZVRvVXNlLmZv
bnQoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNw
bGF5KCkgPT0gTk9ORSwKKyAgICAgICAgc3R5bGVUb1VzZS5mb250Q2FzY2FkZSgpLCBzdHlsZVRv
VXNlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRpc3BsYXkoKSA9PSBOT05F
LAogICAgICAgICBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQsIHN0eWxlVG9Vc2UudGV4dEluZGVudCgpLAogICAgICAgICBzdHls
ZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSksIFBvcHVw
TWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yLAogICAgICAgICBQb3B1cE1lbnVTdHls
ZTo6U2VsZWN0UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZShzdHlsZVRvVXNlLCBhYnNCb3Vu
ZHMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
UnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDggKzI1NCw4IEBAIHZvaWQgUmVuZGVyUnVi
eVJ1bjo6bGF5b3V0KCkKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBydC0+
c3R5bGUoKS5ydWJ5UG9zaXRpb24oKSA9PSBSdWJ5UG9zaXRpb25JbnRlckNoYXJhY3Rlcikgewog
ICAgICAgICAvLyBCb3BvbW9mby4gV2UgbmVlZCB0byBtb3ZlIHRoZSBSZW5kZXJSdWJ5VGV4dCBv
dmVyIHRvIHRoZSByaWdodCBzaWRlIGFuZCBjZW50ZXIgaXQKICAgICAgICAgLy8gdmVydGljYWxs
eSByZWxhdGl2ZSB0byB0aGUgYmFzZS4KLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxl
KCkuZm9udCgpOwotICAgICAgICBmbG9hdCBkaXN0YW5jZUJldHdlZW5CYXNlID0gbWF4KGZvbnQu
bGV0dGVyU3BhY2luZygpLCAyLjBmICogcnQtPnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCkpOworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKTsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250
LmxldHRlclNwYWNpbmcoKSwgMi4wZiAqIHJ0LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKSk7CiAgICAgICAgIHNldFdpZHRoKHdpZHRoKCkgKyBkaXN0YW5jZUJl
dHdlZW5CYXNlIC0gZm9udC5sZXR0ZXJTcGFjaW5nKCkpOwogICAgICAgICBpZiAoUmVuZGVyUnVi
eUJhc2UqIHJiID0gcnVieUJhc2UoKSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBmaXJzdExp
bmVUb3AgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcg
QEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1TdAogCiBQb3B1cE1lbnVT
dHlsZSBSZW5kZXJTZWFyY2hGaWVsZDo6bWVudVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
UG9wdXBNZW51U3R5bGUoc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvciksIHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSwgc3R5bGUoKS5mb250KCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lCTEUs
CisgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCkuZm9udENhc2NhZGUoKSwgc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSwKICAgICAgICAgc3R5bGUoKS5kaXNwbGF5KCkgPT0gTk9ORSwg
dHJ1ZSwgc3R5bGUoKS50ZXh0SW5kZW50KCksIHN0eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJp
ZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSwgUG9wdXBNZW51U3R5bGU6OkN1c3RvbUJhY2tncm91
bmRDb2xvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw4IEBAIGJvb2wgUmVuZGVyVGV4
dDo6aXNUZXh0RnJhZ21lbnQoKSBjb25zdAogYm9vbCBSZW5kZXJUZXh0Ojpjb21wdXRlVXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSA9IHRoaXMtPnN0eWxlKCk7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZS5mb250KCkuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKHN0eWxlLmZv
bnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24o
KTsKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmlzU3BlY2lm
aWVkRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNTYsNyArMjU2LDcgQEAgdm9p
ZCBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZgogICAgIGlmICghb2xkU3R5bGUp
IHsKICAgICAgICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IGNvbXB1dGVVc2VCYWNrc2xh
c2hBc1llblN5bWJvbCgpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IG1fdXNlQmFja3NsYXNo
QXNZZW5TeW1ib2w7Ci0gICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9udCgpLnVzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sKCkgIT0gbmV3U3R5bGUuZm9udCgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KCkpIHsKKyAgICB9IGVsc2UgaWYgKG9sZFN0eWxlLT5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sKCkgIT0gbmV3U3R5bGUuZm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1ll
blN5bWJvbCgpKSB7CiAgICAgICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBjb21wdXRl
VXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSB0cnVl
OwogICAgIH0KQEAgLTQ1MSw3ICs0NTEsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2Fs
Q2FyZXRSZWN0KEluCiAgICAgcmV0dXJuIGJveC5yb290KCkuY29tcHV0ZUNhcmV0UmVjdChsZWZ0
LCBjYXJldFdpZHRoLCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogfQogCi1BTFdBWVNfSU5MSU5F
IGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmIGYsIGludCBzdGFy
dCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRo
RnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0
IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVU
ZXh0PigqdGhpcykpIHsKICAgICAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQmIGNvbWJpbmVU
ZXh0ID0gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKTsKQEAgLTU0NCw3ICs1NDQs
NyBAQCB2b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGZsb2F0CiAgICAgQVNTRVJU
KG1fdGV4dCk7CiAgICAgU3RyaW5nSW1wbCYgdGV4dCA9ICptX3RleHQuaW1wbCgpOwogICAgIGlm
ICh0ZXh0WzBdID09ICcgJyB8fCAodGV4dFswXSA9PSAnXG4nICYmICFzdHlsZS5wcmVzZXJ2ZU5l
d2xpbmUoKSkgfHwgdGV4dFswXSA9PSAnXHQnKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOyAvLyBGSVhN
RTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCiAgICAgICAgIGlmIChzdHJpcEZyb250U3BhY2Vz
KSB7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsKICAgICAgICAgICAgIGZs
b2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KHRoaXMsIGZvbnQsICZzcGFjZSwgMSwgc3R5bGUpKTsKQEAgLTU2MCw3ICs1NjAsNyBAQCB2b2lk
IFJlbmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGZsb2F0CiAKICAgICAvLyBDb21wdXRlIG91
ciBtYXggd2lkdGhzIGJ5IHNjYW5uaW5nIHRoZSBzdHJpbmcgZm9yIG5ld2xpbmVzLgogICAgIGlm
IChoYXNCcmVhaykgewotICAgICAgICBjb25zdCBGb250JiBmID0gc3R5bGUuZm9udCgpOyAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1s
aW5lLgogICAgICAgICBib29sIGZpcnN0TGluZSA9IHRydWU7CiAgICAgICAgIGJlZ2luTWF4VyA9
IG1heFc7CiAgICAgICAgIGVuZE1heFcgPSBtYXhXOwpAQCAtNjM3LDEzICs2MzcsMTMgQEAgdm9p
ZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgICAgICBtX2tub3duVG9I
YXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA9IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnQmIGZv
bnQpCitzdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVy
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCku
c3RyaW5nKCksIHN0eWxlKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0
aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBG
b250JiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNp
Z25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3Zl
cmZsb3cpCitzdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IFN0cmluZ1ZpZXcgd29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIHVuc2lnbmVkIG1pbmlt
dW1TdWZmaXhMZW5ndGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsK
ICAgICBzdWZmaXhTdGFydCA9IDA7CiAgICAgaWYgKHdvcmQubGVuZ3RoKCkgPD0gbWluaW11bVN1
ZmZpeExlbmd0aCkKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsCiAgICAgbV9oYXNFbmRXUyA9IGZhbHNlOwogCiAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250ID0g
c3R5bGUuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhp
cyBpZ25vcmVzIGZpcnN0LWxpbmUuCiAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBmb250LndvcmRT
cGFjaW5nKCk7CiAgICAgaW50IGxlbiA9IHRleHRMZW5ndGgoKTsKICAgICBMYXp5TGluZUJyZWFr
SXRlcmF0b3IgYnJlYWtJdGVyYXRvcihtX3RleHQsIHN0eWxlLmxvY2FsZSgpLCBtYXBMaW5lQnJl
YWtUb0l0ZXJhdG9yTW9kZShzdHlsZS5saW5lQnJlYWsoKSkpOwpAQCAtMTIxNSwxMCArMTIxNSwx
MCBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1CiAgICAgICAgIGxl
biA9IHRleHRMZW5ndGgoKSAtIGZyb207CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0
eWxlID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7Ci0gICAgcmV0dXJu
IHdpZHRoKGZyb20sIGxlbiwgbGluZVN0eWxlLmZvbnQoKSwgeFBvcywgZmFsbGJhY2tGb250cywg
Z2x5cGhPdmVyZmxvdyk7CisgICAgcmV0dXJuIHdpZHRoKGZyb20sIGxlbiwgbGluZVN0eWxlLmZv
bnRDYXNjYWRlKCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogfQogCi1m
bG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0
IEZvbnQmIGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJl
bmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENh
c2NhZGUmIGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBB
U1NFUlQoZnJvbSArIGxlbiA8PSB0ZXh0TGVuZ3RoKCkpOwogICAgIGlmICghdGV4dExlbmd0aCgp
KQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQg
ZnJvbSwgdQogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsK
ICAgICBmbG9hdCB3OwotICAgIGlmICgmZiA9PSAmc3R5bGUuZm9udCgpKSB7CisgICAgaWYgKCZm
ID09ICZzdHlsZS5mb250Q2FzY2FkZSgpKSB7CiAgICAgICAgIGlmICghc3R5bGUucHJlc2VydmVO
ZXdsaW5lKCkgJiYgIWZyb20gJiYgbGVuID09IHRleHRMZW5ndGgoKSAmJiAoIWdseXBoT3ZlcmZs
b3cgfHwgIWdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpKSB7CiAgICAgICAgICAgICBpZiAo
ZmFsbGJhY2tGb250cykgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbHlwaE92ZXJmbG93KTsK
QEAgLTE1NTYsNyArMTU1Niw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBs
ZUZvbnQKIHsKICAgICBpZiAoaXNBbGxBU0NJSSgpIHx8IG1fdGV4dC5pczhCaXQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgo
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKSA9PSBGb250OjpTaW1wbGU7CisgICAgcmV0dXJuIEZv
bnRDYXNjYWRlOjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgo
KSkgPT0gRm9udENhc2NhZGU6OlNpbXBsZTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Ojptb21lbnRh
cmlseVJldmVhbExhc3RUeXBlZENoYXJhY3Rlcih1bnNpZ25lZCBvZmZzZXRBZnRlckxhc3RUeXBl
ZENoYXJhY3RlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdGV4
dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCktPmxlbmd0aCgpOyB9IC8vIG5v
biB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9pZCBwb3NpdGlvbkxp
bmVCb3goSW5saW5lVGV4dEJveCYpOwogCi0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9
IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4s
IGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKQEAgLTE5Miw3ICsxOTIsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlv
dXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNl
KHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9t
Q2FjaGUoY29uc3QgRm9udCYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Kiwg
Y29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25z
dCBGb250Q2FzY2FkZSYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29u
c3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJl
dHVybiBtX2lzQWxsQVNDSUk7IH0KICAgICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5
bWJvbCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMiAr
MTc0LDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmhpdElubmVyVGV4dEVsZW0KIGZsb2F0
IFJlbmRlclRleHRDb250cm9sOjpnZXRBdmVyYWdlQ2hhcldpZHRoKCkKIHsKICAgICBmbG9hdCB3
aWR0aDsKLSAgICBpZiAoc3R5bGUoKS5mb250KCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZSh3aWR0aCkpCisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5mYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIHdpZHRoOwogCiAgICAg
Y29uc3QgVUNoYXIgY2ggPSAnMCc7CiAgICAgY29uc3QgU3RyaW5nIHN0ciA9IFN0cmluZygmY2gs
IDEpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICBUZXh0UnVuIHRl
eHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN0ciwgc3R5bGUoKSwgVGV4dFJ1
bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7CiAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdI
YWNrcygpOwogICAgIHJldHVybiBmb250LndpZHRoKHRleHRSdW4pOwpAQCAtMTg5LDcgKzE4OSw3
IEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpzY2FsZUVtVG9Vbml0cygKIHsKICAgICAvLyBU
aGlzIG1hdGNoZXMgdGhlIHVuaXRzUGVyRW0gdmFsdWUgZm9yIE1TIFNoZWxsIERsZyBhbmQgQ291
cmllciBOZXcgZnJvbSB0aGUgImhlYWQiIGZvbnQgdGFibGUuCiAgICAgZmxvYXQgdW5pdHNQZXJF
bSA9IDIwNDguMGY7Ci0gICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLmZvbnQoKS5zaXplKCkgKiB4
IC8gdW5pdHNQZXJFbSk7CisgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCku
c2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpj
b21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgs
IExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBmbG9h
dCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6Z2V0QXZlCiAgICAgLy8gU2luY2UgTHVjaWRh
IEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdp
ZHRoCiAgICAgLy8gb2YgQ291cmllciBOZXcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVh
cyBpbiBJRSwgRmlyZWZveCBhbmQgU2FmYXJpIFdpbi4KICAgICAvLyAxMjI5IGlzIHRoZSBhdmdD
aGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIENvdXJpZXIgTmV3LgotICAgIGlm
IChzdHlsZSgpLmZvbnQoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKKyAgICBp
ZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUi
KQogICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoMTIyOSk7CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTksNyArMzE5LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdgog
ICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGlu
IEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChp
biBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCiAgICAgLy8gOTAx
IGlzIHRoZSBhdmdDaGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIE1TIFNoZWxs
IERsZy4KLSAgICBpZiAoc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdy
YW5kZSIpCisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5maXJzdEZhbWlseSgpID09ICJM
dWNpZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDkwMSk7CiAjZW5k
aWYKIApAQCAtMzM4LDE1ICszMzgsMTUgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OgogICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKIAogI2lmICFQTEFURk9S
TShJT1MpCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHlsZSgpLmZvbnQoKS5m
aXJzdEZhbWlseSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBp
cyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAg
Ly8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmly
ZWZveCwgU2FmYXJpIFdpbiBhbmQKICAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElF
LCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KICAgICAvLyA0MDI3IGlz
IHRoZSAoeE1heCAtIHhNaW4pIHZhbHVlIGluIHRoZSAiaGVhZCIgZm9udCB0YWJsZSBmb3IgTVMg
U2hlbGwgRGxnLgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBt
YXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKLSAgICBlbHNlIGlmIChzdHlsZSgp
LmZvbnQoKS5oYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSkKLSAgICAgICAgbWF4Q2hhcldpZHRo
ID0gcm91bmRmKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgp
KTsKKyAgICBlbHNlIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hh
cldpZHRoKCkpCisgICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOwogI2VuZGlmCiAKICAgICAv
LyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVz
b2wKICAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKICAgICAgICAgLy8gQm9yZGVyCiAgICAgICAgIExl
bmd0aEJveCBib3JkZXJCb3goc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwgc3R5bGUuYm9yZGVyUmln
aHRXaWR0aCgpLCBzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS5ib3JkZXJMZWZ0V2lk
dGgoKSk7Ci0gICAgICAgIGJvcmRlckJveCA9IG1fdGhlbWUtPmNvbnRyb2xCb3JkZXIocGFydCwg
c3R5bGUuZm9udCgpLCBib3JkZXJCb3gsIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAg
IGJvcmRlckJveCA9IG1fdGhlbWUtPmNvbnRyb2xCb3JkZXIocGFydCwgc3R5bGUuZm9udENhc2Nh
ZGUoKSwgYm9yZGVyQm94LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpZiAoYm9y
ZGVyQm94LnRvcCgpLnZhbHVlKCkgIT0gc3RhdGljX2Nhc3Q8aW50PihzdHlsZS5ib3JkZXJUb3BX
aWR0aCgpKSkgewogICAgICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1ZSgpKQogICAg
ICAgICAgICAgICAgIHN0eWxlLnNldEJvcmRlclRvcFdpZHRoKGJvcmRlckJveC50b3AoKS52YWx1
ZSgpKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShT
dHlsZVJlc29sCiAgICAgICAgIH0KIAogICAgICAgICAvLyBQYWRkaW5nCi0gICAgICAgIExlbmd0
aEJveCBwYWRkaW5nQm94ID0gbV90aGVtZS0+Y29udHJvbFBhZGRpbmcocGFydCwgc3R5bGUuZm9u
dCgpLCBzdHlsZS5wYWRkaW5nQm94KCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAg
IExlbmd0aEJveCBwYWRkaW5nQm94ID0gbV90aGVtZS0+Y29udHJvbFBhZGRpbmcocGFydCwgc3R5
bGUuZm9udENhc2NhZGUoKSwgc3R5bGUucGFkZGluZ0JveCgpLCBzdHlsZS5lZmZlY3RpdmVab29t
KCkpOwogICAgICAgICBpZiAocGFkZGluZ0JveCAhPSBzdHlsZS5wYWRkaW5nQm94KCkpCiAgICAg
ICAgICAgICBzdHlsZS5zZXRQYWRkaW5nQm94KHBhZGRpbmdCb3gpOwogCkBAIC0xNTQsMjUgKzE1
NCwyNSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgICAg
IC8vIFdpZHRoIC8gSGVpZ2h0CiAgICAgICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGhlcmUg
YXJlIGFmZmVjdGVkIGJ5IHRoZSB6b29tLgogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxh
d2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291
bnQuCi0gICAgICAgIExlbmd0aFNpemUgY29udHJvbFNpemUgPSBtX3RoZW1lLT5jb250cm9sU2l6
ZShwYXJ0LCBzdHlsZS5mb250KCksIExlbmd0aFNpemUoc3R5bGUud2lkdGgoKSwgc3R5bGUuaGVp
Z2h0KCkpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhTaXplIGNvbnRy
b2xTaXplID0gbV90aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwg
TGVuZ3RoU2l6ZShzdHlsZS53aWR0aCgpLCBzdHlsZS5oZWlnaHQoKSksIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7CiAgICAgICAgIGlmIChjb250cm9sU2l6ZS53aWR0aCgpICE9IHN0eWxlLndpZHRo
KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRXaWR0aChjb250cm9sU2l6ZS53aWR0aCgpKTsKICAg
ICAgICAgaWYgKGNvbnRyb2xTaXplLmhlaWdodCgpICE9IHN0eWxlLmhlaWdodCgpKQogICAgICAg
ICAgICAgc3R5bGUuc2V0SGVpZ2h0KGNvbnRyb2xTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgLy8gTWluLVdpZHRoIC8gTWluLUhlaWdodAotICAgICAgICBMZW5ndGhT
aXplIG1pbkNvbnRyb2xTaXplID0gbV90aGVtZS0+bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIHN0
eWxlLmZvbnQoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBt
aW5Db250cm9sU2l6ZSA9IG1fdGhlbWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5m
b250Q2FzY2FkZSgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpZiAobWluQ29u
dHJvbFNpemUud2lkdGgoKSAhPSBzdHlsZS5taW5XaWR0aCgpKQogICAgICAgICAgICAgc3R5bGUu
c2V0TWluV2lkdGgobWluQ29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChtaW5Db250
cm9sU2l6ZS5oZWlnaHQoKSAhPSBzdHlsZS5taW5IZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxl
LnNldE1pbkhlaWdodChtaW5Db250cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgIC8vIEZvbnQKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250ID0g
bV90aGVtZS0+Y29udHJvbEZvbnQocGFydCwgc3R5bGUuZm9udCgpLCBzdHlsZS5lZmZlY3RpdmVa
b29tKCkpOwotICAgICAgICBpZiAoY29udHJvbEZvbnQgIT0gc3R5bGUuZm9udCgpLmZvbnREZXNj
cmlwdGlvbigpKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhl
bWUtPmNvbnRyb2xGb250KHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgICAgIGlmIChjb250cm9sRm9udCAhPSBzdHlsZS5mb250Q2FzY2FkZSgp
LmZvbnREZXNjcmlwdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBOb3cgdXBkYXRlIG91ciBmb250
LgogICAgICAgICAgICAgaWYgKHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihjb250cm9sRm9udCkp
Ci0gICAgICAgICAgICAgICAgc3R5bGUuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgICAgICAg
ICBzdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgwKTsKICAgICAgICAgfQogICAgICAgICAvLyBS
ZXNldCBvdXIgbGluZS1oZWlnaHQKICAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBTdHJpbmcg
UmVuZGVyVGhlbWU6OmZpbGVMaXN0RGVmYXVsdExhYmVsCiAgICAgcmV0dXJuIGZpbGVCdXR0b25O
b0ZpbGVTZWxlY3RlZExhYmVsKCk7CiB9CiAKLVN0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBmb250LCBp
bnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CitTdHJpbmcgUmVuZGVy
VGhlbWU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dl
ZCkgY29uc3QKIHsKICAgICBpZiAod2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwb3Bz
TWVudUJ5U3BhY2VPclJldHVybigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlTGlzdERlZmF1bHRMYWJlbChib29sIG11bHRpcGxlRmlsZXNBbGxvd2Vk
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBG
aWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93
ZWQpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVG
aWxlc0FsbG93ZWQpIGNvbnN0OwogCiAgICAgZW51bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBT
aW5nbGVGaWxlLCBNdWx0aXBsZUZpbGVzIH07CiAgICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVw
bG9hZEljb25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIC8qaW5wdXRSZW5kZXJlciov
LCBjb25zdCBSZW5kZXJPYmplY3QmIC8qYnV0dG9uUmVuZGVyZXIqLywgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIHsgcmV0dXJu
IHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogI2ltcG9ydCAiRGF0
ZUNvbXBvbmVudHMuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJGbG9hdFJvdW5k
ZWRSZWN0LmgiCi0jaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBv
cnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3
LmgiCiAjaW1wb3J0ICJHcmFkaWVudC5oIgpAQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lk
IGFkanVzdFNlbGVjdExpc3RCdXR0b25TdHlsZSgKICAgICAKIGNsYXNzIFJlbmRlclRoZW1lTWVh
c3VyZVRleHRDbGllbnQgOiBwdWJsaWMgTWVhc3VyZVRleHRDbGllbnQgewogcHVibGljOgotICAg
IFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoY29uc3QgRm9udCYgZm9udCwgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKKyAgICBSZW5kZXJU
aGVtZU1lYXN1cmVUZXh0Q2xpZW50KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgICAgICA6IG1f
Zm9udChmb250KQogICAgICAgICAsIG1fcmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCkKICAgICAg
ICAgLCBtX3N0eWxlKHN0eWxlKQpAQCAtNTU3LDcgKzU1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fZm9udC53aWR0aChydW4pOwogICAgIH0KIHByaXZhdGU6Ci0gICAgY29uc3QgRm9u
dCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgUmVuZGVyT2Jq
ZWN0JiBtX3JlbmRlck9iamVjdDsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9zdHlsZTsKIH07
CkBAIC01NzcsNyArNTc3LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9u
U3R5bAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBFbmZvcmNlIHRoZSB3aWR0aCBhbmQgc2V0
IHRoZSBib3gtc2l6aW5nIHRvIGNvbnRlbnQtYm94IHRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBw
YWRkaW5nLgotICAgIEZvbnQgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBGb250Q2FzY2FkZSBm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gaW5wdXRFbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKGZvbnQucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyAr
MTY5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFNuYXBzaG90dGVkUGx1
Z2luT3ZlcmxheShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZUxp
c3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250JiwgaW50IHdpZHRoLCBi
b29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnRDYXNj
YWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QmIHBhcnRSZW5kZXJlciwgY29u
c3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9u
dEZyb21Db250cm9sUwogICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOwogCiAgICAgaWYgKHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pKQotICAgICAgICBzdHlsZS5mb250KCkudXBkYXRlKDApOworICAgICAgICBz
dHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgwKTsKIH0KIAogTlNDb250cm9sU2l6ZSBSZW5kZXJU
aGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIE5TVGV4dEZpZWxkQ2VsbCogUmVuZGVyVGhlbWVNYWM6
OnRleHRGaWUKICAgICByZXR1cm4gbV90ZXh0RmllbGQuZ2V0KCk7CiB9CiAKLVN0cmluZyBSZW5k
ZXJUaGVtZU1hYzo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0
LCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQp
IGNvbnN0CitTdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGludCB3aWR0aCwg
Ym9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKIHsKICAgICBpZiAod2lkdGggPD0gMCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDEsNyArOTAx
LDcgQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogCiAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIGJveExpbmVTdHlsZSA9IGJveC5saW5lU3R5bGUoKTsKICAgICBpZiAo
dXNlZEZvbnRzICYmICF1c2VkRm9udHMtPmlzRW1wdHkoKSAmJiAoaW5jbHVkZUZvbnQgfHwgKGJv
eExpbmVTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkp
IHsKLSAgICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkpOworICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHVzZWRGb250cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRN
ZXRyaWNzJiBmb250TWV0cmljcyA9IHVzZWRGb250cy0+YXQoaSktPmZvbnRNZXRyaWNzKCk7CiAg
ICAgICAgICAgICBpbnQgdXNlZEZvbnRBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxp
bmVUeXBlKCkpOwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgTGF5b3V0VW5pdCBSb290SW5saW5lQm94
Ojp2ZXJ0aWNhbFBvc2l0aQogICAgIAogICAgIGlmICh2ZXJ0aWNhbEFsaWduICE9IEJBU0VMSU5F
KSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRMaW5lU3R5bGUgPSBmaXJzdExp
bmUgPyBwYXJlbnQtPmZpcnN0TGluZVN0eWxlKCkgOiBwYXJlbnQtPnN0eWxlKCk7Ci0gICAgICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBwYXJlbnRMaW5lU3R5bGUuZm9udCgpOworICAgICAgICBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCA9IHBhcmVudExpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwogICAg
ICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7
CiAgICAgICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4ZWxTaXplKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0LDE3ICsxODQsMTcgQEAgYm9vbCBjYW5Vc2VGb3IoY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAg
IGlmIChzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYg
KHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgbGluZXMgaGF2ZSBt
ZXRyaWNzIGJhc2VkIHB1cmVseSBvbiB0aGUgcHJpbWFyeSBmb250LgotICAgIGF1dG8mIHByaW1h
cnlGb250RGF0YSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBhdXRvJiBw
cmltYXJ5Rm9udERhdGEgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwog
ICAgIGlmIChwcmltYXJ5Rm9udERhdGEuaXNMb2FkaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJl
bmRlclRleHQ+KGZsb3cpKSB7CiAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4
dCgpIHx8IHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSB8fCB0ZXh0UmVuZGVyZXIuaXNRdW90ZSgp
IHx8IHRleHRSZW5kZXJlci5pc1RleHRGcmFnbWVudCgpCiAgICAgICAgICAgICB8fCB0ZXh0UmVu
ZGVyZXIuaXNTVkdJbmxpbmVUZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChzdHlsZS5mb250KCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIudGV4dCgp
KSkgIT0gRm9udDo6U2ltcGxlKQorICAgICAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5jb2Rl
UGF0aChUZXh0UnVuKHRleHRSZW5kZXJlci50ZXh0KCkpKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWNhblVzZUZvclRleHQo
dGV4dFJlbmRlcmVyLCBwcmltYXJ5Rm9udERhdGEpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBT
aW1wbGVMaW5lTGF5b3V0IHsKIAogRmxvd0NvbnRlbnRzOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQotICAgIDogZm9udChzdHlsZS5mb250KCkpCisgICAgOiBmb250KHN0
eWxlLmZvbnRDYXNjYWRlKCkpCiAgICAgLCB0ZXh0QWxpZ24oc3R5bGUudGV4dEFsaWduKCkpCiAg
ICAgLCBjb2xsYXBzZVdoaXRlc3BhY2Uoc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAgICAg
LCBwcmVzZXJ2ZU5ld2xpbmUoc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAjZGVmaW5lIFNpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHNfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJUZXh0
QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3R5bGUgewogICAgICAgICBleHBsaWNpdCBTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYpOwogCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQ7CisgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250OwogICAgICAgICBFVGV4dEFsaWduIHRleHRBbGlnbjsK
ICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlc3BhY2U7CiAgICAgICAgIGJvb2wgcHJlc2VydmVO
ZXdsaW5lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmwKICAgICBib29sIGRlYnVnQm9yZGVyc0VuYWJsZWQgPSBmbG93LmZyYW1lKCkuc2V0dGlu
Z3MoKS5zaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCgpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0ID0gKnBhaW50SW5mby5jb250ZXh0OwotICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHls
ZS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRQYWludFN0eWxlIHRleHRQYWludFN0eWxlID0gY29t
cHV0ZVRleHRQYWludFN0eWxlKGZsb3cuZnJhbWUoKSwgc3R5bGUsIHBhaW50SW5mbyk7CiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIHRleHRQYWludFN0
eWxlLnN0cm9rZVdpZHRoID4gMCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDggKzEyMCw4IEBAIFJ1blJlc29sdmVyOjpSdW5SZXNv
bHZlcihjb25zdCBSZW5kZXJCbG8KICAgICAsIG1fbGluZUhlaWdodChsaW5lSGVpZ2h0RnJvbUZs
b3coZmxvdykpCiAgICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5lRnJvbUZsb3coZmxvdykpCiAgICAg
LCBtX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUoZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkp
Ci0gICAgLCBtX2FzY2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpCi0gICAgLCBtX2Rlc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmRl
c2NlbnQoKSkKKyAgICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpCisgICAgLCBtX2Rlc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY0LDcgKzE2NCw3IEBAIGJvb2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9k
ZVNpemUKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGF2ZXJhZ2VTaXplKTsKICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRl
KGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1Np
emluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3Rvcigp
KTsKICAgICAgICAgICAgIHRleHQtPnBhcmVudCgpLT5zZXRTdHlsZShzdHlsZS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogcGFyZW50
UmVuZGVyZXIgPSB0ZXh0LT5wYXJlbnQoKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFRleHRB
dXRvU2l6aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICBpZiAobGlzdE1hcmtl
clJlbmRlcmVyLT5pc0xpc3RNYXJrZXIoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKGxpc3RNYXJrZXJSZW5k
ZXJlci0+c3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRl
KGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1
dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0
b3IoKSk7CiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGlzdE1hcmtlcj4oKmxpc3RN
YXJrZXJSZW5kZXJlcikuc2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIFRleHRBdXRvU2l6
aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUt
PnNldExpbmVIZWlnaHQoTGVuZ3RoKGxpbmVIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAgICAgICAg
ICAgbmV3UGFyZW50U3R5bGUtPnNldFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhlaWdodExlbmd0
aCk7CiAgICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250KCku
dXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5m
b250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnRDYXNj
YWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICAgICAgcGFyZW50UmVuZGVyZXItPnNl
dFN0eWxlKG5ld1BhcmVudFN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpy
ZXNldCgpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG9yaWdp
bmFsU2l6ZSk7CiAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gY2xvbmVS
ZW5kZXJTdHlsZVdpdGhTdGF0ZSh0ZXh0LT5zdHlsZSgpKTsKICAgICAgICAgICAgIHN0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5m
b250KCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51
cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZv
bnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIHRleHQtPnBhcmVudCgpLT5zZXRTdHlsZShzdHls
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICAvLyBSZXNldCB0aGUgbGlu
ZSBoZWlnaHQgb2YgdGhlIHBhcmVudC4KQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFRleHRBdXRv
U2l6aW5nVmFsdWU6OnJlc2V0KCkKICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3
UGFyZW50U3R5bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHBhcmVudFN0eWxlKTsKICAg
ICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0KG9yaWdpbmFsTGluZUhlaWdo
dCk7CiAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShh
dXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVj
dG9yKCkpOworICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRl
KGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CiAgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+c2V0U3R5bGUobmV3UGFyZW50
U3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0UGFpbnRlcjo6VGV4
dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0
T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0IEZvbnQmIGZvbnQs
CitUZXh0UGFpbnRlcjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29s
IHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHks
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LAogICAgIGludCBzdGFydFBvc2l0aW9uSW5UZXh0UnVu
LCBpbnQgZW5kUG9zaXRpb25JblRleHRCb3hTdHJpbmcsIGludCBsZW5ndGgsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZW1waGFzaXNNYXJrLCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0LCBU
ZXh0UnVuJiB0ZXh0UnVuLAogICAgIEZsb2F0UmVjdCYgYm94UmVjdCwgRmxvYXRQb2ludCYgdGV4
dE9yaWdpbiwgaW50IGVtcGhhc2lzTWFya09mZnNldCwgY29uc3QgU2hhZG93RGF0YSogdGV4dFNo
YWRvdywgY29uc3QgU2hhZG93RGF0YSogc2VsZWN0aW9uU2hhZG93LAogICAgIGJvb2wgdGV4dEJv
eElzSG9yaXpvbnRhbCwgVGV4dFBhaW50U3R5bGUmIHRleHRQYWludFN0eWxlLCBUZXh0UGFpbnRT
dHlsZSYgc2VsZWN0aW9uUGFpbnRTdHlsZSkKQEAgLTU2LDcgKzU2LDcgQEAgVGV4dFBhaW50ZXI6
OlRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dAogewogfQogCi1zdGF0aWMgdm9pZCBkcmF3VGV4
dE9yRW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNN
YXJrLAorc3RhdGljIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1
biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssCiAgICAgaW50IGVtcGhhc2lzTWFy
a09mZnNldCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IGludCBmcm9tLCBjb25zdCBp
bnQgdG8pCiB7CiAgICAgaWYgKGVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCkBAIC0xMTMsNyArMTEz
LDcgQEAgU2hhZG93QXBwbGllcjo6flNoYWRvd0FwcGxpZXIoKQogICAgICAgICBtX2NvbnRleHQu
Y2xlYXJTaGFkb3coKTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKK3N0YXRpYyB2b2lkIHBh
aW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
ZW1waGFzaXNNYXJrLAogICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCwgaW50IHRydW5jYXRpb25Qb2ludCwgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LAogICAgIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdywgYm9vbCBzdHJva2VkLCBib29sIGhvcml6b250YWwpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb24oYwogCiBj
bGFzcyBUZXh0UGFpbnRlciB7CiBwdWJsaWM6Ci0gICAgVGV4dFBhaW50ZXIoR3JhcGhpY3NDb250
ZXh0JiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRT
ZXBhcmF0ZWx5LCBjb25zdCBGb250JiwKKyAgICBUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQm
LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFy
YXRlbHksIGNvbnN0IEZvbnRDYXNjYWRlJiwKICAgICBpbnQgc3RhcnRQb3NpdGlvbkluVGV4dFJ1
biwgaW50IGVuZFBvc2l0aW9uSW5UZXh0Qm94U3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgUmVuZGVyQ29tYmluZVRleHQqLAogICAgIFRleHRSdW4m
LCBGbG9hdFJlY3QmIGJveFJlY3QsIEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBlbXBoYXNp
c01hcmtPZmZzZXQsIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0Rh
dGEqIHNlbGVjdGlvblNoYWRvdywKICAgICBib29sIHRleHRCb3hJc0hvcml6b250YWwsIFRleHRQ
YWludFN0eWxlJiBub25TZWxlY3Rpb25QYWludFN0eWxlLCBUZXh0UGFpbnRTdHlsZSYgc2VsZWN0
aW9uUGFpbnRTdHlsZSk7CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU2hh
ZG93RGF0YSogbV9zZWxlY3Rpb25TaGFkb3c7CiAgICAgYm9vbCBtX3BhaW50U2VsZWN0ZWRUZXh0
T25seTsKICAgICBib29sIG1fcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5OwotICAgIGNvbnN0
IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGludCBt
X3N0YXJ0UG9zaXRpb25JblRleHRSdW47CiAgICAgaW50IG1fZW5kUG9zaXRpb25JblRleHRSdW47
CiAgICAgaW50IG1fbGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250
ZXh0SW5saW5lSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBp
bmxpbmUgdm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVu
ZGVyQ291bnRlcj4ocmVuZGVyVGV4dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxv
YXQgbWVhc3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBm
b250LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQor
aW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cyA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVy
ZXItPnN0eWxlKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBz
dHlsZSksIGZhbGxiYWNrRm9udHMpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0
aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZv
bnQmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hp
dGVTcGFjZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBU
ZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQorQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVu
ZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VX
aGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMs
IFRleHRMYXlvdXQqIGxheW91dCA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gdGV4dC0+c3R5bGUoKTsKIApAQCAtNTAxLDcgKzUwMSw3IEBAIEFMV0FZU19JTkxJTkUgZmxv
YXQgdGV4dFdpZHRoKFJlbmRlclRleHQKICAgICAgICAgcmV0dXJuIHRleHQtPndpZHRoKGZyb20s
IGxlbiwgZm9udCwgeFBvcywgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KTsKIAogICAg
IGlmIChsYXlvdXQpCi0gICAgICAgIHJldHVybiBGb250Ojp3aWR0aCgqbGF5b3V0LCBmcm9tLCBs
ZW4sICZmYWxsYmFja0ZvbnRzKTsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlOjp3aWR0aCgq
bGF5b3V0LCBmcm9tLCBsZW4sICZmYWxsYmFja0ZvbnRzKTsKIAogICAgIFRleHRSdW4gcnVuID0g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgZnJvbSwgbGVu
LCBzdHlsZSk7CiAgICAgcnVuLnNldENoYXJhY3RlcnNMZW5ndGgodGV4dC0+dGV4dExlbmd0aCgp
IC0gZnJvbSk7CkBAIC01MjEsNyArNTIxLDcgQEAgaW5saW5lIHZvaWQgZW5zdXJlQ2hhcmFjdGVy
R2V0c0xpbmVCb3goTAogICAgIGxpbmVNaWRwb2ludFN0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyhJ
bmxpbmVJdGVyYXRvcigwLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLnJlbmRlcmVyKCksIHRleHRQ
YXJhZ3JhcGhTZXBhcmF0b3Iub2Zmc2V0KCkpKTsKIH0KIAotaW5saW5lIHZvaWQgdHJ5SHlwaGVu
YXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGVJZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5l
cywgaW50IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBtaW5pbXVtUHJlZml4
TGltaXQsIGludCBtaW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RTcGFjZSwgdW5zaWdu
ZWQgcG9zLCBmbG9hdCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNGaXhlZFBpdGNo
LCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBJbmxp
bmVJdGVyYXRvciYgbGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9vbCYgaHlwaGVuYXRl
ZCkKK2lubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCBpbnQgY29uc2VjdXRpdmVIeXBoZW5h
dGVkTGluZXNMaW1pdCwgaW50IG1pbmltdW1QcmVmaXhMaW1pdCwgaW50IG1pbmltdW1TdWZmaXhM
aW1pdCwgdW5zaWduZWQgbGFzdFNwYWNlLCB1bnNpZ25lZCBwb3MsIGZsb2F0IHhQb3MsIGludCBh
dmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNl
LCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGlu
dCBuZXh0QnJlYWthYmxlLCBib29sJiBoeXBoZW5hdGVkKQogewogICAgIC8vIE1hcCAnaHlwaGVu
YXRlLWxpbWl0LXtiZWZvcmUsYWZ0ZXJ9OiBhdXRvOycgdG8gMi4KICAgICB1bnNpZ25lZCBtaW5p
bXVtUHJlZml4TGVuZ3RoOwpAQCAtNjE1LDEyICs2MTUsMTIgQEAgaW5saW5lIGJvb2wgQnJlYWtp
bmdDb250ZXh0OjpoYW5kbGVUZXh0KAogICAgIH0KIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSA9IGxpbmVTdHlsZSgqcmVuZGVyVGV4dC5wYXJlbnQoKSwgbV9saW5lSW5mbyk7Ci0gICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2ggPSBmb250
LmlzRml4ZWRQaXRjaCgpOwogICAgIGJvb2wgY2FuSHlwaGVuYXRlID0gc3R5bGUuaHlwaGVucygp
ID09IEh5cGhlbnNBdXRvICYmIFdlYkNvcmU6OmNhbkh5cGhlbmF0ZShzdHlsZS5sb2NhbGUoKSk7
CiAKICAgICB1bnNpZ25lZCBsYXN0U3BhY2UgPSBtX2N1cnJlbnQub2Zmc2V0KCk7Ci0gICAgZmxv
YXQgd29yZFNwYWNpbmcgPSBtX2N1cnJlbnRTdHlsZS0+Zm9udCgpLndvcmRTcGFjaW5nKCk7Cisg
ICAgZmxvYXQgd29yZFNwYWNpbmcgPSBtX2N1cnJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS53b3Jk
U3BhY2luZygpOwogICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKICAgICBmbG9h
dCB3b3JkU3BhY2luZ0ZvcldvcmRNZWFzdXJlbWVudCA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3QgUmVuZGVyVGV4dEluZm8gewogICAgIFJlbmRlclRl
eHQqIG1fdGV4dDsKICAgICBPd25QdHI8VGV4dExheW91dD4gbV9sYXlvdXQ7CiAgICAgTGF6eUxp
bmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7Ci0gICAgY29uc3QgRm9udCogbV9m
b250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBtX2ZvbnQ7CiB9OwogCiBjbGFzcyBMaW5lQnJl
YWtlciB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVh
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJ
bmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgaW5saW5lIGJvb2wgcmVxdWlyZXNMaW5lQm94Rm9yQ29udGVudChjbwogICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUgPSBsaW5lU3R5bGUoKnBhcmVudCwgbGluZUlu
Zm8pOwogICAgICAgICBpZiAoZmxvd1N0eWxlLmxpbmVIZWlnaHQoKSAhPSBwYXJlbnRTdHlsZS5s
aW5lSGVpZ2h0KCkKICAgICAgICAgICAgIHx8IGZsb3dTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0g
cGFyZW50U3R5bGUudmVydGljYWxBbGlnbigpCi0gICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUu
Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAo
Zmxvd1N0eWxlLmZvbnQoKS5mb250TWV0cmljcygpKSkKKyAgICAgICAgICAgIHx8ICFwYXJlbnRT
dHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2Vu
dEFuZExpbmVHYXAoZmxvd1N0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNw
cAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBi
b29sIHBhcnNlTWF0aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAodW5pdCA9PSAiZW0iKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVl
ID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250KCkuc2l6ZSgpOworICAgICAgICBsZW5ndGhWYWx1
ZSA9IGZsb2F0VmFsdWUgKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodW5pdCA9PSAiZXgiKSB7CkBAIC0yOTMsNyArMjkz
LDcgQEAgYm9vbCBwYXJzZU1hdGhNTE5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJgogICAgICAgICAg
ICAgbGVuZ3RoID0gLTc7ICAgICAgICAKICAgICB9CiAgICAgaWYgKGxlbmd0aCkgewotICAgICAg
ICBsZW5ndGhWYWx1ZSA9IGxlbmd0aCAqIHN0eWxlLT5mb250KCkuc2l6ZSgpIC8gMTg7CisgICAg
ICAgIGxlbmd0aFZhbHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8g
MTg7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOTEsOCArMTE5MSw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9y
UHIKICAgICAgICAgbV9vcGVyYXRvckZsYWdzID0gZW50cnktPmZsYWdzOwogCiAgICAgLy8gTGVh
ZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgaXMgc3BlY2lmaWVkIGFzIG11bHRpcGxlIG9mIDEvMThl
bS4KLSAgICBtX2xlYWRpbmdTcGFjZSA9IGVudHJ5LT5sc3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5z
aXplKCkgLyAxODsKLSAgICBtX3RyYWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNwYWNlICogc3R5bGUo
KS5mb250KCkuc2l6ZSgpIC8gMTg7CisgICAgbV9sZWFkaW5nU3BhY2UgPSBlbnRyeS0+bHNwYWNl
ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OworICAgIG1fdHJhaWxpbmdTcGFj
ZSA9IGVudHJ5LT5yc3BhY2UgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiB9
CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCkBA
IC0xMjI5LDkgKzEyMjksOSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRv
clByCiAgICAgICAgIG1fb3BlcmF0b3JGbGFncyAmPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OkZlbmNlIHwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTZXBhcmF0b3I7IC8vIFRoaXMgcmVz
ZXRzIGFsbCBidXQgdGhlIEZlbmNlIGFuZCBTZXBhcmF0b3IgcHJvcGVydGllcy4KICAgICBlbHNl
CiAgICAgICAgIG1fb3BlcmF0b3JGbGFncyA9IDA7IC8vIFRoaXMgcmVzZXRzIGFsbCB0aGUgb3Bl
cmF0b3IgcHJvcGVydGllcy4KLSAgICBtX2xlYWRpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnQo
KS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIGxlYWRpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNw
YWNlIi4KLSAgICBtX3RyYWlsaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8g
MTg7IC8vIFRoaXMgc2V0cyB0cmFpbGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3BhY2UiLgotICAg
IG1fbWluU2l6ZSA9IHN0eWxlKCkuZm9udCgpLnNpemUoKTsgLy8gVGhpcyBzZXRzIG1pbnNpemUg
dG8gIjFlbSIuCisgICAgbV9sZWFkaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgbGVhZGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3Bh
Y2UiLgorICAgIG1fdHJhaWxpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6
ZSgpIC8gMTg7IC8vIFRoaXMgc2V0cyB0cmFpbGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3BhY2Ui
LgorICAgIG1fbWluU2l6ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7IC8vIFRoaXMg
c2V0cyBtaW5zaXplIHRvICIxZW0iLgogICAgIG1fbWF4U2l6ZSA9IGludE1heEZvckxheW91dFVu
aXQ7IC8vIFRoaXMgc2V0cyBtYXhzaXplIHRvICJpbmZpbml0eSIuCiAKICAgICBpZiAobV90ZXh0
Q29udGVudCkgewpAQCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6Y29tcHV0ZVByZWZlcgogICAgICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgaWYgKGlzSW52aXNpYmxlT3BlcmF0b3IoKSkg
ewogICAgICAgICAgICAgLy8gSW4gc29tZSBmb250cywgZ2x5cGhzIGZvciBpbnZpc2libGUgb3Bl
cmF0b3JzIGhhdmUgbm9uemVybyB3aWR0aC4gQ29uc2VxdWVudGx5LCB3ZSBzdWJ0cmFjdCB0aGF0
IHdpZHRoIGhlcmUgdG8gYXZvaWQgd2lkZSBnYXBzLgotICAgICAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwg
ZmFsc2UpOworICAgICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsIGZhbHNlKTsKICAgICAgICAg
ICAgIGZsb2F0IGdseXBoV2lkdGggPSBhZHZhbmNlRm9yR2x5cGgoZGF0YSk7CiAgICAgICAgICAg
ICBBU1NFUlQoZ2x5cGhXaWR0aCA8PSBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAg
ICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCAtPSBnbHlwaFdpZHRoOwpAQCAtMTM2
NCw3ICsxMzY0LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZv
bnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENh
c2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IGFk
dmFuY2VGb3JHbHlwaChkYXRhKTsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewogICAgICAgICBp
ZiAobWF4aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQpAQCAtMTUyMSw3ICsxNTIxLDcg
QEAgYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbQogICAgIGlmICghYm90
dG9tLmdseXBoKQogICAgICAgICBib3R0b20uZ2x5cGggPSBleHRlbnNpb24uZ2x5cGg7CiAKLSAg
ICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAg
dG9wLmZvbnREYXRhID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsK
ICAgICBleHRlbnNpb24uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgYm90dG9tLmZvbnRE
YXRhID0gdG9wLmZvbnREYXRhOwogICAgIGlmIChtaWRkbGUuZ2x5cGgpCkBAIC0xNTM4LDggKzE1
MzgsOCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAKICAgICBB
U1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpOwog
Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udCgpLmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICBpZiAoIXByaW1hcnlGb250RGF0
YS5tYXRoRGF0YSgpIHx8IGJhc2VHbHlwaC5mb250RGF0YSAhPSAmcHJpbWFyeUZvbnREYXRhKQog
ICAgICAgICByZXR1cm4gZGF0YTsKIApAQCAtMTU3MCw4ICsxNTcwLDggQEAgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogICAgIFN0cmV0Y2h5RGF0YSBkYXRhOwogICAg
IFN0cmV0Y2h5RGF0YSBhc3NlbWJseURhdGE7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9u
dERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBHbHlwaERhdGEg
YmFzZUdseXBoID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
ciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICBjb25zdCBhdXRvJiBw
cmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7
CisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpOwogICAgIAogICAgIGlmIChwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSAmJiBiYXNlR2x5
cGguZm9udERhdGEgPT0gJnByaW1hcnlGb250RGF0YSkgewogICAgICAgICBWZWN0b3I8R2x5cGg+
IHNpemVWYXJpYW50czsKQEAgLTE2MTgsMTIgKzE2MTgsMTIgQEAgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAKICAgICAg
ICAgLy8gV2UgY29udmVydCB0aGUgbGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW50byBhIGxp
c3Qgb2YgZ2x5cGggZGF0YS4KLSAgICAgICAgR2x5cGhEYXRhIHRvcCA9IHN0eWxlKCkuZm9udCgp
LmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2Up
OwotICAgICAgICBHbHlwaERhdGEgZXh0ZW5zaW9uID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxzZSk7Ci0g
ICAgICAgIEdseXBoRGF0YSBib3R0b20gPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKKyAgICAgICAgR2x5
cGhEYXRhIHRvcCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
c3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKKyAgICAgICAgR2x5cGhEYXRhIGV4
dGVuc2lvbiA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3Ry
ZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKKyAgICAgICAgR2x5cGhEYXRh
IGJvdHRvbSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3Ry
ZXRjaHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKICAgICAgICAgR2x5cGhEYXRhIG1p
ZGRsZTsKICAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyKQotICAgICAg
ICAgICAgbWlkZGxlID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0
Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyLCBmYWxzZSk7CisgICAgICAgICAgICBtaWRkbGUgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFj
dGVyLT5taWRkbGVDaGFyLCBmYWxzZSk7CiAgICAgICAgIGFzc2VtYmx5RGF0YS5zZXRHbHlwaEFz
c2VtYmx5TW9kZSh0b3AsIGV4dGVuc2lvbiwgYm90dG9tLCBtaWRkbGUpOwogICAgIH0KIApAQCAt
MTY4MCw3ICsxNjgwLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUo
KQogICAgICAgICBtX3N0cmV0Y2h5RGF0YSA9IGdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Io
bV90ZXh0Q29udGVudCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNo
IGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgR2x5cGhEYXRhIGJh
c2VHbHlwaCA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250
ZW50LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgICAgICBHbHlwaERh
dGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAg
ICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VH
bHlwaCkgOiBhZHZhbmNlRm9yR2x5cGgoYmFzZUdseXBoKTsKICAgICAgICAgaWYgKHN0cmV0Y2hT
aXplKCkgPD0gYmFzZVNpemUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xODAyLDcgKzE4MDIs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdsCiAKICAgICBHbHlw
aEJ1ZmZlciBidWZmZXI7CiAgICAgYnVmZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRh
LCBhZHZhbmNlRm9yR2x5cGgoZGF0YSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhz
dHlsZSgpLmZvbnQoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKKyAg
ICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5m
b250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcmlnaW4pOwogCiAgICAgcmV0dXJuIGdseXBoUGFpbnRS
ZWN0OwogfQpAQCAtMTg5OCw3ICsxODk4LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
cGFpbnQoUGFpbnRJbgogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBjZWls
ZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9hdFJlY3Qg
Z2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOwog
ICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBv
cGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5mby5jb250
ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udCgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgp
LmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5j
b250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRh
LnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5ODAsNyArMTk4MCw3IEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9u
dERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRv
JiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKQEAgLTE5ODksNyArMTk4OSw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnRyYWlsaW4KICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAKICAg
ICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdOb3JtYWwpIHsKLSAgICAgICAgR2x5
cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodGV4dENv
bnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICAgICAgR2x5
cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHRleHRDb250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAg
ICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VGb3JHbHlwaChkYXRhKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OlJlbmRlck1hdGhNCiAKIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpz
dHJldGNoVG8oTGF5b3V0VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0IGRlcHRo
QmVsb3dCYXNlbGluZSkKIHsKLSAgICBpZiAoIXN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0
YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIElmIHdlIGRvIG5vdCBoYXZlIGFu
IE9wZW5UeXBlIE1BVEggZm9udCwgd2UgYWx3YXlzIG1ha2UgdGhlIHJhZGljYWwgZGVwdGggYSBi
aXQgbGFyZ2VyIHRoYW4gdGhlIHRhcmdldC4KICAgICAgICAgZGVwdGhCZWxvd0Jhc2VsaW5lICs9
IGdSYWRpY2FsQm90dG9tUG9pbnRMb3dlcjsKICAgICB9CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQg
UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXQKIHsKICAgICBBU1NFUlQocHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpOwogCi0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1h
cnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9y
Ojpjb21wdXQKIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dGVMb2dp
Y2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewot
ICAgIGlmIChzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7Cisg
ICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgp
KSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChs
b2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVlcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OnBhaW50KAogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8
fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSgpLmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSwxNyArMTk5LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRlU3R5bGUoKQog
CiAgICAgLy8gV2Ugc2V0IHNvbWUgY29uc3RhbnRzIHRvIGRyYXcgdGhlIHJhZGljYWwsIGFzIGRl
ZmluZWQgaW4gdGhlIE9wZW5UeXBlIE1BVEggdGFibGVzLgogCi0gICAgbV9ydWxlVGhpY2tuZXNz
ID0gMC4wNWYgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCk7CisgICAgbV9ydWxlVGhpY2tuZXNzID0g
MC4wNWYgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpOwogCiAgICAgLy8gRklYTUU6IFRo
ZSByZWNvbW1lbmRlZCBkZWZhdWx0IGZvciBtX3ZlcnRpY2FsR2FwIGluIGRpc3BsYXlzdHlsZSBp
cyBydWxlIHRoaWNrbmVzcyArIDEvNCB4LWhlaWdodCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExODczNykuCiAgICAgbV92ZXJ0aWNhbEdhcCA9IDExICogbV9ydWxl
VGhpY2tuZXNzIC8gNDsKICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtX3J1bGVUaGlja25lc3M7Ci0g
ICAgTGF5b3V0VW5pdCBrZXJuQmVmb3JlRGVncmVlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUo
KSAvIDE4OwotICAgIExheW91dFVuaXQga2VybkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUoKS5m
b250KCkuc2l6ZSgpIC8gMTg7CisgICAgTGF5b3V0VW5pdCBrZXJuQmVmb3JlRGVncmVlID0gNSAq
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKKyAgICBMYXlvdXRVbml0IGtlcm5B
ZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKICAg
ICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IDAuNmY7CiAKLSAgICBjb25zdCBhdXRvJiBw
cmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBp
ZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRo
RGF0YSgpKSB7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBtX3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHls
ZVZlcnRpY2FsIGluIGRpc3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExODczNykuCiAgICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0
TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZl
cnRpY2FsR2FwKTsKICAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhD
b25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhp
Y2tuZXNzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MVG9rZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTEgKzg4LDExIEBAIHZvaWQgUmVuZGVyTWF0aE1MVG9rZW46OnVwZGF0ZVN0eWxl
KCkKICAgICAgICAgLy8gVGhpcyB0cmllcyB0byBlbXVsYXRlIHRoZSBkZWZhdWx0IG1hdGh2YXJp
YW50IHZhbHVlIG9uIDxtaT4gdXNpbmcgdGhlIENTUyBmb250LXN0eWxlIHByb3BlcnR5LgogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmV2aXNlZCB3aGVuIG1hdGh2YXJpYW50IGlz
IGltcGxlbWVudGVkIChodHRwOi8vd2tidWcvODU3MzUpIGFuZCB3aGVuIGZvbnRzIHdpdGggTWF0
aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzIGNoYXJhY3RlcnMgYXJlIG1vcmUgcG9wdWxh
ci4KICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5nZXQo
KS5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9y
ID0gbmV3U3R5bGUuZ2V0KCkuZm9udCgpLmZvbnRTZWxlY3RvcigpOworICAgICAgICBGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvciA9IG5ld1N0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkuZm9udFNl
bGVjdG9yKCk7CiAgICAgICAgIGlmICghbV9jb250YWluc0VsZW1lbnQgJiYgZWxlbWVudCgpLnRl
eHRDb250ZW50KCkuc3RyaXBXaGl0ZVNwYWNlKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCkubGVuZ3Ro
KCkgPT0gMSAmJiAhdG9rZW5FbGVtZW50Lmhhc0F0dHJpYnV0ZShtYXRodmFyaWFudEF0dHIpKQog
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT24pOwogICAg
ICAgICBpZiAobmV3U3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bikpCi0gICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rv
cik7CisgICAgICAgICAgICBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250
U2VsZWN0b3IpOwogICAgIH0KIAogICAgIHdyYXBwZXItPnNldFN0eWxlKFdURjo6bW92ZShuZXdT
dHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNp
bmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiSW5s
aW5lVGV4dEJveFN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnaW5hdGlvbi5oIgpAQCAtMjkzLDcgKzI5
Myw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKGNvbnMKIH0KIAogI2lm
IEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250
SGFzaChjb25zdCBGb250JiBmb250KQoraW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7
CiAgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaChmb250LmZvbnREZXNjcmlwdGlvbigpLmZp
cnN0RmFtaWx5KCkuaW1wbCgpKSwKQEAgLTMxNSw3ICszMTUsNyBAQCB1aW50MzJfdCBSZW5kZXJT
dHlsZTo6aGFzaEZvclRleHRBdXRvc2l6CiAgICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+
bmJzcE1vZGU7CiAgICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrOwogICAg
IGhhc2ggXj0gV1RGOjpGbG9hdEhhc2g8ZmxvYXQ+OjpoYXNoKGluaGVyaXRlZC0+c3BlY2lmaWVk
TGluZUhlaWdodC52YWx1ZSgpKTsKLSAgICBoYXNoIF49IGNvbXB1dGVGb250SGFzaChpbmhlcml0
ZWQtPmZvbnQpOworICAgIGhhc2ggXj0gY29tcHV0ZUZvbnRIYXNoKGluaGVyaXRlZC0+Zm9udENh
c2NhZGUpOwogICAgIGhhc2ggXj0gaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5n
OwogICAgIGhhc2ggXj0gaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZzsKICAgICBo
YXNoIF49IGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbjsKQEAgLTMzOSw3ICszMzksNyBA
QCBib29sIFJlbmRlclN0eWxlOjplcXVhbEZvclRleHRBdXRvc2l6aW5nCiAgICAgICAgICYmIHJh
cmVJbmhlcml0ZWREYXRhLT5saW5lQnJlYWsgPT0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhLT5s
aW5lQnJlYWsKICAgICAgICAgJiYgcmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSA9PSBv
dGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eQogICAgICAgICAmJiBpbmhlcml0
ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQgPT0gb3RoZXItPmluaGVyaXRlZC0+c3BlY2lmaWVkTGlu
ZUhlaWdodAotICAgICAgICAmJiBpbmhlcml0ZWQtPmZvbnQuZXF1YWxGb3JUZXh0QXV0b1Npemlu
ZyhvdGhlci0+aW5oZXJpdGVkLT5mb250KQorICAgICAgICAmJiBpbmhlcml0ZWQtPmZvbnRDYXNj
YWRlLmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRlZC0+Zm9udENhc2NhZGUp
CiAgICAgICAgICYmIGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZyA9PSBvdGhl
ci0+aW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgICYmIGluaGVy
aXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+dmVydGlj
YWxfYm9yZGVyX3NwYWNpbmcKICAgICAgICAgJiYgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0
aW9uID09IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJlY3Rpb24KQEAgLTU1MSw3ICs1
NTEsNyBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjCiAjaWYgRU5B
QkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgICAgIHx8IGluaGVyaXRlZC0+c3BlY2lmaWVk
TGluZUhlaWdodCAhPSBvdGhlci5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRp
ZgotICAgICAgICB8fCBpbmhlcml0ZWQtPmZvbnQgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250Cisg
ICAgICAgIHx8IGluaGVyaXRlZC0+Zm9udENhc2NhZGUgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250
Q2FzY2FkZQogICAgICAgICB8fCBpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcg
IT0gb3RoZXIuaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgIHx8
IGluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgIT0gb3RoZXIuaW5oZXJpdGVkLT52
ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWRfZmxhZ3MuX2JveF9k
aXJlY3Rpb24gIT0gb3RoZXIuaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC0xMTg0
LDcgKzExODQsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjpoeXBoZW5TCiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRlcGVuZCBvbiBsb2NhbGUuCiAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuTWludXNTdHJpbmcsICgm
aHlwaGVuTWludXMsIDEpKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBoeXBoZW5TdHJpbmcsICgmaHlwaGVuLCAxKSk7Ci0gICAgcmV0dXJuIGZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3Ry
aW5nIDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5
cGhlbk1pbnVzU3RyaW5nOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjp0
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgY29uc3QKQEAgLTEzNDAsMjAgKzEzNDAsMjAgQEAgY29u
c3QgQW5pbWF0aW9uKiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbgogICAgIHJldHVybiAwOwogfQog
Ci1jb25zdCBGb250JiBSZW5kZXJTdHlsZTo6Zm9udCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRl
ZC0+Zm9udDsgfQotY29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygp
IGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5mb250TWV0cmljcygpOyB9Ci1jb25zdCBG
b250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNj
YWRlJiBSZW5kZXJTdHlsZTo6Zm9udENhc2NhZGUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQt
PmZvbnRDYXNjYWRlOyB9Citjb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250TWV0cmljcygp
OyB9Citjb25zdCBGb250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24o
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
OyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6c3BlY2lmaWVkRm9udFNpemUoKSBjb25zdCB7IHJldHVy
biBmb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxl
Ojpjb21wdXRlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29t
cHV0ZWRTaXplKCk7IH0KLWludCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7IHJldHVy
biBpbmhlcml0ZWQtPmZvbnQucGl4ZWxTaXplKCk7IH0KK2ludCBSZW5kZXJTdHlsZTo6Zm9udFNp
emUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpOyB9
CiAKIGNvbnN0IExlbmd0aCYgUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gcmFyZUluaGVyaXRlZERhdGEtPndvcmRTcGFjaW5nOyB9Ci1mbG9hdCBSZW5kZXJTdHlsZTo6
bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5sZXR0ZXJTcGFj
aW5nKCk7IH0KK2Zsb2F0IFJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCk7IH0KIAogYm9vbCBSZW5k
ZXJTdHlsZTo6c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgdikKIHsK
LSAgICBpZiAoaW5oZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKLSAgICAg
ICAgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250ID0gRm9udCh2LCBpbmhlcml0ZWQtPmZvbnQubGV0
dGVyU3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgaWYgKGlu
aGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgeworICAgICAgICBp
bmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUodiwgaW5oZXJpdGVk
LT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udENhc2NhZGUud29y
ZFNwYWNpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNDA0LDcgKzE0MDQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2lu
ZyhMZW5ndGggCiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUGVyY2VudDoKLSAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFsdWUucGVyY2Vu
dCgpICogZm9udCgpLnNwYWNlV2lkdGgoKSAvIDEwMDsKKyAgICAgICAgZm9udFdvcmRTcGFjaW5n
ID0gdmFsdWUucGVyY2VudCgpICogZm9udENhc2NhZGUoKS5zcGFjZVdpZHRoKCkgLyAxMDA7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9
IHZhbHVlLnZhbHVlKCk7CkBAIC0xNDE3LDExICsxNDE3LDExIEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldFdvcmRTcGFjaW5nKExlbmd0aCAKICAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gMDsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRXb3Jk
U3BhY2luZyhmb250V29yZFNwYWNpbmcpOworICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENh
c2NhZGUuc2V0V29yZFNwYWNpbmcoZm9udFdvcmRTcGFjaW5nKTsKICAgICByYXJlSW5oZXJpdGVk
RGF0YS5hY2Nlc3MoKS0+d29yZFNwYWNpbmcgPSBXVEY6Om1vdmUodmFsdWUpOwogfQogCi12b2lk
IFJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYpIHsgaW5oZXJpdGVkLmFjY2Vz
cygpLT5mb250LnNldExldHRlclNwYWNpbmcodik7IH0KK3ZvaWQgUmVuZGVyU3R5bGU6OnNldExl
dHRlclNwYWNpbmcoZmxvYXQgdikgeyBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNl
dExldHRlclNwYWNpbmcodik7IH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxv
YXQgc2l6ZSkKIHsKQEAgLTE0MzQsNyArMTQzNCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZv
bnRTaXplKGZsb2F0IHNpemUKICAgICBlbHNlCiAgICAgICAgIHNpemUgPSBzdGQ6Om1pbihtYXhp
bXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKIAotICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZv
bnRTZWxlY3RvciA9IGZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICBGb250U2VsZWN0b3IqIGN1
cnJlbnRGb250U2VsZWN0b3IgPSBmb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgIEZv
bnREZXNjcmlwdGlvbiBkZXNjKGZvbnREZXNjcmlwdGlvbigpKTsKICAgICBkZXNjLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7CiAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CkBAIC0xNDQ4
LDcgKzE0NDgsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXplCiAj
ZW5kaWYKIAogICAgIHNldEZvbnREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBmb250KCkudXBkYXRl
KGN1cnJlbnRGb250U2VsZWN0b3IpOworICAgIGZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRG
b250U2VsZWN0b3IpOwogfQogCiB2b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFkb3dFeHRlbnQoY29u
c3QgU2hhZG93RGF0YSogc2hhZG93LCBMYXlvdXRVbml0ICZ0b3AsIExheW91dFVuaXQgJnJpZ2h0
LCBMYXlvdXRVbml0ICZib3R0b20sIExheW91dFVuaXQgJmxlZnQpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBDb250ZW50RGF0YTsKIGNsYXNz
IENvdW50ZXJDb250ZW50OwogY2xhc3MgQ3Vyc29yTGlzdDsKIGNsYXNzIEZpbHRlck9wZXJhdGlv
bnM7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGb250TWV0cmljczsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBNYXNrSW1hZ2VPcGVyYXRpb247CkBAIC02ODksNyArNjg5
LDcgQEAgcHVibGljOgogICAgIEVDbGVhciBjbGVhcigpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVy
aXRlZF9mbGFncy5jbGVhcigpOyB9CiAgICAgRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KCkgY29u
c3QgeyByZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLnRhYmxlTGF5b3V0KCk7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgIGZsb2F0IHNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5o
ZXJpdGVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgaW5saW5lIFN0
eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZQogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQogICAgICwgc3BlY2lmaWVkTGluZUhlaWdodChvLnNwZWNpZmllZExpbmVIZWlnaHQp
CiAjZW5kaWYKLSAgICAsIGZvbnQoby5mb250KQorICAgICwgZm9udENhc2NhZGUoby5mb250Q2Fz
Y2FkZSkKICAgICAsIGNvbG9yKG8uY29sb3IpCiAgICAgLCB2aXNpdGVkTGlua0NvbG9yKG8udmlz
aXRlZExpbmtDb2xvcikKIHsKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBTdHlsZUluaGVyaXRlZERh
dGE6Om9wZXJhdG9yPT0oY29ucwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAg
ICAgICAmJiBzcGVjaWZpZWRMaW5lSGVpZ2h0ID09IG8uc3BlY2lmaWVkTGluZUhlaWdodAogI2Vu
ZGlmCi0gICAgICAgICYmIGZvbnQgPT0gby5mb250CisgICAgICAgICYmIGZvbnRDYXNjYWRlID09
IG8uZm9udENhc2NhZGUKICAgICAgICAgJiYgY29sb3IgPT0gby5jb2xvcgogICAgICAgICAmJiB2
aXNpdGVkTGlua0NvbG9yID09IG8udmlzaXRlZExpbmtDb2xvcgogICAgICAgICAmJiBob3Jpem9u
dGFsX2JvcmRlcl9zcGFjaW5nID09IG8uaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERh
dGEuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW5oZXJpdGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
ZGVmaW5lIFN0eWxlSW5oZXJpdGVkRGF0YV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIExlbmd0aCBzcGVjaWZpZWRMaW5lSGVp
Z2h0OwogI2VuZGlmCiAKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udENhc2Nh
ZGU7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgQ29sb3IgdmlzaXRlZExpbmtDb2xvcjsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTMgKzIy
NSwxMyBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OnVwZGF0ZVNjYWxlZEZvCiAgICAgY29t
cHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSgqdGhpcywgc3R5bGUoKSwgbV9zY2FsaW5nRmFjdG9y
LCBtX3NjYWxlZEZvbnQpOwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVO
ZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udCYgc2NhbGVkRm9u
dCkKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHls
ZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGZsb2F0JiBzY2FsaW5nRmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCkKIHsKICAgICAv
LyBBbHRlciBmb250LXNpemUgdG8gdGhlIHJpZ2h0IG9uLXNjcmVlbiB2YWx1ZSB0byBhdm9pZCBz
Y2FsaW5nIHRoZSBnbHlwaHMgdGhlbXNlbHZlcywgZXhjZXB0IHdoZW4gR2VvbWV0cmljUHJlY2lz
aW9uIGlzIHNwZWNpZmllZAogICAgIHNjYWxpbmdGYWN0b3IgPSBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjYWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IocmVuZGVyZXIpOwogICAgIGlm
IChzY2FsaW5nRmFjdG9yID09IDEgfHwgIXNjYWxpbmdGYWN0b3IgfHwgc3R5bGUuZm9udERlc2Ny
aXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUoKSA9PSBHZW9tZXRyaWNQcmVjaXNpb24pIHsKICAg
ICAgICAgc2NhbGluZ0ZhY3RvciA9IDE7Ci0gICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250
KCk7CisgICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpjb21wdXRlTmV3U2NhbAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJldHRlciBoYW5k
bGUgdGhlIGNhc2Ugd2hlbiB3ZSBjb21wdXRlIHZlcnkgc21hbGwgZm9udHMgYmVsb3cgKGJlbG93
IDFwdCkuCiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0
ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplRm9yU1ZHSW5saW5lVGV4dChmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzY2Fs
aW5nRmFjdG9yLCByZW5kZXJlci5kb2N1bWVudCgpKSk7CiAKLSAgICBzY2FsZWRGb250ID0gRm9u
dChmb250RGVzY3JpcHRpb24sIDAsIDApOworICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShm
b250RGVzY3JpcHRpb24sIDAsIDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHJlbmRlcmVyLmRv
Y3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAj
aWZuZGVmIFJlbmRlclNWR0lubGluZVRleHRfaAogI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVUZXh0
X2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIlRleHQuaCIKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgogICAgIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gJm1fbGF5b3V0QXR0
cmlidXRlczsgfQogCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGluZ0ZhY3RvcjsgfQotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX3NjYWxlZEZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQogICAgIHZvaWQgdXBkYXRlU2NhbGVkRm9u
dCgpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3Rvciwg
Rm9udCYgc2NhbGVkRm9udCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZU5ld1NjYWxlZEZvbnRG
b3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0JiBz
Y2FsaW5nRmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCk7CiAKICAgICAvLyBQcmVzZXJ2
ZXMgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uIGZvciB0aGUgdXNlIGluIERSVC4gSXQga25vd3Mg
aG93IHRvIHJvdW5kIGFuZCBkb2VzIGEgYmV0dGVyIGpvYiB0aGFuIGVuY2xvc2luZ0ludFJlY3Qu
CiAgICAgRmxvYXRSZWN0IGZsb2F0TGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OwpAQCAtNjUsNyAr
NjUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRC
b3g+IGNyZWF0ZVRleHRCb3goKSBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc2NhbGluZ0ZhY3Rv
cjsKLSAgICBGb250IG1fc2NhbGVkRm9udDsKKyAgICBGb250Q2FzY2FkZSBtX3NjYWxlZEZvbnQ7
CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMgbV9sYXlvdXRBdHRyaWJ1dGVzOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAg
RmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlYwogICAgIGZsb2F0IHNjYWxp
bmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGlu
Z0ZhY3Rvcik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2Fs
ZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSByZW5kZXJlcigp
LnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBGb250TWV0cmljcyYgc2NhbGVkRm9udE1ldHJpY3Mg
PSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCk7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZy
YWdtZW50LngsIGZyYWdtZW50LnkpOwogICAgIGlmIChzY2FsaW5nRmFjdG9yICE9IDEpCkBAIC0x
NzIsNyArMTcyLDcgQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgdGV4dFNob3VsZEJlUGFpbnRlZChjb25zdCBSZW5kZXJTVkdJ
bmxpbmVUZXh0JiB0ZXh0UmVuZGVyZXIpCiB7Ci0gICAgLy8gRm9udDo6cGl4ZWxTaXplKCksIHJl
dHVybnMgRm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5z
ICJpbnQoeCArIDAuNSkiLgorICAgIC8vIEZvbnRDYXNjYWRlOjpwaXhlbFNpemUoKSwgcmV0dXJu
cyBGb250RGVzY3JpcHRpb246OmNvbXB1dGVkUGl4ZWxTaXplKCksIHdoaWNoIHJldHVybnMgImlu
dCh4ICsgMC41KSIuCiAgICAgLy8gSWYgdGhlIGFic29sdXRlIGZvbnQgc2l6ZSBvbiBzY3JlZW4g
aXMgYmVsb3cgeD0wLjUsIGRvbid0IHJlbmRlciBhbnl0aGluZy4KICAgICByZXR1cm4gdGV4dFJl
bmRlcmVyLnNjYWxlZEZvbnQoKS5waXhlbFNpemUoKTsKIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBU
ZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAg
LCBkaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+
cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsK
IAotICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQor
ICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQo
KSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZShyZW5kZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFj
a3MoKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHBvc2l0aW9uT2Zm
c2V0Rm9yRGVjCiAgICAgcmV0dXJuIDAuMGY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgdGhp
Y2tuZXNzRm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgY29uc3QgRm9udCYgZm9udCkKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgdGhpY2tuZXNzRm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gRklYTUU6IEZvciBTVkcgRm9udHMg
d2UgbmVlZCB0byB1c2UgdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgPGZvbnQtZmFjZT4g
aWYgc3BlY2lmaWVkLgogICAgIC8vIENvbXBhdGlibGUgd2l0aCBCYXRpay9PcGVyYQpAQCAtNTM1
LDcgKzUzNSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAg
ICBSZW5kZXJTdHlsZSYgZGVjb3JhdGlvblN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxl
KCk7CiAKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICBGb250IHNjYWxlZEZvbnQ7
CisgICAgRm9udENhc2NhZGUgc2NhbGVkRm9udDsKICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpj
b21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlv
blN0eWxlLCBzY2FsaW5nRmFjdG9yLCBzY2FsZWRGb250KTsKICAgICBBU1NFUlQoc2NhbGluZ0Zh
Y3Rvcik7CiAKQEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
VGV4dFdpdGhTaGFkCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGlu
Z0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQm
IHNjYWxlZEZvbnQgPSByZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOwogICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CiAKICAgICBGbG9hdFBvaW50
IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIFNWR1Rl
eHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcodGV4dC0+dGV4dCgpKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
LSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpOwogCiAgICAgU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcgc3BhY2luZ0xheW91dChmb250KTsKICAgICBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUgYmFzZWxpbmVMYXlvdXQoZm9udCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIw
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZShjb25zdCBGb250JiBmb250KQorU1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpCiAgICAgOiBtX2ZvbnQoZm9udCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
aAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2Fk
ZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdSZW5k
ZXJTdHlsZTsKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgU1ZHVGV4dE1ldHJpY3M7CiBjbGFzcyBT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZSk7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lKGNvbnN0IEZvbnQmKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUoY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZsb2F0IGNhbGN1bGF0ZUJhc2VsaW5lU2hp
ZnQoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0KSBjb25z
dDsKICAgICBmbG9hdCBjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KGJvb2wgaXNWZXJ0
aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdDsKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBFQWxpZ25tZW50QmFzZWxpbmUgZG9t
aW5hbnRCYXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29u
c3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udCYg
bV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIgogCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3Ro
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlv
dXRFbmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKDAp
CiB7CkBAIC05OCw3ICs5OCw3IEBAIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpj
YWxjdWwKIAogICAgIGZsb2F0IHNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpICsga2Vy
bmluZzsKICAgICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBsYXN0Q2hhcmFjdGVyICYmIG1fZm9u
dC53b3JkU3BhY2luZygpKSB7Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoKmN1cnJl
bnRDaGFyYWN0ZXIpICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQorICAg
ICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYg
IUZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQogICAgICAgICAgICAg
c3BhY2luZyArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250
Q2FzY2FkZTsKIGNsYXNzIFNWR1JlbmRlclN0eWxlOwogY2xhc3MgU1ZHRWxlbWVudDsKIApAQCAt
MzIsMTMgKzMyLDEzIEBAIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdUZXh0TGF5b3V0RW5n
aW5lU3BhY2luZyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHVGV4dExheW91dEVuZ2lu
ZVNwYWNpbmcpOwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0
IEZvbnQmKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2FzY2Fk
ZSYpOwogCiAgICAgZmxvYXQgY2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0
LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCk7CiAgICAgZmxvYXQg
Y2FsY3VsYXRlQ1NTS2VybmluZ0FuZFNwYWNpbmcoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdF
bGVtZW50KiBsZW5ndGhDb250ZXh0LCBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3Rlcik7CiAK
IHByaXZhdGU6Ci0gICAgY29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBtX2ZvbnQ7CiAgICAgY29uc3QgVUNoYXIqIG1fbGFzdENoYXJhY3RlcjsKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDcgQEAgU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWRwogICAgIGZsb2F0
IHNjYWxpbmdGYWN0b3IgPSB0ZXh0UmVuZGVyZXIuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VS
VChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVu
ZGVyZXIuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0g
dGV4dFJlbmRlcmVyLnNjYWxlZEZvbnQoKTsKICAgICBpbnQgbGVuZ3RoID0gMDsKIAogICAgIC8v
IENhbGN1bGF0ZSB3aWR0aC9oZWlnaHQgdXNpbmcgdGhlIHNjYWxlZCBmb250LCBkaXZpZGUgdGhp
cyByZXN1bHQgYnkgdGhlIHNjYWxpbmdGYWN0b3IgYWZ0ZXJ3YXJkcy4KQEAgLTcwLDcgKzcwLDcg
QEAgVGV4dFJ1biBTVkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bgogICAgICAgICAgICAg
ICAgICwgc3R5bGUuZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGlzT3ZlcnJpZGUoc3R5
bGUudW5pY29kZUJpZGkoKSkgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAo
c3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHls
ZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBy
dW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KHRleHQpKTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtOTEsNyArOTEs
NyBAQCBTVkdUZXh0TWV0cmljcyBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoCiAKIFNWR1RleHRN
ZXRyaWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25l
ZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCwgY29uc3QgU3RyaW5nJiBn
bHlwaE5hbWUpCiB7Ci0gICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0g
dGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7
CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHQuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFT
U0VSVChzY2FsaW5nRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsOSArMTAwLDkgQEAgdm9pZCBTVkdUZXh0TWV0cmlj
c0J1aWxkZXI6OmluaXRpYWxpemVNZQogICAgIG1fY29tcGxleFN0YXJ0VG9DdXJyZW50TWV0cmlj
cyA9IFNWR1RleHRNZXRyaWNzKCk7CiAgICAgbV90b3RhbFdpZHRoID0gMDsKIAotICAgIGNvbnN0
IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0LnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgc2NhbGVkRm9udCA9IHRleHQuc2NhbGVkRm9udCgpOwogICAgIG1fcnVuID0gU1ZHVGV4
dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4odGV4dCk7Ci0gICAgbV9pc0NvbXBsZXhUZXh0ID0g
c2NhbGVkRm9udC5jb2RlUGF0aChtX3J1bikgPT0gRm9udDo6Q29tcGxleDsKKyAgICBtX2lzQ29t
cGxleFRleHQgPSBzY2FsZWRGb250LmNvZGVQYXRoKG1fcnVuKSA9PSBGb250Q2FzY2FkZTo6Q29t
cGxleDsKIAogICAgIGlmIChtX2lzQ29tcGxleFRleHQpCiAgICAgICAgIG1fc2ltcGxlV2lkdGhJ
dGVyYXRvciA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlu
bGluZSBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udAogICAgIHJldHVybiBzdmdGb250RGF0YTsK
IH0KIAotZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NW
R0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29u
c3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAorZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFt
ZSkgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KCZmb250LCBydW4pOwogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAgICB9CiB9CiAKLXN0YXRpYyBHbHlwaERhdGEgbWlz
c2luZ0dseXBoRm9yRm9udChjb25zdCBGb250JiBmb250KQorc3RhdGljIEdseXBoRGF0YSBtaXNz
aW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwog
ICAgIGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQpAQCAtMzAxLDcgKzMwMSw3IEBA
IHN0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb24KICAgICByZXR1cm4gR2x5
cGhEYXRhKGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250RGF0YSk7CiB9
CiAKLUdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMy
IGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYg
YWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCitHbHlw
aERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIg
Y2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkKIHsKICAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCBtaXJyb3IsIEF1dG9WYXJpYW50KTsKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkKQEAg
LTM0Miw3ICszNDIsNyBAQCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6Omds
CiAgICAgLy8gVGhlIGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBGb3Ig
c2ltcGxpY2l0eSB3ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250ZXh0
LXNlbnNpdGl2ZWx5LgogICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9uID0g
Zm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICBmYWxsYmFja0Rlc2NyaXB0aW9uLnNldEZhbWls
aWVzKFZlY3RvcjxBdG9taWNTdHJpbmc+IHsgc2Fuc1NlcmlmRmFtaWx5IH0pOwotICAgIEZvbnQg
ZmFsbGJhY2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBm
b250LndvcmRTcGFjaW5nKCkpOworICAgIEZvbnRDYXNjYWRlIGZhbGxiYWNrRm9udChmYWxsYmFj
a0Rlc2NyaXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygpKTsK
ICAgICBmYWxsYmFja0ZvbnQudXBkYXRlKGZvbnQuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgcmV0
dXJuIGZhbGxiYWNrRm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBtaXJyb3Is
IEF1dG9WYXJpYW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dF9oCiAjZGVmaW5lIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gK
IAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsOSArNDIsOSBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KICAgICB2b2lkIHNldEFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBh
aW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7IH0KIAotICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hh
cmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZh
bmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRD
YXNjYWRlJiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRy
YXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5
cGhOYW1lKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2lu
Z1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0Nv
bnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3Im
LCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRl
ICJSb290SW5saW5lQm94LmgiCiAKQEAgLTg5LDcgKzg5LDcgQEAgR2x5cGhPdmVyZmxvdyB2aXN1
YWxPdmVyZmxvd0ZvckRlY29yYXRpbwogICAgIGZsb2F0IHdhdnlPZmZzZXQ7CiAgICAgICAgIAog
ICAgIFRleHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlID0gbGluZVN0eWxlLnRleHRE
ZWNvcmF0aW9uU3R5bGUoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUuZm9udCgpLmZv
bnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUu
Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiAgICAgR2x5cGhPdmVy
ZmxvdyBvdmVyZmxvd1Jlc3VsdDsKICAgICAKICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRl
eHREZWNvcmF0aW9uU3R5bGVXYXZ5KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9Jbmxp
bmVUZXh0Qm94U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9Jbmxp
bmVUZXh0Qm94U3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvSW5saW5lVGV4dEJveFN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgSW5saW5lVGV4dEJveFN0eWxlX2gKICNkZWZpbmUgSW5saW5lVGV4dEJveFN0eWxl
X2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFJlZjxSZW5kZXJTdHlsZT4g
cmVzb2x2ZUZvckRvY3VtZW50KGNvbnMKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IgPSBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSA/IGRvY3VtZW50LnN0
eWxlUmVzb2x2ZXJJZkV4aXN0cygpLT5mb250U2VsZWN0b3IoKSA6IG51bGxwdHI7Ci0gICAgZG9j
dW1lbnRTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgZG9jdW1l
bnRTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAg
cmV0dXJuIGRvY3VtZW50U3R5bGU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVUcmVlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OCw3ICs5NzgsNyBA
QCB2b2lkIHJlc29sdmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhCiAgICAgICAgIGlmIChT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhp
c3RzKCk7CiAgICAgICAgICAgICBpZiAoc2V0dGluZ3MtPmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0
b2dyYXBocygpICYmIHN0eWxlUmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHls
ZS5nZXQoKS5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKHN0
eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0eWxl
OjpDaGFuZ2UgZG9jdW1lbnRDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRTdHlsZS5n
ZXQoKSwgZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4MCw5IEBAIHZvaWQg
Y29tcHV0ZU5vcm1hbGl6ZWRTcGFjZXMoY29uc3QgVGV4dFIKICAgICBpZiAobm9ybWFsaXplZFNw
YWNlc1N0cmluZ0NhY2hlLmxlbmd0aCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihydW4uY2hh
cmFjdGVyc0xlbmd0aCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChydW4uaXM4Qml0KCkp
Ci0gICAgICAgIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhydW4uY2hhcmFjdGVyczgoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAg
IG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFj
ZXMocnVuLmNoYXJhY3RlcnM4KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwogICAgIGVsc2UK
LSAgICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udDo6bm9ybWFsaXplU3Bh
Y2VzKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAg
IG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFj
ZXMocnVuLmNoYXJhY3RlcnMxNigpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBpZiAo
bWlycm9yKQogICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBjcmVhdGVTdHJp
bmdXaXRoTWlycm9yZWRDaGFyYWN0ZXJzKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSEtlcm5F
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0Zv
bnRGYWNlU3JjRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2Niw4IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBAIC00NjMsMTIgKzQ2
MywxMiBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91CiAKIHZvaWQg
V2ViUHJvY2Vzczo6c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCBhbHdheXNV
c2VDb21wbGV4VGV4dCkKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRDb2RlUGF0aChhbHdheXNV
c2VDb21wbGV4VGV4dCA/IFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250OjpB
dXRvKTsKKyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29t
cGxleFRleHQgPyBXZWJDb3JlOjpGb250Q2FzY2FkZTo6Q29tcGxleCA6IFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpBdXRvKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRTaG91bGRVc2VGb250U21v
b3RoaW5nKGJvb2wgdXNlRm9udFNtb290aGluZykKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRT
aG91bGRVc2VTbW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7CisgICAgV2ViQ29yZTo6Rm9udENh
c2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyh1c2VGb250U21vb3RoaW5nKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgbGFuZ3VhZ2VzKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MDIsNyArODAyLDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAog
ICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92
ZTsKICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmZnJhbWUsIG5vZGVUb1JlbW92ZSkpIHsKLSAgICAgICAgICAgIENURm9udFJl
ZiBmb250ID0gc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAg
ICAgICAgICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0Q1RGb250KCk7CiAgICAgICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0
cmFpdHMgPSBmb250ID8gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgOiAwOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29h
Lm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlByb2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29y
a1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0ZvbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTG9jYWxpemVkU3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KQEAgLTE5NCw3ICsxOTQs
NyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByCiAgICAgbV9jb21w
b3NpdGluZ1JlbmRlclNlcnZlclBvcnQgPSBXVEY6Om1vdmUocGFyYW1ldGVycy5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nUG9ydCk7CiAgICAgbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCA9IHBhcmFt
ZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQ7CiAgICAgbV9zaG91bGRGb3JjZVNjcmVlbkZv
bnRTdWJzdGl0dXRpb24gPSBwYXJhbWV0ZXJzLnNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1
dGlvbjsKLSAgICBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGln
YXR1cmVzIDogMCk7CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCA/
IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKIAogICAgIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
UmVsaWVmTG9nZ2VyOjpzZXRMb2dnaW5nRW5hYmxlZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU1l
bW9yeVByZXNzdXJlUmVsaWVmTG9nZ2luZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKIAog
I2ltcG9ydCA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9u
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KQEAgLTkyLDcgKzkyLDcgQEAgLSAodm9p
ZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IAogICAgICAgICBpZiAoIWZsaXBwZWQp
CiAgICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKIAotICAg
ICAgICBGb250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRT
aXplXSksICFbbnNDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSwgZm9udFNtb290aGluZ0lzQWxs
b3dlZCA/IEF1dG9TbW9vdGhpbmcgOiBBbnRpYWxpYXNlZCk7CisgICAgICAgIEZvbnRDYXNjYWRl
IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFb
bnNDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSwgZm9udFNtb290aGluZ0lzQWxsb3dlZCA/IEF1
dG9TbW9vdGhpbmcgOiBBbnRpYWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5k
YXRhKCksIGxlbmd0aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkBA
IC0xMzgsNyArMTM4LDcgQEAgLSAoZmxvYXQpX3dlYl93aWR0aFdpdGhGb250OihOU0ZvbnQgKilm
bwogICAgIFtzZWxmIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAKICAgICBpZiAoY2Fu
VXNlRmFzdFJlbmRlcmVyKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgRm9udCB3
ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAg
ICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9u
dCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJh
d2luZ1RvU2NyZWVuXSk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0
aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogICAgICAgICByZXR1cm4g
d2ViQ29yZUZvbnQud2lkdGgocnVuKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
U3RyaW5nVHJ1bmNhdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViU3RyaW5nVHJ1bmNhdG9yLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMjEg
KzI5LDIxIEBACiAjaW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKIAogI2ltcG9ydCAiV2Vi
U3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udFBsYXRmb3JtRGF0YS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4KICNpbXBvcnQgPHJ1bnRpbWUv
SW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNpbXBv
cnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCi1zdGF0aWMgV2ViQ29yZTo6Rm9udCYgZm9udEZy
b21OU0ZvbnQoTlNGb250ICpmb250KQorc3RhdGljIFdlYkNvcmU6OkZvbnRDYXNjYWRlJiBmb250
RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
dGFpblB0cjxOU0ZvbnQ+PiBjdXJyZW50TlNGb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxXZWJDb3JlOjpGb250PiBjdXJyZW50Rm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
V2ViQ29yZTo6Rm9udENhc2NhZGU+IGN1cnJlbnRGb250OwogICAgIGlmIChbZm9udCBpc0VxdWFs
OmN1cnJlbnROU0ZvbnQuZ2V0KCkuZ2V0KCldKQogICAgICAgICByZXR1cm4gY3VycmVudEZvbnQ7
CiAgICAgY3VycmVudE5TRm9udC5nZXQoKSA9IGZvbnQ7Ci0gICAgY3VycmVudEZvbnQuZ2V0KCkg
PSBXZWJDb3JlOjpGb250KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9p
bnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdU
b1NjcmVlbl0pOworICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9udENhc2NhZGUo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNH
cmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAg
cmV0dXJuIGN1cnJlbnRGb250OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKIAogICAg
ICAgICBQb3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5pdGVtU3R5bGUoaSk7CiAgICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgaWYgKHN0eWxlLmZv
bnQoKSAhPSBGb250KCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLmZvbnQoKSAhPSBGb250Q2FzY2Fk
ZSgpKSB7CiAgICAgICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKICAgICAgICAg
ICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkwLDcgKzE0OTAsNyBAQCAtIChCT09MKV92aWV3Q2xh
c3M6KENsYXNzICopdkNsYXNzIGFuZFJlCiAKICsgKHZvaWQpX3NldEFsd2F5c1VzZXNDb21wbGV4
VGV4dENvZGVQYXRoOihCT09MKWYKIHsKLSAgICBGb250OjpzZXRDb2RlUGF0aChmID8gRm9udDo6
Q29tcGxleCA6IEZvbnQ6OkF1dG8pOworICAgIEZvbnRDYXNjYWRlOjpzZXRDb2RlUGF0aChmID8g
Rm9udENhc2NhZGU6OkNvbXBsZXggOiBGb250Q2FzY2FkZTo6QXV0byk7CiB9CiAKICsgKHZvaWQp
X3NldEFsbG93c1JvdW5kaW5nSGFja3M6KEJPT0wpYWxsb3dzUm91bmRpbmdIYWNrcwpAQCAtMzE2
OCwxMiArMzE2OCwxMiBAQCAtIChCT09MKV9kYXNoYm9hcmRCZWhhdmlvcjooV2ViRGFzaGJvYXJk
CiAKICsgKHZvaWQpX3NldFNob3VsZFVzZUZvbnRTbW9vdGhpbmc6KEJPT0wpZgogewotICAgIEZv
bnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhmKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0U2hvdWxk
VXNlU21vb3RoaW5nKGYpOwogfQogCiArIChCT09MKV9zaG91bGRVc2VGb250U21vb3RoaW5nCiB7
Ci0gICAgcmV0dXJuIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpOworICAgIHJldHVybiBGb250
Q2FzY2FkZTo6c2hvdWxkVXNlU21vb3RoaW5nKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpA
QCAtNDcxMCw3ICs0NzEwLDcgQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgZ3JhbW1hckNoZWNr
aW5nRW5hYmxlZCA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYkdyYW1tYXJDaGVja2luZ0VuYWJs
ZWRdOwogI2VuZGlmCiAKLSAgICBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhb
ZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVm
YXVsdERlZmF1bHRzS2V5XSA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKKyAgICBGb250Q2Fz
Y2FkZTo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xGb3JLZXk6
V2ViS2l0S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tleV0gPyBL
ZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGF1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCA9IFtzZWxmIF9zaG91bGRBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbkJlRW5hYmxlZF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244685</attachid>
            <date>2015-01-15 02:53:15 -0800</date>
            <delta_ts>2015-01-15 03:31:23 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-6.patch</filename>
            <type>text/plain</type>
            <size>400721</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJDaHJvbWUuaCIKICNp
bXBvcnQgIkNocm9tZUNsaWVudC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENh
c2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgog
I2ltcG9ydCAiRnJhbWVWaWV3LmgiCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZv
bnQoYXR0clN0cmluZywgc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBkZWNvciA9IHN0eWxl
LnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAmIChUZXh0RGVjb3Jh
dGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAhPSAwKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNp
bXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkNv
bnRleHRNZW51Q29udHJvbGxlci5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENh
c2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBv
cnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCi0jaW1wb3J0
ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJIVE1MQW5jaG9y
RWxlbWVudC5oIgpAQCAtODQ4LDcgKzg0OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3R5bGUoTlMKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmli
dXRlLCBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsK
KyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5
Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
Z2V0TlNGb250KCksIHJhbmdlKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3Jl
Z3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAi
RE9NUHJpdmF0ZS5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiRHJh
Z0ltYWdlLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2lt
cG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFt
ZXMuaCIKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChOU0ZvbnQgKilfZm9udAogICAgIGF1dG8gcmVu
ZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKIH0KICNlbHNlCiAt
IChDVEZvbnRSZWYpX2ZvbnQKQEAgLTY3Nyw3ICs2NzcsNyBAQCAtIChDVEZvbnRSZWYpX2ZvbnQK
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJl
ci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
Q1RGb250KCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01VSUtpdEV4dGVuc2lvbnMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkZsb2F0UG9pbnQuaCIKLSNpbXBv
cnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVj
dGlvbi5oIgogI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJodG1sZWRpdGlu
Zy5oIgpAQCAtNzEsNyArNzEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHVzaW5n
IFdlYkNvcmU6OkZsb2F0UG9pbnQ7Ci11c2luZyBXZWJDb3JlOjpGb250OwordXNpbmcgV2ViQ29y
ZTo6Rm9udENhc2NhZGU7CiB1c2luZyBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ7CiB1c2luZyBX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OwogdXNpbmcgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDQsOCAr
MTUwNCw4IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQcm9wZXJ0eUlEKEMKIHN0YXRp
YyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5mb250KCkuZmFtaWx5Q291
bnQoKTsgKytpKQotICAgICAgICBsaXN0LmdldCgpLmFwcGVuZCh2YWx1ZUZvckZhbWlseShzdHls
ZS0+Zm9udCgpLmZhbWlseUF0KGkpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAgICAgbGlzdC5nZXQo
KS5hcHBlbmQodmFsdWVGb3JGYW1pbHkoc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5QXQoaSkp
KTsKICAgICByZXR1cm4gbGlzdDsKIH0KIApAQCAtMjU0NSw3ICsyNTQ1LDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhYwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V29yZEJyZWFrOgogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT53b3JkQnJlYWsoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2lu
ZzoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250
KCkud29yZFNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKSwgc3R5
bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6CiAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm92ZXJmbG93V3JhcCgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ291bnRlci5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgog
I2luY2x1ZGUgIlJHQkNvbG9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmPExvYWRGb250Q2FsbGJhY2s+KG5ldyBMb2FkRm9udENhbGxiYWNrKG51bUxvYWRp
bmcsIGZvbnRMb2FkZXIsIGxvYWRDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+IGNyZWF0ZUZyb21QYXJhbXMo
Y29uc3QgRGljdGlvbmFyeSYgcGFyYW1zLCBGb250TG9hZGVyJiBmb250TG9hZGVyLCBjb25zdCBG
b250JiBmb250KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+IGNyZWF0
ZUZyb21QYXJhbXMoY29uc3QgRGljdGlvbmFyeSYgcGFyYW1zLCBGb250TG9hZGVyJiBmb250TG9h
ZGVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKICAgICB7CiAgICAgICAgIFJlZlB0cjxWb2lk
Q2FsbGJhY2s+IG9uc3VjY2VzczsKICAgICAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gb25lcnJv
cjsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250KGNvbnN0IERp
Y3Rpb25hCiAgICAgU3RyaW5nIGZvbnRTdHJpbmc7CiAgICAgaWYgKCFwYXJhbXMuZ2V0KCJmb250
IiwgZm9udFN0cmluZykpCiAgICAgICAgIHJldHVybjsKLSAgICBGb250IGZvbnQ7CisgICAgRm9u
dENhc2NhZGUgZm9udDsKICAgICBpZiAoIXJlc29sdmVGb250U3R5bGUoZm9udFN0cmluZywgZm9u
dCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8TG9hZEZvbnRDYWxsYmFjaz4gY2FsbGJh
Y2sgPSBMb2FkRm9udENhbGxiYWNrOjpjcmVhdGVGcm9tUGFyYW1zKHBhcmFtcywgKnRoaXMsIGZv
bnQpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRm9udExvYWRlcjo6bG9hZEZvbnQoY29uc3Qg
RGljdGlvbmEKIGJvb2wgRm9udExvYWRlcjo6Y2hlY2tGb250KGNvbnN0IFN0cmluZyYgZm9udFN0
cmluZywgY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogVGhlIHNlY29uZCBwYXJhbWV0
ZXIgKHRleHQpIGlzIGlnbm9yZWQuCi0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZv
bnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJpbmcsIGZvbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnQuZmFtaWx5
Q291bnQoKTsgaSsrKSB7CkBAIC0yODEsNyArMjgxLDcgQEAgc3RhdGljIHZvaWQgYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKAogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3Vy
cmVudFN0eWxlKGlkLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShpZCkuZ2V0KCkp
OwogfQogCi1ib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiBm
b250U3RyaW5nLCBGb250JiBmb250KQorYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxl
KGNvbnN0IFN0cmluZyYgZm9udFN0cmluZywgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8g
SW50ZXJwcmV0IGZvbnRTdHJpbmcgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSAnZm9udCcgYXR0cmli
dXRlIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC4KICAgICBSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
KTsKQEAgLTMwMiw3ICszMDIsNyBAQCBib29sIEZvbnRMb2FkZXI6OnJlc29sdmVGb250U3R5bGUo
Y29uc3QgCiAKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRlZmF1bHRGb250RGVzY3Jp
cHRpb24pOwogCi0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGUtPmZvbnQoKS5mb250U2Vs
ZWN0b3IoKSk7CisgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHN0eWxlLT5mb250Q2Fz
Y2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVy
dHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIgPSBtX2RvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CkBAIC0zMTksNyArMzE5
LDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IAogICAgIHN0eWxl
UmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShz
dHlsZVJlc29sdmVyLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlKTsKIAotICAg
IGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKTsK
ICAgICBmb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLmZvbnRTZWxlY3RvcigpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBjbGFzcyBDU1NGb250RmFjZVNvdXJjZTsKIGNsYXNzIERpY3Rpb25hcnk7
CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRD
YXNjYWRlOwogY2xhc3MgTG9hZEZvbnRDYWxsYmFjazsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVuZGluZ0V2
ZW50c1RpbWVyRmlyZWQoKSB7IGZpcmVQZW5kaW5nRXZlbnRzKCk7IH0KICAgICB2b2lkIHNjaGVk
dWxlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgZmlyZVBlbmRpbmdFdmVudHMo
KTsKLSAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udCYpOworICAg
IGJvb2wgcmVzb2x2ZUZvbnRTdHlsZShjb25zdCBTdHJpbmcmLCBGb250Q2FzY2FkZSYpOwogCiAg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJn
ZXREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRo
b3JTdHlsZVNoZQogewogICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoZmly
c3ROZXcsIHN0eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQoKSwgbV9pbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzLCB0aGlzKTsKICAgICBpZiAoYXV0byByZW5kZXJWaWV3ID0gZG9jdW1lbnQoKS5yZW5kZXJW
aWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRh
dGUoZm9udFNlbGVjdG9yKCkpOwogCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikK
ICAgICB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIoKS0+cmVzb2x2ZSgpOwpAQCAtNzQ4LDcgKzc0OCw3
IEBAIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3IKICAgICAgICAgaWYg
KCFzX3N0eWxlTm90WWV0QXZhaWxhYmxlKSB7CiAgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlID0gJlJlbmRlclN0eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7CiAgICAgICAgICAgICBz
X3N0eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5KE5PTkUpOwotICAgICAgICAgICAgc19z
dHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAg
ICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2Zv
bnRTZWxlY3Rvcik7CiAgICAgICAgIH0KICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5zZXRI
YXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CiAgICAgICAgIHJldHVybiAqc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsKQEAgLTEwMzEsOSArMTAzMSw5IEBAIFJlZjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6ZGVmYXVsdFMKICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0
aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgog
ICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCkpIHsKICAgICAg
ICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUo
KS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUo
KS0+Zm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgIG1fc3RhdGUu
c3R5bGUoKS0+Zm9udENhc2NhZGUoKS51cGRhdGUobnVsbHB0cik7CiAKICAgICByZXR1cm4gbV9z
dGF0ZS50YWtlU3R5bGUoKTsKIH0KQEAgLTE0ODQsNyArMTQ4NCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6dXBkYXRlRm9udCgpCiAgICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxl
LCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwg
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0
eWxlKTsKLSAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgc3R5
bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKICAgICBpZiAobV9zdGF0
ZS5mb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgc3R5bGUtPnNldEhhc1ZpZXdw
b3J0VW5pdHModHJ1ZSk7CiAgICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTIxODUsNyArMjE4NSw3IEBAIGlubGluZSBi
b29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXQKIAogICAgIC8vIENoaW5lc2UgYW5kIEph
cGFuZXNlIGxhY2sgd29yZCBib3VuZGFyeSBtYXJrcywgYW5kIHRoZXJlIGlzIG5vIGNsZWFyIGFn
cmVlbWVudCBvbiB3aGF0IGNvbnN0aXR1dGVzCiAgICAgLy8gYSB3b3JkLCBzbyB0cmVhdCB0aGUg
cG9zaXRpb24gYmVmb3JlIGFueSBDSksgY2hhcmFjdGVyIGFzIGEgd29yZCBzdGFydC4KLSAgICBp
ZiAoRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3RlcikpCisgICAgaWYg
KEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGZpcnN0Q2hhcmFjdGVyKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzaXplX3Qgd29yZEJyZWFrU2VhcmNoU3RhcnQgPSBz
dGFydCArIGxlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QAogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKICNpbXBv
cnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXIuaCIKICNp
bXBvcnQgIkhUTUxFbGVtZW50LmgiCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZv
cm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQu
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNG
b250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAq
X2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0
Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVu
dC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5k
ZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgp
OwogfQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICplZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9y
S2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAg
ICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVn
ZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0
cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBz
dHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKV0gZm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9u
dE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpO
U0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgp
IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAg
IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJI
VE1MQ29udmVydGVyLmgiCkBAIC0yMTMsNyArMjEzLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IEVkaXRvcjo6Zm9udEZvclNlbAogCiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiByZXN1
bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQgPSAm
c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZz
dHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKIAogICAgICAgICBpZiAobm9k
ZVRvUmVtb3ZlKSB7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAtMjM1LDcgKzIz
NSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAg
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMs
IGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9u
dCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAg
ICAgICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICAgICAgZm9udCA9ICZwcmltYXJ5Rm9u
dDsKICAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CkBAIC0yNTcs
NyArMjU3LDcgQEAgTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9yUwogCiAg
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGlj
dGlvbmFyeV07CiAgICAgCi0gICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CiAgICAgaWYgKGZvbnQp
CiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OihpZClmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJEb2N1bWVudExv
YWRlci5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCiAjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKLSNp
bXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5o
IgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpA
QCAtMTE1LDcgKzExNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JT
ZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250KCkucHJp
bWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKICAgICAg
ICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04pOwpAQCAtMTM1
LDcgKzEzNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAg
ICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5k
ZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmlt
YXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICAgICAgZm9udCA9ICZwcmlt
YXJ5Rm9udDsKICAgICAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CkBA
IC0xNjAsOCArMTYwLDggQEAgTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9y
UwogICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSAhPSAwKQogICAgICAgICBbcmVzdWx0IHNl
dE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
IAotICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQot
ICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCisgICAgICAgIFty
ZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdl
dE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKIAogICAgIGlmIChzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSAmJiBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IENvbG9yOjpibGFj
aykKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEwNSw3ICsyMTA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZvbnQoYwogICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRl
ZmF1bHRGb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIG5ld1N0eWxlLT5mb250KCkudXBk
YXRlKG5ld1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOworICAgIG5ld1N0eWxlLT5mb250
Q2FzY2FkZSgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7
CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBz
dHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gY2FudmFzKCktPmRvY3Vt
ZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMjEyMiw3ICsyMTIyLDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgIHN0eWxlUmVzb2x2ZXIudXBk
YXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udCgpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9
IG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpOwogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51
cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAgICAgbW9kaWZpYWJsZVN0YXRl
KCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOwogICAgIHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9y
KCktPnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKCZtb2RpZmlhYmxlU3RhdGUoKSk7
CkBAIC0yMjg3LDcgKzIyODcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d1RleHRJCiAgICAgaWYgKGZpbGwgJiYgZ3JhZGllbnQgJiYgZ3JhZGllbnQtPmlzWmVyb1NpemUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IGFjY2Vzc0ZvbnQo
KTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGFjY2Vzc0ZvbnQoKTsKICAgICBjb25z
dCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAKICAgICBT
dHJpbmcgbm9ybWFsaXplZFRleHQgPSB0ZXh0OwpAQCAtMjM3MiwxMCArMjM3MiwxMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgICAgICAgICBtYXNrSW1h
Z2VDb250ZXh0LT50cmFuc2xhdGUobG9jYXRpb24ueCgpIC0gbWFza1JlY3QueCgpLCBsb2NhdGlv
bi55KCkgLSBtYXNrUmVjdC55KCkpOwogICAgICAgICAgICAgLy8gV2UgZHJhdyB3aGVuIGZvbnRX
aWR0aCBpcyAwIHNvIGNvbXBvc2l0aW5nIG9wZXJhdGlvbnMgKGVnLCBhICJjb3B5IiBvcCkgc3Rp
bGwgd29yay4KICAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgo
Zm9udFdpZHRoID4gMCA/ICh3aWR0aCAvIGZvbnRXaWR0aCkgOiAwKSwgMSkpOwotICAgICAgICAg
ICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIEZsb2F0UG9p
bnQoMCwgMCksIEZvbnQ6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIEZsb2F0UG9pbnQo
MCwgMCksIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1Jl
Y3QueCgpLCAtbWFza1JlY3QueSgpKTsKLSAgICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZv
bnROb3RSZWFkeSk7CisgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQo
Zm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5KTsKICAgICAgICAgfQogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqYyk7CkBAIC0yMzk4LDE1ICsyMzk4LDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKIAogICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVN
b2RlKHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGJlZ2luQ29tcG9zaXRl
TGF5ZXIoKTsKLSAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9u
LCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlU
ZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZv
bnROb3RSZWFkeSk7CiAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAgIGRpZERy
YXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlKCkubV9nbG9iYWxDb21wb3Np
dGUgPT0gQ29tcG9zaXRlQ29weSkgewogICAgICAgICBjbGVhckNhbnZhcygpOwotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGMtPmRyYXdC
aWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSk7CisgICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlv
biwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBkaWRE
cmF3KHRleHRSZWN0KTsKICAgICB9CiB9CkBAIC0yNDI2LDcgKzI0MjYsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6aW5mbGF0ZVN0CiAgICAgcmVjdC5pbmZsYXRlKGRlbHRhKTsK
IH0KIAotY29uc3QgRm9udCYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nlc3NGb250KCkK
K2NvbnN0IEZvbnRDYXNjYWRlJiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFjY2Vzc0ZvbnQo
KQogewogICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAj
aW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtMjcwLDcgKzI3MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIAogICAgICAgICBTdHJpbmcgbV91bnBhcnNl
ZEZvbnQ7Ci0gICAgICAgIEZvbnQgbV9mb250OworICAgICAgICBGb250Q2FzY2FkZSBtX2ZvbnQ7
CiAgICAgICAgIGJvb2wgbV9yZWFsaXplZEZvbnQ7CiAgICAgfTsKIApAQCAtMzA4LDcgKzMwOCw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0
ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIGZsb2F0IG1heFdpZHRoID0gMCwgYm9v
bCB1c2VNYXhXaWR0aCA9IGZhbHNlKTsKIAotICAgIGNvbnN0IEZvbnQmIGFjY2Vzc0ZvbnQoKTsK
KyAgICBjb25zdCBGb250Q2FzY2FkZSYgYWNjZXNzRm9udCgpOwogCiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQogICAgIHZvaWQgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1lbmNs
b3NlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TE1lbmNsb3NlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L21hdGhtbC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgU3RyaW5nIE1hdGhNTE1lbmNsb3NlRWxlbWVudDo6bG9uZ0RpdkxlZgogICAg
IFRleHRSdW4gcnVuKGNsb3NpbmdCcmFjZS5pbXBsKCksIGNsb3NpbmdCcmFjZS5sZW5ndGgoKSk7
CiAgICAgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAobm9kZSAmJiBub2RlLT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBub2Rl
LT5yZW5kZXJlcigpLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgIHBhZGRpbmcuYXBw
ZW5kTnVtYmVyKGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIHBhZGRpbmcuYXBwZW5kTGl0ZXJh
bCgicHgiKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250R2VuZXJpY0ZhbWlsaWVzLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJl
SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUg
IkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51
U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVT
dHlsZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnVTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFBv
cHVwTWVudVN0eWxlX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgUG9w
dXBNZW51U2l6ZU1pbmkKICAgICB9OwogCi0gICAgUG9wdXBNZW51U3R5bGUoY29uc3QgQ29sb3Im
IGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBGb250JiBmb250LCBi
b29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5j
ZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgYm9vbCBo
YXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRDb2xvclR5cGUgYmFja2dyb3VuZENv
bG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5cGUgbWVudVR5cGUg
PSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVwTWVudVNpemVOb3Jt
YWwpCisgICAgUG9wdXBNZW51U3R5bGUoY29uc3QgQ29sb3ImIGZvcmVncm91bmQsIGNvbnN0IENv
bG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgYm9vbCB2aXNpYmxlLCBi
b29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFwcGVhcmFuY2UsIExlbmd0aCB0ZXh0
SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlv
bk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tncm91bmRDb2xvclR5cGUgPSBEZWZh
dWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1lbnVUeXBlID0gU2VsZWN0UG9wdXAs
IFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVTaXplTm9ybWFsKQogICAgICAgICA6
IG1fZm9yZWdyb3VuZENvbG9yKGZvcmVncm91bmQpCiAgICAgICAgICwgbV9iYWNrZ3JvdW5kQ29s
b3IoYmFja2dyb3VuZCkKICAgICAgICAgLCBtX2ZvbnQoZm9udCkKQEAgLTYxLDcgKzYxLDcgQEAg
cHVibGljOgogCiAgICAgY29uc3QgQ29sb3ImIGZvcmVncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fZm9yZWdyb3VuZENvbG9yOyB9CiAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9Ci0gICAgY29uc3QgRm9udCYg
Zm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICBib29sIGlzRGlzcGxheU5vbmUoKSBjb25zdCB7
IHJldHVybiBtX2lzRGlzcGxheU5vbmU7IH0KICAgICBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNl
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0QXBwZWFyYW5jZTsgfQpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENvbG9yIG1fZm9yZWdyb3VuZENvbG9yOwogICAg
IENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotICAgIEZvbnQgbV9mb250OworICAgIEZvbnRDYXNj
YWRlIG1fZm9udDsKICAgICBib29sIG1fdmlzaWJsZTsKICAgICBib29sIG1faXNEaXNwbGF5Tm9u
ZTsKICAgICBib29sIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1MZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29u
c3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKQEAg
LTQyLDcgKzQyLDcgQEAgTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYQog
ICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0KSBjb25z
dAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29udHJvbFN0YXRlcy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlICJMZW5ndGhTaXplLmgiCkBAIC03MSw3
ICs3MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDU1Mgc3lzdGVtIGNvbG9ycyBhbmQgZm9u
dHMKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKFRoZW1lQ29sb3IpIGNvbnN0IHsgcmV0
dXJuIENvbG9yKCk7IH0KLSAgICB2aXJ0dWFsIEZvbnQgc3lzdGVtRm9udChUaGVtZUZvbnQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0IHsgcmV0dXJuIEZvbnQoKTsgfQorICAgIHZpcnR1YWwgRm9u
dENhc2NhZGUgc3lzdGVtRm9udChUaGVtZUZvbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IHsg
cmV0dXJuIEZvbnRDYXNjYWRlKCk7IH0KICAgICAKICAgICAvLyBIb3cgZmFzdCB0aGUgY2FyZXQg
YmxpbmtzIGluIHRleHQgZmllbGRzLgogICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRl
cnZhbCgpIGNvbnN0IHsgcmV0dXJuIDAuNTsgfQpAQCAtODIsMTcgKzgyLDE3IEBAIHB1YmxpYzoK
ICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29udHJv
bHMuCiAgICAgCiAgICAgLy8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVzdWx0IHNob3VsZCBoYXZl
IGEgem9vbWVkIGZvbnQgc2l6ZS4KLSAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9s
Rm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgLyp6b29tRmFjdG9yKi8p
IGNvbnN0IHsgcmV0dXJuIGZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIEZv
bnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNj
cmlwdGlvbigpOyB9CiAgICAgCiAgICAgLy8gVGhlIHNpemUgaGVyZSBpcyBpbiB6b29tZWQgY29v
cmRpbmF0ZXMgYWxyZWFkeS4gIElmIGEgbmV3IHNpemUgaXMgcmV0dXJuZWQsIGl0IGFsc28gbmVl
ZHMgdG8gYmUgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBj
b250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmIHpv
b21lZFNpemUsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXpl
OyB9CisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IC8qem9v
bUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9CiAgICAgCiAgICAgLy8gUmV0
dXJucyB0aGUgbWluaW11bSBzaXplIGZvciBhIGNvbnRyb2wgaW4gem9vbWVkIGNvb3JkaW5hdGVz
LiAgCi0gICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udCYsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBMZW5n
dGhTaXplKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCkpOyB9CisgICAgdmlydHVh
bCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENh
c2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShM
ZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQogICAgIAogICAgIC8vIEFsbG93
cyB0aGUgdGhlbWUgdG8gbW9kaWZ5IHRoZSBleGlzdGluZyBwYWRkaW5nL2JvcmRlci4KLSAgICB2
aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYs
IGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250
JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Owor
ICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdDsKICAgICAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB3aGl0ZXNwYWNl
OiBwcmUgc2hvdWxkIGJlIGZvcmNlZCBvbiBhbHdheXMuCiAgICAgdmlydHVhbCBib29sIGNvbnRy
b2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVu
dDsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
Rm9udENhY2hlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIK
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLXVzaW5nIG5hbWVz
cGFjZSBVbmljb2RlOwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gYWxsb3cgY29tcGlsYXRpb24g
b2YgT3duUHRyPFRleHRMYXlvdXQ+IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNj
ZXNzIHRvIHRoZSBUZXh0TGF5b3V0IGNsYXNzIGRlZmluaXRpb24KLXRlbXBsYXRlIDw+IHZvaWQg
ZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCog
cHRyKQotewotICAgIFdlYkNvcmU6OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOwotfQotCi19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9y
QWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4pOwotCi1jb25zdCB1aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFj
dGVyVGFibGVbMjU2XSA9IHsKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQq
LywgMSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDEgLyo/Ki8sCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMSAvKm5v
LWJyZWFrIHNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi19OwotCi1zdGF0aWMgYm9vbCBpc0RyYXduV2l0aFNW
R0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKQotewotICAgIHJldHVybiBydW4ucmVuZGVyaW5nQ29u
dGV4dCgpOwotfQotCi1zdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+
KiBzZXQ7Ci0gICAgaWYgKCFzZXQpIHsKLSAgICAgICAgc2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPjsKLSAgICAgICAgc2V0LT5hZGQoIk1TIFBHb3RoaWMiKTsKLSAgICAgICAgVUNoYXIg
dW5pY29kZU5hbWVNU1BHb3RoaWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZGMzAs
IDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21p
Y1N0cmluZyh1bmljb2RlTmFtZU1TUEdvdGhpYywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFt
ZU1TUEdvdGhpYykpKTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgUE1pbmNobyIpOwotICAgICAg
ICBVQ2hhciB1bmljb2RlTmFtZU1TUE1pbmNob1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAs
IDB4RkYzMCwgMHg2NjBFLCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmco
dW5pY29kZU5hbWVNU1BNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU1BNaW5j
aG8pKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIEdvdGhpYyIpOwotICAgICAgICBVQ2hhciB1
bmljb2RlTmFtZU1TR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHgzMEI0LCAw
eDMwQjcsIDB4MzBDMywgMHgzMEFGfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVu
aWNvZGVOYW1lTVNHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU0dvdGhpYykp
KTsKLQotICAgICAgICBzZXQtPmFkZCgiTVMgTWluY2hvIik7Ci0gICAgICAgIFVDaGFyIHVuaWNv
ZGVOYW1lTVNNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDY2MEUsIDB4Njcx
RH07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TTWluY2hvLCBX
VEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNNaW5jaG8pKSk7Ci0KLSAgICAgICAgc2V0LT5h
ZGQoIk1laXJ5byIpOwotICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1laXJ5b1tdID0gezB4MzBF
MSwgMHgzMEE0LCAweDMwRUEsIDB4MzBBQX07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmlu
Zyh1bmljb2RlTmFtZU1laXJ5bywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1laXJ5bykp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKLX0KLQotRm9udDo6
Q29kZVBhdGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87Ci0KLVR5cGVzZXR0aW5nRmVhdHVyZXMg
Rm9udDo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb250IEltcGxlbWVudGF0aW9uIChDcm9zcy1Q
bGF0Zm9ybSBQb3J0aW9uKQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotRm9udDo6Rm9udCgpCi0gICAgOiBtX2xldHRlclNwYWNpbmcoMCkKLSAgICAsIG1fd29yZFNw
YWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCi0gICAgLCBt
X3R5cGVzZXR0aW5nRmVhdHVyZXMoMCkKLXsKLX0KLQotRm9udDo6Rm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKLSAg
ICA6IG1fZm9udERlc2NyaXB0aW9uKGZkKQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNw
YWNpbmcpCi0gICAgLCBtX3dvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKQotICAgICwgbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbCh1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmQuZmlyc3RG
YW1pbHkoKSkpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5n
RmVhdHVyZXMoKSkKLXsKLX0KLQotLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3Ry
dWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCi1Gb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwgbV93
b3JkU3BhY2luZygwKQotICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKLSAg
ICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQot
ewotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQp
OwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01v
ZGUpOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0g
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Zm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwp
OwotI2VuZGlmCi19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9y
IHBsYXRmb3JtLWluZGVwZW5kZW50LgotI2lmIFBMQVRGT1JNKElPUykKLUZvbnQ6OkZvbnQoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9y
bUZvbnQoZm9udERhdGEpKQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBtX3dvcmRT
cGFjaW5nKDApCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5n
RmVhdHVyZXMoKSkKLXsKLSAgICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250RGF0YS5mb250
KCk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXpl
KHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENU
Rm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0
YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9s
ZCA6IEZvbnRXZWlnaHROb3JtYWwpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50
ZXJGb250KGZvbnREYXRhLmlzUHJpbnRlckZvbnQoKSk7Ci0gICAgbV9nbHlwaHMgPSByZXRyaWV2
ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdl
dCgpKTsKLX0KLSNlbmRpZgotCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQotICAgIDog
bV9mb250RGVzY3JpcHRpb24ob3RoZXIubV9mb250RGVzY3JpcHRpb24pCi0gICAgLCBtX2dseXBo
cyhvdGhlci5tX2dseXBocykKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNw
YWNpbmcpCi0gICAgLCBtX3dvcmRTcGFjaW5nKG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wp
Ci0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMo
KSkKLXsKLX0KLQotRm9udCYgRm9udDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQotewot
ICAgIG1fZm9udERlc2NyaXB0aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247Ci0gICAgbV9n
bHlwaHMgPSBvdGhlci5tX2dseXBoczsKLSAgICBtX2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xl
dHRlclNwYWNpbmc7Ci0gICAgbV93b3JkU3BhY2luZyA9IG90aGVyLm1fd29yZFNwYWNpbmc7Ci0g
ICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5T
eW1ib2w7Ci0gICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gb3RoZXIubV90eXBlc2V0dGluZ0Zl
YXR1cmVzOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBGb250OjpvcGVyYXRvcj09KGNv
bnN0IEZvbnQmIG90aGVyKSBjb25zdAotewotICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygp
IHx8IG90aGVyLmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbiAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbiB8
fCBtX2xldHRlclNwYWNpbmcgIT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nIHx8IG1fd29yZFNwYWNp
bmcgIT0gb3RoZXIubV93b3JkU3BhY2luZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX2dseXBocyA9PSBvdGhlci5tX2dseXBocykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKCFtX2dseXBocyB8fCAhb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250
U2VsZWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIENhbiB0aGVzZSBjYXNl
cyBhY3R1YWxseSBzb21laG93IG9jY3VyPyBBbGwgZm9udHMgc2hvdWxkIGdldCB3aXBlZCBvdXQg
YnkgZnVsbCBzdHlsZSByZWNhbGMuCi0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJz
aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1f
Z2x5cGhzLT5nZW5lcmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7Ci0gICAgLy8gVGhpcyBwYXJ0
IG9mIHRoZSBrZXkgaXMgc2hhcmVkIHdpdGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2Fj
aGluZyBGb250RGF0YSBvYmplY3RzKS4KLSAgICBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hl
S2V5IGZvbnREZXNjcmlwdGlvbkNhY2hlS2V5OwotICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDM+
IGZhbWlsaWVzOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwotICAgIHVuc2lnbmVkIGZv
bnRTZWxlY3RvclZlcnNpb247Ci0gICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmxhZ3M7Ci19Owot
Ci1zdHJ1Y3QgRm9udEdseXBoc0NhY2hlRW50cnkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZvbnRHbHlwaHNDYWNoZUVudHJ5KEZvbnRHbHlwaHNDYWNoZUtl
eSYmIGssIFJlZjxGb250R2x5cGhzPiYmIGcpCi0gICAgICAgIDoga2V5KFdURjo6bW92ZShrKSkK
LSAgICAgICAgLCBnbHlwaHMoV1RGOjptb3ZlKGcpKQotICAgIHsgfQotICAgIEZvbnRHbHlwaHND
YWNoZUtleSBrZXk7Ci0gICAgUmVmPEZvbnRHbHlwaHM+IGdseXBoczsKLX07Ci0KLXR5cGVkZWYg
SGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5Piwg
QWxyZWFkeUhhc2hlZD4gRm9udEdseXBoc0NhY2hlOwotCi1zdGF0aWMgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYSwgY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBi
KQotewotICAgIGlmIChhLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ICE9IGIuZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5mb250U2VsZWN0
b3JJZCAhPSBiLmZvbnRTZWxlY3RvcklkIHx8IGEuZm9udFNlbGVjdG9yVmVyc2lvbiAhPSBiLmZv
bnRTZWxlY3RvclZlcnNpb24gfHwgYS5mb250U2VsZWN0b3JGbGFncyAhPSBiLmZvbnRTZWxlY3Rv
ckZsYWdzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZmFtaWxpZXMuc2l6ZSgp
ICE9IGIuZmFtaWxpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGEuZmFtaWxpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KCFlcXVhbElnbm9yaW5nQ2FzZShhLmZhbWlsaWVzW2ldLmltcGwoKSwgYi5mYW1pbGllc1tpXS5p
bXBsKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIEZvbnRHbHlwaHNDYWNoZSYgZm9udEdseXBoc0NhY2hlKCkKLXsKLSAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRm9udEdseXBoc0NhY2hlLCBjYWNoZSwg
KCkpOwotICAgIHJldHVybiBjYWNoZTsKLX0KLQotdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0Nh
Y2hlKCkKLXsKLSAgICBmb250R2x5cGhzQ2FjaGUoKS5jbGVhcigpOwotfQotCi12b2lkIGNsZWFy
V2lkdGhDYWNoZXMoKQotewotICAgIGZvciAoYXV0byBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJl
Z2luKCksIGVuZCA9IGZvbnRHbHlwaHNDYWNoZSgpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgpLndpZHRoQ2FjaGUoKS5jbGVhcigpOwotfQot
Ci1zdGF0aWMgdW5zaWduZWQgbWFrZUZvbnRTZWxlY3RvckZsYWdzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
ZXNjcmlwdGlvbi5zY3JpcHQoKSkgPDwgMSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlw
dGlvbi5zbWFsbENhcHMoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ha2VGb250R2x5cGhzQ2FjaGVL
ZXkoRm9udEdseXBoc0NhY2hlS2V5JiBrZXksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQotewotICAgIGtleS5mb250RGVzY3Jp
cHRpb25DYWNoZUtleSA9IEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkoZGVzY3JpcHRp
b24pOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3Vu
dCgpOyArK2kpCi0gICAgICAgIGtleS5mYW1pbGllcy5hcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5
QXQoaSkpOwotICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxl
Y3Rvci0+dW5pcXVlSWQoKSA6IDA7Ci0gICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250
U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7Ci0gICAga2V5LmZvbnRTZWxl
Y3RvckZsYWdzID0gZm9udFNlbGVjdG9yICYmIGZvbnRTZWxlY3Rvci0+cmVzb2x2ZXNGYW1pbHlG
b3IoZGVzY3JpcHRpb24pID8gbWFrZUZvbnRTZWxlY3RvckZsYWdzKGRlc2NyaXB0aW9uKSA6IDA7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChjb25zdCBG
b250R2x5cGhzQ2FjaGVLZXkmIGtleSkKLXsKLSAgICBWZWN0b3I8dW5zaWduZWQsIDc+IGhhc2hD
b2RlczsKLSAgICBoYXNoQ29kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0ICsga2V5LmZhbWls
aWVzLnNpemUoKSk7Ci0KLSAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250RGVz
Y3JpcHRpb25DYWNoZUtleS5jb21wdXRlSGFzaCgpKTsKLSAgICBoYXNoQ29kZXMudW5jaGVja2Vk
QXBwZW5kKGtleS5mb250U2VsZWN0b3JJZCk7Ci0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVu
ZChrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Ci0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVu
ZChrZXkuZm9udFNlbGVjdG9yRmxhZ3MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXkuZmFtaWxpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBl
bmQoa2V5LmZhbWlsaWVzW2ldLmltcGwoKSA/IENhc2VGb2xkaW5nSGFzaDo6aGFzaChrZXkuZmFt
aWxpZXNbaV0pIDogMCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhh
c2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKLX0K
LQotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCkKLXsK
LSAgICBWZWN0b3I8dW5zaWduZWQsIDUwPiB0b1JlbW92ZTsKLSAgICBGb250R2x5cGhzQ2FjaGU6
Oml0ZXJhdG9yIGVuZCA9IGZvbnRHbHlwaHNDYWNoZSgpLmVuZCgpOwotICAgIGZvciAoRm9udEds
eXBoc0NhY2hlOjppdGVyYXRvciBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkuaGFzT25l
UmVmKCkpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7Ci0gICAgfQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkKLSAgICAgICAg
Zm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKLX0KLQotc3RhdGljIFJlZjxG
b250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxl
Y3RvcikKLXsKLSAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIG1ha2VGb250R2x5cGhz
Q2FjaGVLZXkoa2V5LCBmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Ci0KLSAg
ICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goa2V5KTsKLSAgICBG
b250R2x5cGhzQ2FjaGU6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBmb250R2x5cGhzQ2FjaGUoKS5h
ZGQoaGFzaCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PigpKTsKLSAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtl
eSA9PSBrZXkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlw
aHMuZ2V0KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+JiBu
ZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBzdGQ6
Om1ha2VfdW5pcXVlPEZvbnRHbHlwaHNDYWNoZUVudHJ5PihXVEY6Om1vdmUoa2V5KSwgRm9udEds
eXBoczo6Y3JlYXRlKGZvbnRTZWxlY3RvcikpOwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHMg
PSBuZXdFbnRyeS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVu
cmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwgPSA1MDsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1heGlt
dW1FbnRyaWVzID0gNDAwOwotICAgIHN0YXRpYyB1bnNpZ25lZCBwcnVuZUNvdW50ZXI7Ci0gICAg
Ly8gUmVmZXJlbmNlZCBGb250R2x5cGhzIHdvdWxkIGV4aXN0IGFueXdheSBzbyBwcnVuaW5nIHRo
ZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KLSAgICBpZiAoISgrK3BydW5lQ291bnRlciAlIHVucmVm
ZXJlbmNlZFBydW5lSW50ZXJ2YWwpKQotICAgICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNG
cm9tRm9udEdseXBoc0NhY2hlKCk7Ci0gICAgLy8gUHJldmVudCBwYXRob2xvZ2ljYWwgZ3Jvd3Ro
LgotICAgIGlmIChmb250R2x5cGhzQ2FjaGUoKS5zaXplKCkgPiBtYXhpbXVtRW50cmllcykKLSAg
ICAgICAgZm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCkp
OwotICAgIHJldHVybiBnbHlwaHM7Ci19Ci0KLXZvaWQgRm9udDo6dXBkYXRlKFBhc3NSZWZQdHI8
Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Ci17Ci0gICAgbV9nbHlwaHMgPSByZXRy
aWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9y
LmdldCgpKTsKLSAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gdXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KGZpcnN0RmFtaWx5KCkpOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJl
cyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7Ci19Ci0KLWZsb2F0IEZvbnQ6OmRyYXdU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKLXsKLSAgICAvLyBEb24ndCBkcmF3
IGFueXRoaW5nIHdoaWxlIHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhl
IHByb2Nlc3Mgb2YgbG9hZGluZywKLSAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1l
bnQgaXMgc2V0IHRvIHRydWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawot
ICAgIC8vIGZvbnQpLgotICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpICYmIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7Ci0KLSAg
ICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKLSAgICAvLyBGSVhNRTog
VXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgg
a2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAg
ICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAm
JiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYg
IWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxl
eDsKLQotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpCi0gICAgICAgIHJldHVybiBk
cmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7Ci0KLSAgICByZXR1
cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLX0KLQot
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5n
Q3VzdG9tRm9udHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRvIDwgMCkKLSAgICAg
ICAgdG8gPSBydW4ubGVuZ3RoKCk7Ci0KLSAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQotICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKLQotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCi0gICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChjb250ZXh0
LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgZWxzZQotICAgICAgICBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20s
IHRvKTsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQ
YXRoKHJ1bik7Ci0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewotICAgICAgICAv
LyBUaGUgY29tcGxleCBwYXRoIGlzIG1vcmUgcmVzdHJpY3RpdmUgYWJvdXQgcmV0dXJuaW5nIGZh
bGxiYWNrIGZvbnRzIHRoYW4gdGhlIHNpbXBsZSBwYXRoLCBzbyB3ZSBuZWVkIGFuIGV4cGxpY2l0
IHRlc3QgdG8gbWFrZSB0aGVpciBiZWhhdmlvcnMgbWF0Y2guCi0gICAgICAgIGlmICghY2FuUmV0
dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkpCi0gICAgICAgICAgICBmYWxsYmFja0Zv
bnRzID0gMDsKLSAgICAgICAgLy8gVGhlIHNpbXBsZSBwYXRoIGNhbiBvcHRpbWl6ZSB0aGUgY2Fz
ZSB3aGVyZSBnbHlwaCBvdmVyZmxvdyBpcyBub3Qgb2JzZXJ2YWJsZS4KLSAgICAgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgJiYgKGdseXBoT3ZlcmZsb3cg
JiYgIWdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpKQotICAgICAgICAgICAgZ2x5cGhPdmVy
ZmxvdyA9IDA7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMgPSB0eXBl
c2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7Ci0gICAgYm9vbCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0dGVyU3BhY2lu
ZygpOwotICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2FjaGUoKS5hZGQo
cnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tlcm5pbmdP
ckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBoT3ZlcmZsb3cp
OwotICAgIGlmIChjYWNoZUVudHJ5ICYmICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkKLSAgICAg
ICAgcmV0dXJuICpjYWNoZUVudHJ5OwotCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+IGxvY2FsRmFsbGJhY2tGb250czsKLSAgICBpZiAoIWZhbGxiYWNrRm9udHMpCi0gICAgICAg
IGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwotCi0gICAgZmxvYXQgcmVzdWx0
OwotICAgIGlmIChjb2RlUGF0aFRvVXNlID09IENvbXBsZXgpCi0gICAgICAgIHJlc3VsdCA9IGZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKLQotICAgIGlmIChjYWNoZUVudHJ5ICYm
IGZhbGxiYWNrRm9udHMtPmlzRW1wdHkoKSkKLSAgICAgICAgKmNhY2hlRW50cnkgPSByZXN1bHQ7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAotewot
I2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4pKQot
ICAgICAgICByZXR1cm4gcnVuLnJlbmRlcmluZ0NvbnRleHQoKS0+ZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udCgqdGhpcywgcnVuLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwotI2VuZGlmCi0KLSAg
ICBjaGFyc0NvbnN1bWVkID0gcnVuLmxlbmd0aCgpOwotICAgIGdseXBoTmFtZSA9ICIiOwotICAg
IHJldHVybiB3aWR0aChydW4pOwotfQotCi1HbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotewotICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7Ci0gICAgICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkpIHsKLSAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gdV90b3VwcGVyKGMpOwotICAg
ICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7Ci0gICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsK
LSAgICAgICAgICAgICAgICB2YXJpYW50ID0gU21hbGxDYXBzVmFyaWFudDsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OwotICAgIH0KLQot
ICAgIGlmIChtaXJyb3IpCi0gICAgICAgIGMgPSB1X2NoYXJNaXJyb3IoYyk7Ci0KLSAgICByZXR1
cm4gbV9nbHlwaHMtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwg
dmFyaWFudCk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi1QYXNzT3duUHRyPFRleHRMYXlv
dXQ+IEZvbnQ6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRM
YXlvdXQqKQotewotfQotCi1mbG9hdCBGb250Ojp3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQs
IHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKQotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotCi1zdGF0aWMg
Y29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbXSA9IHsKLSAgICAi
QW1lcmljYW4gVHlwZXdyaXRlciIsCi0gICAgIkFyaWFsIEhlYnJldyIsCi0gICAgIkNoYWxrYm9h
cmQiLAotICAgICJDb2NoaW4iLAotICAgICJDb3JzaXZhIEhlYnJldyIsCi0gICAgIkNvdXJpZXIi
LAotICAgICJFdXBoZW1pYSBVQ0FTIiwKLSAgICAiR2VuZXZhIiwKLSAgICAiR2lsbCBTYW5zIiwK
LSAgICAiSGVpIiwKLSAgICAiSGVsdmV0aWNhIiwKLSAgICAiSG9lZmxlciBUZXh0IiwKLSAgICAi
SW5haU1hdGhpIiwKLSAgICAiS2FpIiwKLSAgICAiTHVjaWRhIEdyYW5kZSIsCi0gICAgIk1hcmtl
ciBGZWx0IiwKLSAgICAiTW9uYWNvIiwKLSAgICAiTXNodGFrYW4iLAotICAgICJOZXcgUGVuaW5p
bSBNVCIsCi0gICAgIk9zYWthIiwKLSAgICAiUmFhbmFuYSIsCi0gICAgIlNUSGVpdGkiLAotICAg
ICJTeW1ib2wiLAotICAgICJUaW1lcyIsCi0gICAgIkFwcGxlIEJyYWlsbGUiLAotICAgICJBcHBs
ZSBMaUdvdGhpYyIsCi0gICAgIkFwcGxlIExpU3VuZyIsCi0gICAgIkFwcGxlIFN5bWJvbHMiLAot
ICAgICJBcHBsZUdvdGhpYyIsCi0gICAgIkFwcGxlTXl1bmdqbyIsCi0gICAgIiNHdW5nU2VvIiwK
LSAgICAiI0hlYWRMaW5lQSIsCi0gICAgIiNQQ015dW5nam8iLAotICAgICIjUGlsR2kiLAotfTsK
LQotLy8gRm9yIGZvbnQgZmFtaWxpZXMgd2hlcmUgYW55IG9mIHRoZSBmb250cyBkb24ndCBoYXZl
IGEgdmFsaWQgZW50cnkgaW4gdGhlIE9TLzIgdGFibGUKLS8vIGZvciBhdmdDaGFyV2lkdGgsIGZh
bGxiYWNrIHRvIHRoZSBsZWdhY3kgd2Via2l0IGJlaGF2aW9yIG9mIGdldHRpbmcgdGhlIGF2Z0No
YXJXaWR0aAotLy8gZnJvbSB0aGUgd2lkdGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBh
cHBseSB0byBhIGZpeGVkIG51bWJlciBvZiBNYWMgZm9udHMsCi0vLyBidXQsIGluIG9yZGVyIHRv
IGdldCBzaW1pbGFyIHJlbmRlcmluZyBhY3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNr
IGZvcgotLy8gYWxsIHBsYXRmb3Jtcy4KLWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldp
ZHRoKCkgY29uc3QKLXsKLSAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gZmlyc3RGYW1pbHkoKTsK
LSAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCi0gICAgLy8gSW50ZXJuYWwgZm9udHMgb24g
T1MgWCBhbmQgaU9TIGFsc28gaGF2ZSBhbiBpbnZhbGlkIGVudHJ5IGluIHRoZSB0YWJsZSBmb3Ig
YXZnQ2hhcldpZHRoLgotICAgIGlmIChwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNT
dHJpbmc+KiBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IDA7Ci0KLSAgICBp
ZiAoIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwKSB7Ci0gICAgICAgIGZvbnRG
YW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gbmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5n
PjsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGgpOyArK2kpCi0gICAgICAgICAgICBmb250RmFt
aWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+YWRkKEF0b21pY1N0cmluZyhmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aFtpXSkpOwotICAgIH0KLQotICAgIHJldHVybiAhZm9udEZh
bWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0KLWJv
b2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCYgd2lkdGgpIGNv
bnN0Ci17Ci0gICAgYm9vbCBzdWNjZXNzID0gaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCk7Ci0g
ICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIHdpZHRoID0gcm91bmRmKHByaW1hcnlGb250RGF0YSgp
LmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250RGF0YSgpIG1pZ2h0IG5vdCBj
b3JyZXNwb25kIHRvIGZpcnN0RmFtaWx5KCkuCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXZv
aWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAg
IHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOwotCi0gICAgQ29kZVBhdGggY29k
ZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBj
b2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxp
Z2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRo
VG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNW
R0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAo
Y29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Ci0KLSAgICBy
ZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgZnJvbSwgdG8pOwotfQotCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4
dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0
aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXggJiYgKCF0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgfHwgaXNEcmF3bldpdGhTVkdGb250KHJ1bikpKQotICAgICAgICByZXR1
cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpOwotCi0gICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQocnVu
LCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBTdHJpbmcgbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IFN0cmluZ0J1aWxkZXIgbm9ybWFsaXplZDsKLSAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0
eShsZW5ndGgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQot
ICAgICAgICBub3JtYWxpemVkLmFwcGVuZChGb250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVy
c1tpXSkpOwotCi0gICAgcmV0dXJuIG5vcm1hbGl6ZWQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5n
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJz
LCBsZW5ndGgpOwotfQotCi1TdHJpbmcgRm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNw
YWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBib29sIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwotCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290
aGluZyhib29sIHNob3VsZFVzZVNtb290aGluZykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7Ci19
Ci0KLWJvb2wgRm9udDo6c2hvdWxkVXNlU21vb3RoaW5nKCkKLXsKLSAgICByZXR1cm4gc2hvdWxk
VXNlRm9udFNtb290aGluZzsKLX0KLQotdm9pZCBGb250OjpzZXRDb2RlUGF0aChDb2RlUGF0aCBw
KQotewotICAgIHNfY29kZVBhdGggPSBwOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250Ojpjb2Rl
UGF0aCgpCi17Ci0gICAgcmV0dXJuIHNfY29kZVBhdGg7Ci19Ci0KLXZvaWQgRm9udDo6c2V0RGVm
YXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0Zl
YXR1cmVzKQotewotICAgIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSB0eXBlc2V0dGlu
Z0ZlYXR1cmVzOwotfQotCi1UeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OmRlZmF1bHRUeXBlc2V0
dGluZ0ZlYXR1cmVzKCkKLXsKLSAgICByZXR1cm4gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJl
czsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVu
KSBjb25zdAotewotICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCi0gICAgICAgIHJldHVybiBz
X2NvZGVQYXRoOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoaXNEcmF3bldpdGhT
VkdGb250KHJ1bikpCi0gICAgICAgIHJldHVybiBTaW1wbGU7Ci0jZW5kaWYKLQotICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSAmJiBtX2ZvbnREZXNjcmlwdGlvbi5m
ZWF0dXJlU2V0dGluZ3MoKS0+c2l6ZSgpID4gMCkKLSAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0g
ICAgCi0gICAgaWYgKHJ1bi5sZW5ndGgoKSA+IDEgJiYgIVdpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcygqdGhpcykpCi0gICAgICAgIHJldHVybiBDb21wbGV4OwotCi0g
ICAgaWYgKCFydW4uY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKCkpCi0gICAgICAgIHJldHVybiBT
aW1wbGU7Ci0KLSAgICBpZiAocnVuLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU2ltcGxlOwot
Ci0gICAgLy8gU3RhcnQgZnJvbSAwIHNpbmNlIGRyYXdpbmcgYW5kIGhpZ2hsaWdodGluZyBhbHNv
IG1lYXN1cmUgdGhlIGNoYXJhY3RlcnMgYmVmb3JlIHJ1bi0+ZnJvbS4KLSAgICByZXR1cm4gY2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7Ci19
Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHVz
ZSBhIFVuaWNvZGVTZXQgaW4gcG9ydHMgd2hlcmUgSUNVIGlzIHVzZWQuIE5vdGUgdGhhdCB3ZSAK
LSAgICAvLyBjYW4ndCBzaW1wbHkgdXNlIFVuaWNvZGVDaGFyYWN0ZXIgUHJvcGVydHkvY2xhc3Mg
YmVjYXVzZSBzb21lIGNoYXJhY3RlcnMKLSAgICAvLyBhcmUgbm90ICdjb21iaW5pbmcnLCBidXQg
c3RpbGwgbmVlZCB0byBnbyB0byB0aGUgY29tcGxleCBwYXRoLgotICAgIC8vIEFsdGVybmF0aXZl
bHksIHdlIG1heSBhcyB3ZWxsIGNvbnNpZGVyIGJpbmFyeSBzZWFyY2ggb3ZlciBhIHNvcnRlZAot
ICAgIC8vIGxpc3Qgb2YgcmFuZ2VzLgotICAgIENvZGVQYXRoIHJlc3VsdCA9IFNpbXBsZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgY29uc3QgVUNo
YXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChjIDwgMHgyRTUpIC8vIFUrMDJFNSB0
aHJvdWdoIFUrMDJFOSAoTW9kaWZpZXIgTGV0dGVycyA6IFRvbmUgbGV0dGVycykgIAotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MkU5KSAKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgzMDApIC8vIFUrMDMwMCB0aHJvdWdo
IFUrMDM2RiBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDM2RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owot
Ci0gICAgICAgIGlmIChjIDwgMHgwNTkxIHx8IGMgPT0gMHgwNUJFKSAvLyBVKzA1OTEgdGhyb3Vn
aCBVKzA1Q0YgZXhjbHVkaW5nIFUrMDVCRSBIZWJyZXcgY29tYmluaW5nIG1hcmtzLCBIZWJyZXcg
cHVuY3R1YXRpb24gUGFzZXEsIFNvZiBQYXN1cSBhbmQgTnVuIEhhZnVraGEKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDA1Q0YpCi0gICAgICAgICAgICByZXR1cm4g
Q29tcGxleDsKLQotICAgICAgICAvLyBVKzA2MDAgdGhyb3VnaCBVKzEwOUYgQXJhYmljLCBTeXJp
YWMsIFRoYWFuYSwgTktvLCBTYW1hcml0YW4sIE1hbmRhaWMsCi0gICAgICAgIC8vIERldmFuYWdh
cmksIEJlbmdhbGksIEd1cm11a2hpLCBHdWphcmF0aSwgT3JpeWEsIFRhbWlsLCBUZWx1Z3UsIEth
bm5hZGEsIAotICAgICAgICAvLyBNYWxheWFsYW0sIFNpbmhhbGEsIFRoYWksIExhbywgVGliZXRh
biwgTXlhbm1hcgotICAgICAgICBpZiAoYyA8IDB4MDYwMCkgCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxMDlGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
Ci0KLSAgICAgICAgLy8gVSsxMTAwIHRocm91Z2ggVSsxMUZGIEhhbmd1bCBKYW1vIChvbmx5IEFu
Y2llbnQgS29yZWFuIHNob3VsZCBiZSBsZWZ0IGhlcmUgaWYgeW91IHByZWNvbXBvc2U7Ci0gICAg
ICAgIC8vIE1vZGVybiBLb3JlYW4gd2lsbCBiZSBwcmVjb21wb3NlZCBhcyBhIHJlc3VsdCBvZiBz
dGVwIEEpCi0gICAgICAgIGlmIChjIDwgMHgxMTAwKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChjIDw9IDB4MTFGRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0g
ICAgICAgIGlmIChjIDwgMHgxMzVEKSAvLyBVKzEzNUQgdGhyb3VnaCBVKzEzNUYgRXRoaW9waWMg
Y29tYmluaW5nIG1hcmtzCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0g
MHgxMzVGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAw
eDE3MDApIC8vIFUrMTc4MCB0aHJvdWdoIFUrMThBRiBUYWdhbG9nLCBIYW51bm9vLCBCdWhpZCwg
VGFnaGFud2EsS2htZXIsIE1vbmdvbGlhbgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChjIDw9IDB4MThBRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAg
IGlmIChjIDwgMHgxOTAwKSAvLyBVKzE5MDAgdGhyb3VnaCBVKzE5NEYgTGltYnUgKFVuaWNvZGUg
NC4wKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTk0RikKLSAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxOTgwKSAvLyBV
KzE5ODAgdGhyb3VnaCBVKzE5REYgTmV3IFRhaSBMdWUKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE5REYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MUEwMCkgLy8gVSsxQTAwIHRocm91Z2ggVSsxQ0ZGIEJ1Z2luZXNl
LCBUYWkgVGhhbSwgQmFsaW5lc2UsIEJhdGFrLCBMZXBjaGEsIFZlZGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxQ0ZGKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFEQzApIC8vIFUrMURDMCB0aHJvdWdoIFUrMURG
RiBDb21pbmluZyBkaWFjcml0aWNhbCBtYXJrIHN1cHBsZW1lbnQKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDFERkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICAvLyBVKzFFMDAgdGhyb3VnaCBVKzIwMDAgY2hhcmFjdGVycyB3aXRoIGRp
YWNyaXRpY3MgYW5kIHN0YWNrZWQgZGlhY3JpdGljcwotICAgICAgICBpZiAoYyA8PSAweDIwMDAp
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93OwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4MjBEMCkgLy8g
VSsyMEQwIHRocm91Z2ggVSsyMEZGIENvbWJpbmluZyBtYXJrcyBmb3Igc3ltYm9scwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MjBGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgyQ0VGKSAvLyBVKzJDRUYgdGhyb3Vn
aCBVKzJDRjEgQ29tYmluaW5nIG1hcmtzIGZvciBDb3B0aWMKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDJDRjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4MzAyQSkgLy8gVSszMDJBIHRocm91Z2ggVSszMDJGIElkZW9n
cmFwaGljIGFuZCBIYW5ndWwgVG9uZSBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChjIDw9IDB4MzAyRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAg
ICAgIGlmIChjIDwgMHhBNjdDKSAvLyBVK0E2N0MgdGhyb3VnaCBVK0E2N0QgQ29tYmluaW5nIG1h
cmtzIGZvciBvbGQgQ3lyaWxsaWMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
YyA8PSAweEE2N0QpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAo
YyA8IDB4QTZGMCkgLy8gVStBNkYwIHRocm91Z2ggVStBNkYxIENvbWJpbmluZyBtYXJrIGZvciBC
YW11bQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4QTZGMSkKLSAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgLy8gVStBODAwIHRocm91Z2ggVStB
QkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRlbmRlZCwKLSAg
ICAgICAvLyBIYW5ndWwgSmFtbyBFeHQuIEEsIEphdmFuZXNlLCBNeWFubWFyIEV4dGVuZGVkIEEs
IFRhaSBWaWV0LCBNZWV0ZWkgTWF5ZWssCi0gICAgICAgIGlmIChjIDwgMHhBODAwKSAKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEFCRkYpCi0gICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4RDdCMCkgLy8gVStEN0IwIHRocm91
Z2ggVStEN0ZGIEhhbmd1bCBKYW1vIEV4dC4gQgotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChjIDw9IDB4RDdGRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAg
ICAgIGlmIChjIDw9IDB4REJGRikgewotICAgICAgICAgICAgLy8gSGlnaCBzdXJyb2dhdGUKLQot
ICAgICAgICAgICAgaWYgKGkgPT0gbGVuIC0gMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgVUNoYXIgbmV4dCA9IGNoYXJhY3RlcnNbKytpXTsKLSAgICAgICAgICAg
IGlmICghVTE2X0lTX1RSQUlMKG5leHQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBVQ2hhcjMyIHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBM
RU1FTlRBUlkoYywgbmV4dCk7Ci0KLSAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFj
dGVyIDwgMHgxRjFFNikgLy8gVSsxRjFFNiB0aHJvdWdoIFUrMUYxRkYgUmVnaW9uYWwgSW5kaWNh
dG9yIFN5bWJvbHMKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4MUYxRkYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDwgMHhF
MDEwMCkgLy8gVStFMDEwMCB0aHJvdWdoIFUrRTAxRUYgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0
b3JzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHN1cHBsZW1l
bnRhcnlDaGFyYWN0ZXIgPD0gMHhFMDFFRikKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGZvciBCcmFobWkgKFUrMTEwMDAgYmxv
Y2spLCBLYWl0aGkgKFUrMTEwODAgYmxvY2spIGFuZCBvdGhlciBjb21wbGV4IHNjcmlwdHMKLSAg
ICAgICAgICAgIC8vIGluIHBsYW5lIDEgb3IgaGlnaGVyLgotCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjIDwgMHhGRTAwKSAvLyBVK0ZFMDAgdGhyb3Vn
aCBVK0ZFMEYgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0b3JzCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhGRTBGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7
Ci0KLSAgICAgICAgaWYgKGMgPCAweEZFMjApIC8vIFUrRkUyMCB0aHJvdWdoIFUrRkUyRiBDb21i
aW5pbmcgaGFsZiBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9
IDB4RkUyRikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKLXsKLSAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KLSAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEuCi0gICAgaWYgKGMgPj0gMHgz
NDAwICYmIGMgPD0gMHg0REJGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBD
SksgUmFkaWNhbHMgU3VwcGxlbWVudC4KLSAgICBpZiAoYyA+PSAweDJFODAgJiYgYyA8PSAweDJF
RkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIEthbmd4aSBSYWRpY2Fscy4K
LSAgICBpZiAoYyA+PSAweDJGMDAgJiYgYyA8PSAweDJGREYpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIC8vIENKSyBTdHJva2VzLgotICAgIGlmIChjID49IDB4MzFDMCAmJiBjIDw9
IDB4MzFFRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGli
aWxpdHkgSWRlb2dyYXBocy4KLSAgICBpZiAoYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMg
RXh0ZW5zaW9uIEIuCi0gICAgaWYgKGMgPj0gMHgyMDAwMCAmJiBjIDw9IDB4MkE2REYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhz
IEV4dGVuc2lvbiBDLgotICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4
dGVuc2lvbiBELgotICAgIGlmIChjID49IDB4MkI3NDAgJiYgYyA8PSAweDJCODFGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
IFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRjgwMCAmJiBjIDw9IDB4MkZBMUYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBjKQotewotICAgIC8vIDB4MkM3IENhcm9uLCBN
YW5kYXJpbiBDaGluZXNlIDNyZCBUb25lCi0gICAgLy8gMHgyQ0EgTW9kaWZpZXIgTGV0dGVyIEFj
dXRlIEFjY2VudCwgTWFuZGFyaW4gQ2hpbmVzZSAybmQgVG9uZQotICAgIC8vIDB4MkNCIE1vZGlm
aWVyIExldHRlciBHcmF2ZSBBY2Nlc3MsIE1hbmRhcmluIENoaW5lc2UgNHRoIFRvbmUgCi0gICAg
Ly8gMHgyRDkgRG90IEFib3ZlLCBNYW5kYXJpbiBDaGluZXNlIDV0aCBUb25lIAotICAgIGlmICgo
YyA9PSAweDJDNykgfHwgKGMgPT0gMHgyQ0EpIHx8IChjID09IDB4MkNCKSB8fCAoYyA9PSAweDJE
OSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjAyMCkgfHwgKGMg
PT0gMHgyMDIxKSB8fCAoYyA9PSAweDIwMzApIHx8IChjID09IDB4MjAzQikgfHwgKGMgPT0gMHgy
MDNDKQotICAgICAgICB8fCAoYyA9PSAweDIwNDIpIHx8IChjID09IDB4MjA0NykgfHwgKGMgPT0g
MHgyMDQ4KSB8fCAoYyA9PSAweDIwNDkpIHx8IChjID09IDB4MjA1MSkKLSAgICAgICAgfHwgKGMg
PT0gMHgyMEREKSB8fCAoYyA9PSAweDIwREUpIHx8IChjID09IDB4MjEwMCkgfHwgKGMgPT0gMHgy
MTAzKSB8fCAoYyA9PSAweDIxMDUpCi0gICAgICAgIHx8IChjID09IDB4MjEwOSkgfHwgKGMgPT0g
MHgyMTBBKSB8fCAoYyA9PSAweDIxMTMpIHx8IChjID09IDB4MjExNikgfHwgKGMgPT0gMHgyMTIx
KQotICAgICAgICB8fCAoYyA9PSAweDIxMkIpIHx8IChjID09IDB4MjEzQikgfHwgKGMgPT0gMHgy
MTUwKSB8fCAoYyA9PSAweDIxNTEpIHx8IChjID09IDB4MjE1MikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTU2ICYmIGMgPD0gMHgyMTVBKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE2MCAmJiBjIDw9IDB4MjE2QikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNzAgJiYgYyA8PSAweDIxN0IpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjE3RikgfHwgKGMgPT0gMHgyMTg5
KSB8fCAoYyA9PSAweDIzMDcpIHx8IChjID09IDB4MjMxMikgfHwgKGMgPT0gMHgyM0JFKSB8fCAo
YyA9PSAweDIzQkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjND
MCAmJiBjIDw9IDB4MjNDQykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0g
MHgyM0NFKSB8fCAoYyA9PSAweDI0MjMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChjID49IDB4MjQ2MCAmJiBjIDw9IDB4MjQ5MikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDI0OUMgJiYgYyA8PSAweDI0RkYpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgaWYgKChjID09IDB4MjVBMCkgfHwgKGMgPT0gMHgyNUExKSB8fCAoYyA9PSAweDI1QTIp
IHx8IChjID09IDB4MjVBQSkgfHwgKGMgPT0gMHgyNUFCKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoKGMgPT0gMHgyNUIxKSB8fCAoYyA9PSAweDI1QjIpIHx8IChjID09IDB4MjVC
MykgfHwgKGMgPT0gMHgyNUI2KSB8fCAoYyA9PSAweDI1QjcpIHx8IChjID09IDB4MjVCQykgfHwg
KGMgPT0gMHgyNUJEKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKChjID09
IDB4MjVDMCkgfHwgKGMgPT0gMHgyNUMxKSB8fCAoYyA9PSAweDI1QzYpIHx8IChjID09IDB4MjVD
NykgfHwgKGMgPT0gMHgyNUM5KSB8fCAoYyA9PSAweDI1Q0IpIHx8IChjID09IDB4MjVDQykpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNUNFICYmIGMgPD0gMHgyNUQz
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVFMiAmJiBjIDw9IDB4
MjVFNikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA9PSAweDI1RUYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjAwICYmIGMgPD0gMHgyNjAzKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2MDUpIHx8IChjID09IDB4
MjYwNikgfHwgKGMgPT0gMHgyNjBFKSB8fCAoYyA9PSAweDI2MTYpIHx8IChjID09IDB4MjYxNykg
fHwgKGMgPT0gMHgyNjQwKSB8fCAoYyA9PSAweDI2NDIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID49IDB4MjY2MCAmJiBjIDw9IDB4MjY2RikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NzIgJiYgYyA8PSAweDI2N0QpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjZBMCkgfHwgKGMgPT0gMHgyNkJEKSB8fCAoYyA9
PSAweDI2QkUpIHx8IChjID09IDB4MjcxMykgfHwgKGMgPT0gMHgyNzFBKSB8fCAoYyA9PSAweDI3
M0YpIHx8IChjID09IDB4Mjc0MCkgfHwgKGMgPT0gMHgyNzU2KSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweDI3NzYgJiYgYyA8PSAweDI3N0YpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyQjFBKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMuCi0gICAgaWYgKGMgPj0g
MHgyRkYwICYmIGMgPD0gMHgyRkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAv
LyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24sIGV4Y2x1ZGluZyAweDMwMzAuCi0gICAgaWYg
KGMgPj0gMHgzMDAwICYmIGMgPCAweDMwMzApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKGMgPiAweDMwMzAgJiYgYyA8PSAweDMwM0YpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gSGlyYWdhbmEKLSAgICBpZiAoYyA+PSAweDMwNDAgJiYgYyA8PSAweDMwOUYpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gS2F0YWthbmEgCi0gICAgaWYgKGMgPj0gMHgzMEEw
ICYmIGMgPD0gMHgzMEZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEJvcG9tb2Zv
Ci0gICAgaWYgKGMgPj0gMHgzMTAwICYmIGMgPD0gMHgzMTJGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChjID49IDB4MzE5MCAmJiBjIDw9IDB4MzE5RikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBCb3BvbW9mbyBFeHRlbmRlZAotICAgIGlmIChjID49IDB4MzFBMCAm
JiBjIDw9IDB4MzFCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gCi0gICAgLy8gRW5jbG9zZWQg
Q0pLIExldHRlcnMgYW5kIE1vbnRocy4KLSAgICBpZiAoYyA+PSAweDMyMDAgJiYgYyA8PSAweDMy
RkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5
LgotICAgIGlmIChjID49IDB4MzMwMCAmJiBjIDw9IDB4MzNGRikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoYyA+PSAweEY4NjAgJiYgYyA8PSAweEY4NjIpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMuCi0gICAgaWYgKGMgPj0g
MHhGRTMwICYmIGMgPD0gMHhGRTRGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgo
YyA9PSAweEZFMTApIHx8IChjID09IDB4RkUxMSkgfHwgKGMgPT0gMHhGRTEyKSB8fCAoYyA9PSAw
eEZFMTkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweEZGMEQpIHx8
IChjID09IDB4RkYxQikgfHwgKGMgPT0gMHhGRjFDKSB8fCAoYyA9PSAweEZGMUUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtcwot
ICAgIC8vIFVzdWFsbHkgb25seSB1c2VkIGluIENKSwotICAgIGlmIChjID49IDB4RkYwMCAmJiBj
IDw9IDB4RkZFRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBFbW9qaS4KLSAgICBp
ZiAoYyA9PSAweDFGMTAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4
MUYxMTAgJiYgYyA8PSAweDFGMTI5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChj
ID49IDB4MUYxMzAgJiYgYyA8PSAweDFGMTQ5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChjID49IDB4MUYxNTAgJiYgYyA8PSAweDFGMTY5KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID49IDB4MUYxNzAgJiYgYyA8PSAweDFGMTg5KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmIChjID49IDB4MUYyMDAgJiYgYyA8PSAweDFGNkM1KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBpc0NKS0lkZW9ncmFwaChjKTsKLX0KLQotdW5zaWdu
ZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYg
aXNBZnRlckV4cGFuc2lvbikKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgaWYgKGRp
cmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ldKSkgewot
ICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lv
biA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhw
YW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcnNbaSAtIDFdKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewot
ICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBp
ZiAoZGlyZWN0aW9uID09IExUUikgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNb
aV07Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVl
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKFUxNl9JU19MRUFEKGNoYXJhY3RlcikgJiYgaSArIDEgPCBsZW5ndGggJiYgVTE2X0lTX1RS
QUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgewotICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUx
Nl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXIsIGNoYXJhY3RlcnNbaSArIDFdKTsKLSAgICAg
ICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXhwYW5kQXJv
dW5kSWRlb2dyYXBocyAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAg
IGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkp
IHsKLSAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpIC0gMV07Ci0g
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAg
ICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXIpICYmIGkgPiAxICYmIFUxNl9JU19MRUFEKGNoYXJhY3RlcnNb
aSAtIDJdKSkgewotICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVO
VEFSWShjaGFyYWN0ZXJzW2kgLSAyXSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBpLS07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAm
JiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAg
ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gY291bnQ7Ci19Ci0KLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
Y29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmll
dy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJF
eHBhbnNpb24pOwotICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwo
c3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9u
LCBpc0FmdGVyRXhwYW5zaW9uKTsKLX0KLQotYm9vbCBGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhh
c2lzKFVDaGFyMzIgYykKLXsKLSAgICBpZiAoVV9HRVRfR0NfTUFTSyhjKSAmIChVX0dDX1pfTUFT
SyB8IFVfR0NfQ05fTUFTSyB8IFVfR0NfQ0NfTUFTSyB8IFVfR0NfQ0ZfTUFTSykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEFkZGl0aW9uYWwgd29yZC1zZXBhcmF0b3IgY2hhcmFj
dGVycyBsaXN0ZWQgaW4gQ1NTIFRleHQgTGV2ZWwgMyBFZGl0b3IncyBEcmFmdCAzIE5vdmVtYmVy
IDIwMTAuCi0gICAgaWYgKGMgPT0gZXRoaW9waWNXb3Jkc3BhY2UgfHwgYyA9PSBhZWdlYW5Xb3Jk
U2VwYXJhdG9yTGluZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JEb3QKLSAgICAgICAgfHwg
YyA9PSB1Z2FyaXRpY1dvcmREaXZpZGVyIHx8IGMgPT0gdGliZXRhbk1hcmtJbnRlcnN5bGxhYmlj
VHNoZWcgfHwgYyA9PSB0aWJldGFuTWFya0RlbGltaXRlclRzaGVnQnN0YXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZvbnQ6OmlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9nbHlwaHMgJiYgbV9nbHlwaHMt
PmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7Ci19Ci0gICAgCi1HbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBpbmRleCkKLXsKLSAg
ICAvLyBJbiBnZW5lcmFsLCB3ZSB3YW50IHRvIHNraXAgZGVzY2VuZGVycy4gSG93ZXZlciwgc2tp
cHBpbmcgZGVzY2VuZGVycyBvbiBDSksgY2hhcmFjdGVycyBsZWFkcyB0byB1bmRlc2lyYWJsZSBy
ZW5kZXJpbmdzLAotICAgIC8vIHNvIHdlIHdhbnQgdG8gZHJhdyB0aHJvdWdoIENKSyBjaGFyYWN0
ZXJzIChvbiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgYmFzaXMpLgotICAgIFVDaGFyMzIgYmFz
ZUNoYXJhY3RlcjsKLSAgICB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IGdseXBoQnVmZmVyLm9m
ZnNldEluU3RyaW5nKGluZGV4KTsKLQotICAgIGlmIChvZmZzZXRJblN0cmluZyA9PSBHbHlwaEJ1
ZmZlcjo6bm9PZmZzZXQpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBubyBpZGVhIHdoaWNoIGNoYXJh
Y3RlciBzcGF3bmVkIHRoaXMgZ2x5cGguIEJhaWwuCi0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0
aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHRleHRSdW4uaXM4Qml0KCkpCi0gICAgICAgIGJhc2VDaGFyYWN0ZXIgPSB0
ZXh0UnVuLmNoYXJhY3RlcnM4KClbb2Zmc2V0SW5TdHJpbmddOwotICAgIGVsc2UKLSAgICAgICAg
VTE2X05FWFQodGV4dFJ1bi5jaGFyYWN0ZXJzMTYoKSwgb2Zmc2V0SW5TdHJpbmcsIHRleHRSdW4u
bGVuZ3RoKCksIGJhc2VDaGFyYWN0ZXIpOwotICAgIAotICAgIC8vIHVfZ2V0SW50UHJvcGVydHlW
YWx1ZSB3aXRoIFVDSEFSX0lERU9HUkFQSElDIGRvZXNuJ3QgcmV0dXJuIHRydWUgZm9yIEphcGFu
ZXNlIG9yIEtvcmVhbiBjb2RlcG9pbnRzLgotICAgIC8vIEluc3RlYWQsIHdlIGNhbiB1c2UgdGhl
ICJVbmljb2RlIGFsbG9jYXRpb24gYmxvY2siIGZvciB0aGUgY2hhcmFjdGVyLgotICAgIFVCbG9j
a0NvZGUgYmxvY2tDb2RlID0gdWJsb2NrX2dldENvZGUoYmFzZUNoYXJhY3Rlcik7Ci0gICAgc3dp
dGNoIChibG9ja0NvZGUpIHsKLSAgICBjYXNlIFVCTE9DS19DSktfUkFESUNBTFNfU1VQUExFTUVO
VDoKLSAgICBjYXNlIFVCTE9DS19DSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT046Ci0gICAgY2Fz
ZSBVQkxPQ0tfRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUzoKLSAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JB
UEhTX0VYVEVOU0lPTl9BOgotICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFM6
Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUzoKLSAgICBjYXNl
IFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9GT1JNUzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5J
RklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9COgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJ
QklMSVRZX0lERU9HUkFQSFNfU1VQUExFTUVOVDoKLSAgICBjYXNlIFVCTE9DS19DSktfU1RST0tF
UzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9DOgot
ICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0Q6Ci0gICAg
Y2FzZSBVQkxPQ0tfSURFT0dSQVBISUNfREVTQ1JJUFRJT05fQ0hBUkFDVEVSUzoKLSAgICBjYXNl
IFVCTE9DS19MSU5FQVJfQl9JREVPR1JBTVM6Ci0gICAgY2FzZSBVQkxPQ0tfRU5DTE9TRURfSURF
T0dSQVBISUNfU1VQUExFTUVOVDoKLSAgICBjYXNlIFVCTE9DS19ISVJBR0FOQToKLSAgICBjYXNl
IFVCTE9DS19LQVRBS0FOQToKLSAgICBjYXNlIFVCTE9DS19CT1BPTU9GTzoKLSAgICBjYXNlIFVC
TE9DS19CT1BPTU9GT19FWFRFTkRFRDoKLSAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNTzoKLSAg
ICBjYXNlIFVCTE9DS19IQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1POgotICAgIGNhc2UgVUJMT0NL
X0hBTkdVTF9TWUxMQUJMRVM6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURf
QToKLSAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9COgotICAgICAgICByZXR1
cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5
cGg7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6
R2x5cGhVbmRlcmxpbmVUeXBlOjpTa2lwRGVzY2VuZGVyczsKLSAgICB9Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250X2gKLSNkZWZpbmUg
Rm9udF9oCi0KLSNpbmNsdWRlICJEYXNoQXJyYXkuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2luY2x1
ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KLQotLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29tcGxleCB0byAwIGFuZCBjb25mbGljdHMK
LS8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0aCBlbnVtLgotI2lmZGVmIENvbXBsZXgK
LSN1bmRlZiBDb21wbGV4Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRm9udERhdGE7Ci1jbGFzcyBGb250
TWV0cmljczsKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBGb250U2VsZWN0b3I7Ci1j
bGFzcyBHbHlwaEJ1ZmZlcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIExheW91dFJl
Y3Q7Ci1jbGFzcyBSZW5kZXJUZXh0OwotY2xhc3MgVGV4dExheW91dDsKLWNsYXNzIFRleHRSdW47
Ci0KLXN0cnVjdCBHbHlwaERhdGE7Ci0KLXN0cnVjdCBHbHlwaE92ZXJmbG93IHsKLSAgICBHbHlw
aE92ZXJmbG93KCkKLSAgICAgICAgOiBsZWZ0KDApCi0gICAgICAgICwgcmlnaHQoMCkKLSAgICAg
ICAgLCB0b3AoMCkKLSAgICAgICAgLCBib3R0b20oMCkKLSAgICAgICAgLCBjb21wdXRlQm91bmRz
KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQgJiYgIXRvcCAmJiAhYm90dG9tOwotICAg
IH0KLQotICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNvbnN0IEdseXBoT3ZlcmZsb3cmIG90aGVy
KQotICAgIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIG90aGVyLmxlZnQpOwotICAg
ICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhlci5yaWdodCk7Ci0gICAgICAgIHRvcCA9
IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKLSAgICAgICAgYm90dG9tID0gc3RkOjptYXgoYm90
dG9tLCBvdGhlci5ib3R0b20pOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBH
bHlwaE92ZXJmbG93JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsZWZ0ICE9IG90aGVy
LmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwgdG9wICE9IG90aGVyLnRvcCB8fCBib3R0
b20gIT0gb3RoZXIuYm90dG9tOwotICAgIH0KLQotICAgIGludCBsZWZ0OwotICAgIGludCByaWdo
dDsKLSAgICBpbnQgdG9wOwotICAgIGludCBib3R0b207Ci0gICAgYm9vbCBjb21wdXRlQm91bmRz
OwotfTsKLQotY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xhdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVt
IGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERlc2NlbmRlcnMsIFNraXBHbHlwaCwgRHJh
d092ZXJHbHlwaH07Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zTW9yZVBhdGhzKCkgPSAwOwot
ICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOwotICAgIHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0
LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKLSAgICB2aXJ0dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1
bmRlcmxpbmVUeXBlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwotICAg
IHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQotfTsKLUdseXBoVG9QYXRoVHJh
bnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7Ci0KLWNsYXNzIEZvbnQgewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdv
cmRTcGFjaW5nKTsKLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUg
cGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250LgotICAgIFdFQkNPUkVf
RVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNQcmludGluZywgRm9u
dFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotI2lmIFBMQVRG
T1JNKElPUykKLSAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4pOwotI2VuZGlmCi0gICAgfkZvbnQoKTsKLQotICAgIEZvbnQoY29uc3QgRm9u
dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9wZXJhdG9yPShjb25zdCBGb250Jik7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIpIGNv
bnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb247IH0KLQotICAg
IGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRl
ZFBpeGVsU2l6ZSgpOyB9Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRy
PEZvbnRTZWxlY3Rvcj4pIGNvbnN0OwotCi0gICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkg
fTsKLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0g
LTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwotCi0g
ICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0
ZW50cykgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0aChjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVu
JiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7Ci0KLSAgICBQ
YXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBv
cywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQm
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cyA9IDApOwotCi0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVu
JiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkg
Y29uc3Q7Ci0KLSAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24uc21hbGxDYXBzKCk7IH0KLQotICAgIGZsb2F0IHdvcmRTcGFjaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQotICAgIGZsb2F0IGxldHRlclNwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KLSAgICB2b2lkIHNldFdvcmRTcGFjaW5nKGZs
b2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KLSAgICB2b2lkIHNldExldHRlclNwYWNpbmco
ZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9Ci0gICAgYm9vbCBpc0ZpeGVkUGl0Y2go
KSBjb25zdDsKLSAgICBib29sIGlzUHJpbnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Ci0gICAgCi0gICAgRm9udFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKTsgfQotCi0gICAgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZXNldHRpbmdGZWF0dXJlcz4obV90
eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZh
bWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0K
LSAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLmZhbWlseUNvdW50KCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseUF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9
Ci0KLSAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLml0YWxpYygpOyB9Ci0gICAgRm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQotICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhW
YXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7
IH0KLQotICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy0+
aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQotCi0gICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuZm9udE1ldHJpY3MoKTsgfQot
ICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEoKS5z
cGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KLSAgICBmbG9hdCB0YWJXaWR0aChjb25z
dCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25z
dDsKLSAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikg
Y29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZvbnREYXRhKCksIHRhYlNpemUsIHBvc2l0
aW9uKTsgfQotICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3Q7Ci0gICAg
Ym9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7
IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCi0KLSAgICBpbnQgZW1waGFzaXNNYXJrQXNjZW50
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgIGludCBlbXBoYXNpc01hcmtEZXNjZW50
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYg
cHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7Ci0gICAgY29uc3QgRm9udFJhbmdlcyYgZmFsbGJhY2tS
YW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQp
IGNvbnN0OwotICAgIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBjb25zdDsKLSNlbmRpZgotCi0gICAgc3Rh
dGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7Ci0gICAgc3RhdGljIGJvb2wgaXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKLQotICAgIC8vIEJFV0FSRTogSWYgaXNBZnRlckV4
cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rpb24gY2FsbCwgdGhlbiB0aGUgcmV0dXJu
ZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBvcnR1bml0eQotICAgIC8vIHdoaWNoIG1h
eSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQuIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0
ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQoKSBjb21wZW5zYXRlcwotICAgIC8v
IGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4
cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgotICAgIHN0YXRpYyB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29sKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsKLQotICAgIGVudW0gQ29kZVBhdGggeyBB
dXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93IH07Ci0gICAgQ29k
ZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwotICAgIHN0YXRpYyBDb2RlUGF0
aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJu
IFNpbXBsZTsgfQotICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKLQotICAgIGJvb2wgcHJpbWFyeUZvbnREYXRhSXNT
eXN0ZW1Gb250KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBGb3JUZXh0RW1waGFzaXNP
ck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07Ci0KLSAgICAvLyBS
ZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0
bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNp
cykgY29uc3Q7Ci0gICAgZmxvYXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
LSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxv
YXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIGludCBv
ZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0
aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0RW1waGFz
aXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYsIEdseXBoRGF0YSYpIGNvbnN0Owot
Ci0gICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCk7
Ci0gICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KTsKLQotICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAg
ZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
aW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5v
dEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgZmxvYXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICBmbG9h
dCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkg
Y29uc3Q7Ci0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsK
LSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNv
bnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4
cGFuc2lvbik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJ
bnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wm
IGlzQWZ0ZXJFeHBhbnNpb24pOwotCi0gICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwot
ICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKLQotcHVibGljOgot
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0
b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRvU2l6aW5nKG90aGVyLm1fZm9udERlc2Ny
aXB0aW9uKQotICAgICAgICAgICAgJiYgbV9sZXR0ZXJTcGFjaW5nID09IG90aGVyLm1fbGV0dGVy
U3BhY2luZwotICAgICAgICAgICAgJiYgbV93b3JkU3BhY2luZyA9PSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRp
ZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhzLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsKLSAgICBzdGF0aWMgQ29kZVBhdGggY29k
ZVBhdGgoKTsKLSAgICBzdGF0aWMgQ29kZVBhdGggc19jb2RlUGF0aDsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0
aW5nRmVhdHVyZXMpOwotICAgIHN0YXRpYyBUeXBlc2V0dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBzX3JvdW5kaW5n
SGFja0NoYXJhY3RlclRhYmxlWzI1Nl07Ci0gICAgc3RhdGljIGJvb2wgaXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIoVUNoYXIzMiBjKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEoYyAmIH4weEZGKSAm
JiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2NdOwotICAgIH0KLQotICAgIEZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNl
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwg
YyA9PSBub0JyZWFrU3BhY2U7IH0KLSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJl
YXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAw
eDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0gc29mdEh5cGhlbiB8fCBjID09
IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9IDB4MjAwZikgfHwgKGMgPj0g
MHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBj
ID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAgc3RhdGljIGJvb2wgY2FuUmVj
ZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOwotCi0gICAgc3RhdGljIGlubGluZSBVQ2hhciBu
b3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRyZWF0
QXNTcGFjZShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwotCi0gICAgICAg
IGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVy
biB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyOwotICAgIH0KLQot
ICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhcios
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICBib29sIHVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsgfQotICAgIEZvbnRHbHlw
aHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmdldCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0OwotCi0gICAgVHlwZXNldHRp
bmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSA9IG1fZm9udERlc2NyaXB0
aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVh
dHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwotCi0gICAgICAgIHN3aXRjaCAo
dGV4dFJlbmRlcmluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBBdXRvVGV4dFJlbmRlcmluZzoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wdGltaXplU3BlZWQ6Ci0gICAgICAgICAg
ICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9uOgotICAgICAgICBjYXNlIE9wdGltaXpl
TGVnaWJpbGl0eToKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobV9mb250
RGVzY3JpcHRpb24ua2VybmluZygpKSB7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpO
b25lS2VybmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzICY9IH5LZXJuaW5nOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3JtYWxLZXJuaW5nOgot
ICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24uY29tbW9u
TGlnYXR1cmVzU3RhdGUoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RGlzYWJs
ZWRMaWdhdHVyZXNTdGF0ZToKLSAgICAgICAgICAgIGZlYXR1cmVzICY9IH5MaWdhdHVyZXM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRM
aWdhdHVyZXNTdGF0ZToKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IExpZ2F0dXJlczsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBmZWF0dXJlczsKLSAgICB9Ci0KLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2Rl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwotCi0gICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERl
c2NyaXB0aW9uOwotICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1fZ2x5cGhzOwotICAg
IGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKLSAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOwotICAgIG11
dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAgIG11dGFibGUgdW5zaWdu
ZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8gKFR5cGVzZXR0aW5nRmVhdHVyZXMpIENh
Y2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnREZXNjcmlwdGlvbi4KLX07Ci0KLXZvaWQg
aW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJp
ZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Ci12b2lkIGNsZWFyV2lkdGhDYWNoZXMoKTsKLQotaW5s
aW5lIEZvbnQ6On5Gb250KCkKLXsKLX0KLQotaW5saW5lIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBG
b250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250RGVzY3JpcHRp
b24pOwotfQotCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJl
dHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24s
IGluZGV4KTsKLX0KLQotaW5saW5lIGJvb2wgRm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJldHVybiBtX2dseXBocy0+aXNGaXhlZFBpdGNo
KG1fZm9udERlc2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIEZvbnRTZWxlY3RvciogRm9udDo6Zm9u
dFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9u
dFNlbGVjdG9yKCkgOiAwOwotfQotCi1pbmxpbmUgZmxvYXQgRm9udDo6dGFiV2lkdGgoY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3QKLXsKLSAgICBpZiAoIXRhYlNpemUpCi0gICAgICAgIHJldHVybiBsZXR0ZXJTcGFj
aW5nKCk7Ci0gICAgZmxvYXQgdGFiV2lkdGggPSB0YWJTaXplICogZm9udERhdGEuc3BhY2VXaWR0
aCgpICsgbGV0dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0
aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Ci0gICAgcmV0dXJuICh0YWJEZWx0YVdpZHRo
IDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7
Ci19Ci0KLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3du
ZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCopOwotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgi
CiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBs
YXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxE
YXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcDoxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKwor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUg
IkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIlRleHRS
dW4uaCIKKyNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKKworbmFtZXNw
YWNlIFdURiB7CisKKy8vIGFsbG93IGNvbXBpbGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBp
biBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBj
bGFzcyBkZWZpbml0aW9uCit0ZW1wbGF0ZSA8PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6
OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqIHB0cikKK3sKKyAgICBXZWJDb3JlOjpG
b250OjpkZWxldGVMYXlvdXQocHRyKTsKK30KKworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKworY29uc3Qg
dWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7CisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAg
IDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSov
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8q
PyovLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MAorfTsKKworc3RhdGljIGJvb2wgaXNEcmF3bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1
bikKK3sKKyAgICByZXR1cm4gcnVuLnJlbmRlcmluZ0NvbnRleHQoKTsKK30KKworc3RhdGljIGJv
b2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KQoreworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogc2V0OworICAgIGlmICghc2V0KSB7
CisgICAgICAgIHNldCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZz47CisgICAgICAgIHNldC0+
YWRkKCJNUyBQR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10g
PSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMz
LCAweDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BH
b3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNU1BHb3RoaWMpKSk7CisKKyAgICAg
ICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BN
aW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFE
fTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBX
VEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQTWluY2hvKSkpOworCisgICAgICAgIHNldC0+
YWRkKCJNUyBHb3RoaWMiKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0g
ezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07
CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZf
QVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNHb3RoaWMpKSk7CisKKyAgICAgICAgc2V0LT5hZGQo
Ik1TIE1pbmNobyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhG
RjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBFLCAweDY3MUR9OworICAgICAgICBzZXQtPmFkZChB
dG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01pbmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2Rl
TmFtZU1TTWluY2hvKSkpOworCisgICAgICAgIHNldC0+YWRkKCJNZWlyeW8iKTsKKyAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMw
QUF9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdU
Rl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVNZWlyeW8pKSk7CisgICAgfQorICAgIHJldHVybiBz
ZXQtPmNvbnRhaW5zKGZhbWlseSk7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBh
dGggPSBBdXRvOworCitUeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0
aW5nRmVhdHVyZXMgPSAwOworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvbnQ6OkZvbnQoKQorICAgIDog
bV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisgICAgLCBtX3VzZUJh
Y2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDAp
Cit7Cit9CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihm
ZCkKKyAgICAsIG1fbGV0dGVyU3BhY2luZyhsZXR0ZXJTcGFjaW5nKQorICAgICwgbV93b3JkU3Bh
Y2luZyh3b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFj
a3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZkLmZpcnN0RmFtaWx5KCkpKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7Cit9CisKKy8v
IEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5k
ZW50LgorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBp
c1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKKyAgICA6
IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCisg
ICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCisgICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSkKK3sKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50ZXJGb250KTsKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZv
bnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShD
VEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNl
dElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKKyNlbmRpZgorfQorCisvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
KyNpZiBQTEFURk9STShJT1MpCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9n
bHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAs
IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgQ1RG
b250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50
ZXJGb250KCkpOworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMo
bV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7Cit9CisjZW5kaWYKKworRm9u
dDo6Rm9udChjb25zdCBGb250JiBvdGhlcikKKyAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVy
Lm1fZm9udERlc2NyaXB0aW9uKQorICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCisgICAg
LCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQorICAgICwgbV93b3JkU3Bh
Y2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQorICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJv
bChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKQorICAgICwgbV90eXBlc2V0dGluZ0Zl
YXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7Cit9CisKK0ZvbnQmIEZvbnQ6
Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK3sKKyAgICBtX2ZvbnREZXNjcmlwdGlvbiA9
IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOworICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7
CisgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOworICAgIG1fd29y
ZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIG1fdXNlQmFja3NsYXNoQXNZZW5T
eW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOworICAgIG1fdHlwZXNldHRp
bmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNldHRpbmdGZWF0dXJlczsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK2Jvb2wgRm9udDo6b3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QK
K3sKKyAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0
b21Gb250cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9mb250RGVzY3Jp
cHRpb24gIT0gb3RoZXIubV9mb250RGVzY3JpcHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90
aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dvcmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNp
bmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9n
bHlwaHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVy
Lm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzLT5mb250
U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVjdG9yKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAvLyBDYW4gdGhlc2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1
cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lwZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgor
ICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhz
LT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBvdGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCBGb250
R2x5cGhzQ2FjaGVLZXkgeworICAgIC8vIFRoaXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3
aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cyku
CisgICAgRm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNo
ZUtleTsKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICB1bnNpZ25l
ZCBmb250U2VsZWN0b3JJZDsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJzaW9uOworICAg
IHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdzOworfTsKKworc3RydWN0IEZvbnRHbHlwaHNDYWNo
ZUVudHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGb250
R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhzQ2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4m
JiBnKQorICAgICAgICA6IGtleShXVEY6Om1vdmUoaykpCisgICAgICAgICwgZ2x5cGhzKFdURjo6
bW92ZShnKSkKKyAgICB7IH0KKyAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OworICAgIFJlZjxG
b250R2x5cGhzPiBnbHlwaHM7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6
dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlw
aHNDYWNoZTsKKworc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVL
ZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYikKK3sKKyAgICBpZiAoYS5mb250RGVz
Y3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuZm9udFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJ
ZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24gIT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEu
Zm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250U2VsZWN0b3JGbGFncykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChhLmZhbWlsaWVzLnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZh
bWlsaWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5m
YW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxpZXNbaV0uaW1wbCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBGb250R2x5
cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwgY2FjaGUsICgpKTsKKyAgICByZXR1cm4gY2FjaGU7
Cit9CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgZm9udEdseXBo
c0NhY2hlKCkuY2xlYXIoKTsKK30KKwordm9pZCBjbGVhcldpZHRoQ2FjaGVzKCkKK3sKKyAgICBm
b3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhz
Q2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPmdseXBo
cy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG1ha2VG
b250U2VsZWN0b3JGbGFncyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8
IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOworfQor
CitzdGF0aWMgdm9pZCBtYWtlRm9udEdseXBoc0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYg
a2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcikKK3sKKyAgICBrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVz
Y3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRlc2NyaXB0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKQorICAgICAgICBrZXku
ZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpKTsKKyAgICBrZXkuZm9udFNl
bGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwor
ICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9y
LT52ZXJzaW9uKCkgOiAwOworICAgIGtleS5mb250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3Rv
ciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVzRmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VG
b250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlvbikgOiAwOworfQorCitzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkp
Cit7CisgICAgVmVjdG9yPHVuc2lnbmVkLCA3PiBoYXNoQ29kZXM7CisgICAgaGFzaENvZGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtleS5mYW1pbGllcy5zaXplKCkpOworCisgICAgaGFz
aENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0
ZUhhc2goKSk7CisgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9y
SWQpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNp
b24pOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdz
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytp
KQorICAgICAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBs
KCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2goa2V5LmZhbWlsaWVzW2ldKSA6IDApOworCisgICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29k
ZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7Cit9CisKK3ZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkLCA1
MD4gdG9SZW1vdmU7CisgICAgRm9udEdseXBoc0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5
cGhzQ2FjaGUoKS5lbmQoKTsKKyAgICBmb3IgKEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQg
PSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgpLmhhc09uZVJlZigpKQorICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGl0LT5rZXkpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92
ZSh0b1JlbW92ZVtpXSk7Cit9CisKK3N0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFk
ZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCit7CisgICAgRm9udEdseXBo
c0NhY2hlS2V5IGtleTsKKyAgICBtYWtlRm9udEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2Ny
aXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworCisgICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1
dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7CisgICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0NhY2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0
cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRy
eSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0ga2V5KQorICAgICAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Z2x5cGhzLmdldCgpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgIG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhz
Q2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSksIEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0
b3IpKTsKKyAgICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQo
KTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFs
ID0gNTA7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9IDQwMDsKKyAgICBz
dGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVyOworICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBo
cyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnku
CisgICAgaWYgKCEoKytwcnVuZUNvdW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkK
KyAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwor
ICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2FsIGdyb3d0aC4KKyAgICBpZiAoZm9udEdseXBoc0Nh
Y2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJpZXMpCisgICAgICAgIGZvbnRHbHlwaHNDYWNoZSgp
LnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigpKTsKKyAgICByZXR1cm4gZ2x5cGhzOwor
fQorCit2b2lkIEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVj
dG9yKSBjb25zdAoreworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZh
bWlseSgpKTsKKyAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdG
ZWF0dXJlcygpOworfQorCitmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24pIGNvbnN0Cit7CisgICAgLy8gRG9uJ3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUg
dXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCisg
ICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3
aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sKKyAgICAvLyBmb250KS4KKyAgICBpZiAo
aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9O
b3RQYWludElmRm9udE5vdFJlYWR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHRvID0gKHRv
ID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOworCisgICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKKyAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CisKKyAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQorICAgICAgICByZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwg
cnVuLCBwb2ludCwgZnJvbSwgdG8pOworCisgICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250
ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh0byA8IDApCisgICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwor
CisgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CisgICAgLy8gRklY
TUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3
aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUw
CisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVz
KCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkp
ICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgY29kZVBhdGhUb1VzZSA9IENv
bXBsZXg7CisKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQorICAgICAgICBkcmF3
RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJv
bSwgdG8pOworICAgIGVsc2UKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Cit9CisKK2Zsb2F0IEZvbnQ6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorewor
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKKyAgICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBt
b3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVybmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBz
aW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBleHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVo
YXZpb3JzIG1hdGNoLgorICAgICAgICBpZiAoIWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpKQorICAgICAgICAgICAgZmFsbGJhY2tGb250cyA9IDA7CisgICAgICAgIC8vIFRo
ZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cg
aXMgbm90IG9ic2VydmFibGUuCisgICAgICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdp
dGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21w
dXRlQm91bmRzKSkKKyAgICAgICAgICAgIGdseXBoT3ZlcmZsb3cgPSAwOworICAgIH0KKworICAg
IGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtl
cm5pbmcgfCBMaWdhdHVyZXMpOworICAgIGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNp
bmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRlclNwYWNpbmcoKTsKKyAgICBmbG9hdCogY2FjaGVF
bnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFj
aW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92ZXJmbG93KTsKKyAgICBpZiAoY2FjaGVFbnRyeSAm
JiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkpCisgICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsK
KworICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7
CisgICAgaWYgKCFmYWxsYmFja0ZvbnRzKQorICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2Fs
RmFsbGJhY2tGb250czsKKworICAgIGZsb2F0IHJlc3VsdDsKKyAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KQorICAgICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQo
cnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhP
dmVyZmxvdyk7CisKKyAgICBpZiAoY2FjaGVFbnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5
KCkpCisgICAgICAgICpjYWNoZUVudHJ5ID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2Zsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1
bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICAgICAgcmV0dXJuIHJ1bi5yZW5k
ZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnND
b25zdW1lZCwgZ2x5cGhOYW1lKTsKKyNlbmRpZgorCisgICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5s
ZW5ndGgoKTsKKyAgICBnbHlwaE5hbWUgPSAiIjsKKyAgICByZXR1cm4gd2lkdGgocnVuKTsKK30K
KworR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wg
bWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK3sKKyAgICBpZiAodmFyaWFu
dCA9PSBBdXRvVmFyaWFudCkgeworICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxD
YXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7CisgICAgICAgICAgICBV
Q2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihjKTsKKyAgICAgICAgICAgIGlmICh1cHBlckMgIT0g
YykgeworICAgICAgICAgICAgICAgIGMgPSB1cHBlckM7CisgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2
YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKKyAgICB9CisKKyAgICBpZiAobWlycm9yKQorICAgICAg
ICBjID0gdV9jaGFyTWlycm9yKGMpOworCisgICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOworfQorCisjaWYgIVBM
QVRGT1JNKENPQ09BKQorUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQo
UmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KikKK3sKK30KKworZmxvYXQg
Rm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKworc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGll
c1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7CisgICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAor
ICAgICJBcmlhbCBIZWJyZXciLAorICAgICJDaGFsa2JvYXJkIiwKKyAgICAiQ29jaGluIiwKKyAg
ICAiQ29yc2l2YSBIZWJyZXciLAorICAgICJDb3VyaWVyIiwKKyAgICAiRXVwaGVtaWEgVUNBUyIs
CisgICAgIkdlbmV2YSIsCisgICAgIkdpbGwgU2FucyIsCisgICAgIkhlaSIsCisgICAgIkhlbHZl
dGljYSIsCisgICAgIkhvZWZsZXIgVGV4dCIsCisgICAgIkluYWlNYXRoaSIsCisgICAgIkthaSIs
CisgICAgIkx1Y2lkYSBHcmFuZGUiLAorICAgICJNYXJrZXIgRmVsdCIsCisgICAgIk1vbmFjbyIs
CisgICAgIk1zaHRha2FuIiwKKyAgICAiTmV3IFBlbmluaW0gTVQiLAorICAgICJPc2FrYSIsCisg
ICAgIlJhYW5hbmEiLAorICAgICJTVEhlaXRpIiwKKyAgICAiU3ltYm9sIiwKKyAgICAiVGltZXMi
LAorICAgICJBcHBsZSBCcmFpbGxlIiwKKyAgICAiQXBwbGUgTGlHb3RoaWMiLAorICAgICJBcHBs
ZSBMaVN1bmciLAorICAgICJBcHBsZSBTeW1ib2xzIiwKKyAgICAiQXBwbGVHb3RoaWMiLAorICAg
ICJBcHBsZU15dW5nam8iLAorICAgICIjR3VuZ1NlbyIsCisgICAgIiNIZWFkTGluZUEiLAorICAg
ICIjUENNeXVuZ2pvIiwKKyAgICAiI1BpbEdpIiwKK307CisKKy8vIEZvciBmb250IGZhbWlsaWVz
IHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9uJ3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBP
Uy8yIHRhYmxlCisvLyBmb3IgYXZnQ2hhcldpZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdl
YmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRoZSBhdmdDaGFyV2lkdGgKKy8vIGZyb20gdGhlIHdp
ZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2VlbXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIg
b2YgTWFjIGZvbnRzLAorLy8gYnV0LCBpbiBvcmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcg
YWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhpcyBjaGVjayBmb3IKKy8vIGFsbCBwbGF0Zm9ybXMu
Citib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Cit7CisgICAgQXRv
bWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUg
YW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorCisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0
aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOworCisgICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aE1hcCkgeworICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJX
aWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZz47CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoKTsgKytpKQorICAgICAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lk
dGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhb
aV0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gIWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldp
ZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOworfQorCitib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hh
cldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAoreworICAgIGJvb2wgc3VjY2Vz
cyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOworICAgIGlmIChzdWNjZXNzKQorICAgICAg
ICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJ
WE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWls
eSgpLgorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVj
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5s
ZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChy
dW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxl
cyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlw
ZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykg
IT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNv
ZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxl
eCkKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwg
c2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOworCisgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKK30KKworaW50
IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBm
YXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBh
bmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29k
ZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICghdHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKworICAgIHJldHVybiBv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxp
bmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6
ZWQ7CisgICAgbm9ybWFsaXplZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZC5hcHBl
bmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKKworICAgIHJldHVybiBu
b3JtYWxpemVkLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4g
bm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworU3RyaW5n
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJz
LCBsZW5ndGgpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1
ZTsKKwordm9pZCBGb250OjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9v
dGhpbmcpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzaG91bGRVc2VGb250
U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3RoaW5nOworfQorCitib29sIEZvbnQ6OnNob3VsZFVz
ZVNtb290aGluZygpCit7CisgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Cit9CisK
K3ZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3sKKyAgICBzX2NvZGVQYXRoID0g
cDsKK30KKworRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoKQoreworICAgIHJldHVybiBz
X2NvZGVQYXRoOworfQorCit2b2lkIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKK3sKKyAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKK30KKworVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCit7CisgICAg
cmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisKK0ZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBpZiAoc19j
b2RlUGF0aCAhPSBBdXRvKQorICAgICAgICByZXR1cm4gc19jb2RlUGF0aDsKKworI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgaWYgKGlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAgICAgICBy
ZXR1cm4gU2ltcGxlOworI2VuZGlmCisKKyAgICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVy
ZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUo
KSA+IDApCisgICAgICAgIHJldHVybiBDb21wbGV4OworICAgIAorICAgIGlmIChydW4ubGVuZ3Ro
KCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRo
aXMpKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgIGlmICghcnVuLmNoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aCgpKQorICAgICAgICByZXR1cm4gU2ltcGxlOworCisgICAgaWYgKHJ1bi5p
czhCaXQoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIC8vIFN0YXJ0IGZyb20gMCBz
aW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRpbmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJz
IGJlZm9yZSBydW4tPmZyb20uCisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVu
LmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250
OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW4pCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRz
IHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRoYXQgd2UgCisgICAgLy8gY2FuJ3Qgc2ltcGx5IHVz
ZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJz
CisgICAgLy8gYXJlIG5vdCAnY29tYmluaW5nJywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhl
IGNvbXBsZXggcGF0aC4KKyAgICAvLyBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25z
aWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBzb3J0ZWQKKyAgICAvLyBsaXN0IG9mIHJhbmdlcy4K
KyAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwor
ICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBVKzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVy
IExldHRlcnMgOiBUb25lIGxldHRlcnMpICAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDJFOSkgCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAgdGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNy
aXRpY2FsIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
NkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MDU5
MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkxIHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1
QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywgSGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2Yg
UGFzdXEgYW5kIE51biBIYWZ1a2hhCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KGMgPD0gMHgwNUNGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgLy8g
VSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJpYywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJp
dGFuLCBNYW5kYWljLAorICAgICAgICAvLyBEZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwg
R3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVsdWd1LCBLYW5uYWRhLCAKKyAgICAgICAgLy8gTWFs
YXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8sIFRpYmV0YW4sIE15YW5tYXIKKyAgICAgICAgaWYg
KGMgPCAweDA2MDApIAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4
MTA5RikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8vIFUrMTEwMCB0
aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAob25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUg
bGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3NlOworICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdp
bGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1bHQgb2Ygc3RlcCBBKQorICAgICAgICBpZiAoYyA8
IDB4MTEwMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDExRkYp
CisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTM1RCkg
Ly8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0aGlvcGljIGNvbWJpbmluZyBtYXJrcworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MTM1RikKKyAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3Vn
aCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywgQnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xp
YW4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDE4QUYpCisgICAg
ICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsx
OTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChVbmljb2RlIDQuMCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweDE5NEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgICBpZiAoYyA8IDB4MTk4MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5l
dyBUYWkgTHVlCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOURG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDFBMDAp
IC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBCdWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBC
YXRhaywgTGVwY2hhLCBWZWRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MUNGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3VnaCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwg
bWFyayBzdXBwbGVtZW50CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxREZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgLy8gVSsxRTAw
IHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMgd2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRp
YWNyaXRpY3MKKyAgICAgICAgaWYgKGMgPD0gMHgyMDAwKSB7CisgICAgICAgICAgICByZXN1bHQg
PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGMgPCAweDIwRDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBD
b21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDIwRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VGIHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJr
cyBmb3IgQ29wdGljCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgy
Q0YxKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDMw
MkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAyRiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUg
bWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDMwMkYpCisg
ICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8g
VStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJpbmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNjdEKQorICAgICAgICAg
ICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0
aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFyayBmb3IgQmFtdW0KKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoYyA8PSAweEE2RjEpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKKworICAgICAgIC8vIFUrQTgwMCB0aHJvdWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNh
dXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5kZWQsCisgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0
LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVr
LAorICAgICAgICBpZiAoYyA8IDB4QTgwMCkgCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGMgPD0gMHhBQkZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAg
ICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdCMCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBF
eHQuIEIKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCisg
ICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsK
KyAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlCisKKyAgICAgICAgICAgIGlmIChpID09IGxl
biAtIDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFyIG5l
eHQgPSBjaGFyYWN0ZXJzWysraV07CisgICAgICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgVUNoYXIzMiBzdXBw
bGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOworCisg
ICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYx
RTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFsIEluZGljYXRvciBTeW1ib2xzCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweDFGMUZGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3Vn
aCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycy4KKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAx
RUYpCisgICAgICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzExMDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJs
b2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3JpcHRzCisgICAgICAgICAgICAvLyBpbiBwbGFuZSAx
IG9yIGhpZ2hlci4KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAwIHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0
aW9uIHNlbGVjdG9ycworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4
RkUwRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhG
RTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZFMkYgQ29tYmluaW5nIGhhbGYgbWFya3MKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweEZFMkYpCisgICAgICAgICAgICBy
ZXR1cm4gQ29tcGxleDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBGb250
Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMpCit7CisgICAgLy8gVGhlIGJhc2ljIENKSyBVbmlm
aWVkIElkZW9ncmFwaHMgYmxvY2suCisgICAgaWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZG
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3Jh
cGhzIEV4dGVuc2lvbiBBLgorICAgIGlmIChjID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQu
CisgICAgaWYgKGMgPj0gMHgyRTgwICYmIGMgPD0gMHgyRUZGKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICAvLyBLYW5neGkgUmFkaWNhbHMuCisgICAgaWYgKGMgPj0gMHgyRjAwICYm
IGMgPD0gMHgyRkRGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgU3Ry
b2tlcy4KKyAgICBpZiAoYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRUYpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCisgICAg
aWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhGQUZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCLgorICAgIGlmIChj
ID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQy4KKyAgICBpZiAo
YyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjczRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRC4KKyAgICBpZiAoYyA+
PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50LgorICAgIGlmIChj
ID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVD
aGFyMzIgYykKK3sKKyAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9u
ZQorICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENo
aW5lc2UgMm5kIFRvbmUKKyAgICAvLyAweDJDQiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNz
LCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25lIAorICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFu
ZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKKyAgICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4
MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMgPT0gMHgyRDkpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICgoYyA9PSAweDIwMjApIHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgy
MDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChjID09IDB4MjAzQykKKyAgICAgICAgfHwgKGMgPT0g
MHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5
KSB8fCAoYyA9PSAweDIwNTEpCisgICAgICAgIHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgy
MERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChjID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQor
ICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEz
KSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09IDB4MjEyMSkKKyAgICAgICAgfHwgKGMgPT0gMHgy
MTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChjID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8
fCAoYyA9PSAweDIxNTIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4
MjE1NiAmJiBjIDw9IDB4MjE1QSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+
PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAo
YyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNCRSkgfHwgKGMgPT0gMHgyM0JGKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIz
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAw
eDI0OTIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDlDICYmIGMg
PD0gMHgyNEZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDI1QTAp
IHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0gMHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChj
ID09IDB4MjVBQikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4MjVC
MSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwg
KGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1QkMpIHx8IChjID09IDB4MjVCRCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIGlmICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVD
MSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwg
KGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1Q0MpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9IDB4MjVEMykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI1RTIgJiYgYyA8PSAweDI1RTYpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGMgPT0gMHgyNUVGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4MjYwMykKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAoYyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkg
fHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAweDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMg
PT0gMHgyNjQyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDI2NjAg
JiYgYyA8PSAweDI2NkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgy
NjcyICYmIGMgPD0gMHgyNjdEKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkgfHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3
MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMgPT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8
IChjID09IDB4Mjc1NikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgy
Nzc2ICYmIGMgPD0gMHgyNzdGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09
IDB4MkIxQSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZGVvZ3JhcGhpYyBEZXNj
cmlwdGlvbiBDaGFyYWN0ZXJzLgorICAgIGlmIChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgorICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0g
MHgzMDNGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEhpcmFnYW5hCisgICAgaWYg
KGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIEthdGFrYW5hIAorICAgIGlmIChjID49IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBCb3BvbW9mbworICAgIGlmIChjID49IDB4MzEwMCAm
JiBjIDw9IDB4MzEyRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDMx
OTAgJiYgYyA8PSAweDMxOUYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21v
Zm8gRXh0ZW5kZWQKKyAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCisgICAgICAg
IHJldHVybiB0cnVlOworIAorICAgIC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMu
CisgICAgaWYgKGMgPj0gMHgzMjAwICYmIGMgPD0gMHgzMkZGKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eS4KKyAgICBpZiAoYyA+PSAweDMzMDAg
JiYgYyA8PSAweDMzRkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHhG
ODYwICYmIGMgPD0gMHhGODYyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IEZvcm1zLgorICAgIGlmIChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAw
eEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwgKGMgPT0gMHhGRTE5KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHhGRjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09
IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMKKyAgICAvLyBVc3VhbGx5IG9ubHkgdXNl
ZCBpbiBDSksKKyAgICBpZiAoYyA+PSAweEZGMDAgJiYgYyA8PSAweEZGRUYpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gRW1vamkuCisgICAgaWYgKGMgPT0gMHgxRjEwMCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgx
RjE0OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMg
PD0gMHgxRjE2OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAweDFGMTcw
ICYmIGMgPD0gMHgxRjE4OSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+PSAw
eDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gaXNDSktJZGVvZ3JhcGgoYyk7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7Cisg
ICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBjb3VudCsr
OworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7
IC0taSkgeworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkp
IHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBh
bnNpb24gPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaXNBZnRl
ckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsK
K30KKwordW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3sKKyAgICBzdGF0aWMgYm9vbCBleHBhbmRB
cm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0
ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkp
IHsKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hh
cmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0Fm
dGVyRXhwYW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAg
ICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBVQ2hhcjMy
IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAtIDFdOworICAgICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAg
ICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAm
JiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFyYWN0ZXJzW2kgLSAyXSkpIHsKKyAgICAgICAgICAg
ICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0s
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQor
ICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCit1bnNpZ25l
ZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQor
eworICAgIGlmIChzdHJpbmdWaWV3LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Vmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICByZXR1cm4g
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2
KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Cit9
CisKK2Jvb2wgRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCit7CisgICAg
aWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dD
X0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9yIGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0
IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBOb3ZlbWJlciAyMDEwLgorICAgIGlmIChjID09IGV0
aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBh
ZWdlYW5Xb3JkU2VwYXJhdG9yRG90CisgICAgICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRl
ciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJzeWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1h
cmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBGb250Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1fZ2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygp
OworfQorICAgIAorR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29t
cHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgpCit7CisgICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2Fu
dCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pL
IGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywKKyAgICAvLyBzbyB3
ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnkt
Y2hhcmFjdGVyIGJhc2lzKS4KKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CisgICAgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7CisK
KyAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0gR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7CisgICAg
ICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGljaCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBo
LiBCYWlsLgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVy
bGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7CisgICAgfQorICAgIAorICAgIGlmICh0ZXh0UnVuLmlz
OEJpdCgpKQorICAgICAgICBiYXNlQ2hhcmFjdGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29m
ZnNldEluU3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFj
dGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVy
KTsKKyAgICAKKyAgICAvLyB1X2dldEludFByb3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JB
UEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZvciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50
cy4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gdXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJs
b2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9j
a19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOworICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7CisgICAg
Y2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NVUFBMRU1FTlQ6CisgICAgY2FzZSBVQkxPQ0tfQ0pL
X1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgorICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19M
RVRURVJTX0FORF9NT05USFM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Cisg
ICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQToKKyAgICBj
YXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19D
T01QQVRJQklMSVRZX0lERU9HUkFQSFM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJ
VFlfRk9STVM6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQjoKKyAgICBjYXNlIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBM
RU1FTlQ6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1NUUk9LRVM6CisgICAgY2FzZSBVQkxPQ0tfQ0pL
X1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQzoKKyAgICBjYXNlIFVCTE9DS19DSktfVU5J
RklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9EOgorICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElD
X0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6CisgICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dS
QU1TOgorICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Cisg
ICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6CisgICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6CisgICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk86CisgICAgY2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6
CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NP
TVBBVElCSUxJVFlfSkFNTzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgorICAg
IGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0E6CisgICAgY2FzZSBVQkxPQ0tfSEFO
R1VMX0pBTU9fRVhURU5ERURfQjoKKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRv
cjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tp
cERlc2NlbmRlcnM7CisgICAgfQorfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExheW91dD4gaW4gc291
cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRMYXlvdXQgY2xhc3Mg
ZGVmaW5pdGlvbgogdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0
TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6
ZGVsZXRlTGF5b3V0KHB0cik7CisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRlbGV0ZUxheW91
dChwdHIpOwogfQogCiB9CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhjb25z
dCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogCi1jb25zdCB1
aW50OF90IEZvbnQ6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9IHsKK2NvbnN0
IHVpbnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9
IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAgMSAvKnNwYWNlKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDEgLyotKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDEgLyo/Ki8sCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwK
QEAgLTk4LDE1ICs5OCwxNSBAQCBzdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JG
YW1pCiAgICAgcmV0dXJuIHNldC0+Y29udGFpbnMoZmFtaWx5KTsKIH0KIAotRm9udDo6Q29kZVBh
dGggRm9udDo6c19jb2RlUGF0aCA9IEF1dG87CitGb250Q2FzY2FkZTo6Q29kZVBhdGggRm9udENh
c2NhZGU6OnNfY29kZVBhdGggPSBBdXRvOwogCi1UeXBlc2V0dGluZ0ZlYXR1cmVzIEZvbnQ6OnNf
ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250
Q2FzY2FkZTo6c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IDA7CiAKIC8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb250IEltcGxlbWVudGF0aW9uIChDcm9z
cy1QbGF0Zm9ybSBQb3J0aW9uKQorLy8gRm9udENhc2NhZGUgSW1wbGVtZW50YXRpb24gKENyb3Nz
LVBsYXRmb3JtIFBvcnRpb24pCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQogCi1Gb250OjpGb250KCkKK0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZSgpCiAgICAgOiBtX2xl
dHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMTQsNyArMTE0LDcgQEAgRm9udDo6Rm9udCgpCiB7
CiB9CiAKLUZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVy
U3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNw
YWNpbmcpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKICAgICAsIG1fbGV0dGVyU3BhY2lu
ZyhsZXR0ZXJTcGFjaW5nKQogICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKQEAgLTEy
NCw3ICsxMjQsNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsCiB9
CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWlu
ZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwg
Ym9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0
YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9k
ZSkKICAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250
RGF0YSkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkK
QEAgLTE0Myw3ICsxNDMsNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnRECiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0
b3IpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCiAgICAgOiBtX2ds
eXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQogICAgICwg
bV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCkBAIC0xNTksNyArMTU5
LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RAogfQogI2VuZGlm
CiAKLUZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCitGb250Q2FzY2FkZTo6Rm9udENhc2Nh
ZGUoY29uc3QgRm9udENhc2NhZGUmIG90aGVyKQogICAgIDogbV9mb250RGVzY3JpcHRpb24ob3Ro
ZXIubV9mb250RGVzY3JpcHRpb24pCiAgICAgLCBtX2dseXBocyhvdGhlci5tX2dseXBocykKICAg
ICAsIG1fbGV0dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNwYWNpbmcpCkBAIC0xNjksNyArMTY5
LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikKIHsKIH0KIAotRm9udCYgRm9udDo6
b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGUmIEZvbnRDYXNjYWRlOjpv
cGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKQogewogICAgIG1fZm9udERlc2NyaXB0
aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247CiAgICAgbV9nbHlwaHMgPSBvdGhlci5tX2ds
eXBoczsKQEAgLTE4MCw3ICsxODAsNyBAQCBGb250JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9u
dCYgb3RoZXIpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIEZvbnQ6Om9wZXJhdG9yPT0o
Y29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpvcGVyYXRvcj09KGNv
bnN0IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMjMsMTQgKzMyMywxNCBAQCBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJp
ZXZlT3JBZGRDYWNoCiAgICAgcmV0dXJuIGdseXBoczsKIH0KIAotdm9pZCBGb250Ojp1cGRhdGUo
UGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKK3ZvaWQgRm9udENh
c2NhZGU6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25z
dAogewogICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250
RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAgbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsK
ICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygp
OwogfQogCi1mbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQg
dG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNv
bnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
KSBjb25zdAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5n
IGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAogICAgIC8v
IGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2gg
Y2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCkBAIC0zNTEsNyArMzUxLDcgQEAgZmxvYXQgRm9u
dDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjbwogICAgIHJldHVybiBkcmF3Q29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3Mo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29uCiAgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwg
cnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNj
YWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QK
IHsKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAo
Y29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CkBAIC00MDMsNyArNDAzLDcgQEAgZmxvYXQgRm9u
dDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVk
LCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250
KHJ1bikpCkBAIC00MTUsNyArNDE1LDcgQEAgZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgcnVuLCBpbgogICAgIHJldHVybiB3aWR0aChydW4pOwogfQogCi1HbHlwaERhdGEgRm9udDo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQp
IGNvbnN0CiB7CiAgICAgaWYgKHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKICAgICAgICAgaWYg
KG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NW
R0ZvbnQoKSkgewpAQCAtNDM2LDE2ICs0MzYsMTYgQEAgR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxU
ZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBj
b25zdAorUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJl
bmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotdm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit2b2lkIEZvbnRDYXNjYWRl
OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCiB7CiB9CiAKLWZsb2F0IEZvbnQ6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKIHsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBzdGF0aWMg
Y29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsCiAvLyBmcm9tIHRoZSB3aWR0aCBvZiBh
ICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBm
b250cywKIC8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBw
bGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCiAvLyBhbGwgcGxhdGZvcm1zLgotYm9vbCBG
b250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6
aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKIHsKICAgICBBdG9taWNTdHJpbmcgZmFt
aWx5ID0gZmlyc3RGYW1pbHkoKTsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTUyMCw3
ICs1MjAsNyBAQCBib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvCiAgICAg
cmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFt
aWx5KTsKIH0KIAotYm9vbCBGb250OjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZs
b2F0JiB3aWR0aCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OmZhc3RBdmVyYWdlQ2hhcldpZHRo
SWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAogewogICAgIGJvb2wgc3VjY2VzcyA9IGhh
c1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQpAQCAtNTI4LDcgKzUy
OCw3IEBAIGJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWIKICAgICByZXR1
cm4gc3VjY2VzczsKIH0KIAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0
byk7CiAKQEAgLTU0Myw3ICs1NDMsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RG
b3JUZXh0KGNvCiAgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChy
dW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4
dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0
aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEwMDA1MAogICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXggJiYgKCF0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgfHwgaXNEcmF3bldpdGhTVkdGb250KHJ1bikpKQpAQCAtNTU5LDU1ICs1
NTksNTUgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgbm9ybWFsaXplU3BhY2VzSW50ZQogICAgIG5v
cm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnQ6Om5v
cm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisgICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5k
KEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOwogCiAgICAgcmV0
dXJuIG5vcm1hbGl6ZWQudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIEZv
bnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIEZvbnRDYXNjYWRlOjpu
b3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3Ro
KTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7CiAKLXZv
aWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQor
dm9pZCBGb250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21v
b3RoaW5nKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc2hvdWxkVXNlRm9u
dFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKIH0KIAotYm9vbCBGb250OjpzaG91bGRV
c2VTbW9vdGhpbmcoKQorYm9vbCBGb250Q2FzY2FkZTo6c2hvdWxkVXNlU21vb3RoaW5nKCkKIHsK
ICAgICByZXR1cm4gc2hvdWxkVXNlRm9udFNtb290aGluZzsKIH0KIAotdm9pZCBGb250OjpzZXRD
b2RlUGF0aChDb2RlUGF0aCBwKQordm9pZCBGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoQ29kZVBh
dGggcCkKIHsKICAgICBzX2NvZGVQYXRoID0gcDsKIH0KIAotRm9udDo6Q29kZVBhdGggRm9udDo6
Y29kZVBhdGgoKQorRm9udENhc2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjb2RlUGF0aCgp
CiB7CiAgICAgcmV0dXJuIHNfY29kZVBhdGg7CiB9CiAKLXZvaWQgRm9udDo6c2V0RGVmYXVsdFR5
cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVz
KQordm9pZCBGb250Q2FzY2FkZTo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoVHlwZXNl
dHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKQogewogICAgIHNfZGVmYXVsdFR5cGVz
ZXR0aW5nRmVhdHVyZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzOwogfQogCi1UeXBlc2V0dGluZ0Zl
YXR1cmVzIEZvbnQ6OmRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCkKK1R5cGVzZXR0aW5nRmVh
dHVyZXMgRm9udENhc2NhZGU6OmRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCkKIHsKICAgICBy
ZXR1cm4gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotRm9udDo6Q29kZVBhdGgg
Rm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdAorRm9udENhc2NhZGU6OkNv
ZGVQYXRoIEZvbnRDYXNjYWRlOjpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0CiB7
CiAgICAgaWYgKHNfY29kZVBhdGggIT0gQXV0bykKICAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7
CkBAIC02MzMsNyArNjMzLDcgQEAgRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3Qg
VGV4dAogICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzMTYo
KSwgcnVuLmxlbmd0aCgpKTsKIH0KIAotRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFu
Z2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQorRm9udENh
c2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCiB7CiAgICAgLy8gRklYTUU6IFNob3Vs
ZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRoYXQg
d2UgCiAgICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5L2Ns
YXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCkBAIC03MzQsOCArNzM0LDggQEAgRm9udDo6Q29k
ZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUAogICAgICAgICBpZiAoYyA8PSAweEE2RjEp
CiAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKIAotICAgICAgIC8vIFUrQTgwMCB0aHJvdWdo
IFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5kZWQs
Ci0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRlbmRl
ZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAorICAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBV
K0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAor
ICAgICAgICAvLyBIYW5ndWwgSmFtbyBFeHQuIEEsIEphdmFuZXNlLCBNeWFubWFyIEV4dGVuZGVk
IEEsIFRhaSBWaWV0LCBNZWV0ZWkgTWF5ZWssCiAgICAgICAgIGlmIChjIDwgMHhBODAwKSAKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYyA8PSAweEFCRkYpCkBAIC03ODcsNyAr
Nzg3LDcgQEAgRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQor
Ym9vbCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQogewogICAgIC8vIFRo
ZSBiYXNpYyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgogICAgIGlmIChjID49IDB4NEUw
MCAmJiBjIDw9IDB4OUZGRikKQEAgLTgxMiwxMSArODEyLDExIEBAIGJvb2wgRm9udDo6aXNDSktJ
ZGVvZ3JhcGgoVUNoYXIzMiBjKQogICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMu
CiAgICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhGQUZGKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKKwogICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIuCiAg
ICAgaWYgKGMgPj0gMHgyMDAwMCAmJiBjIDw9IDB4MkE2REYpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAKKwogICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMu
CiAgICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtODMyLDcgKzgzMiw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIz
MiBjKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKFVDaGFyMzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woVUNoYXIzMiBjKQogewogICAgIC8vIDB4MkM3IENhcm9uLCBNYW5kYXJpbiBDaGluZXNlIDNy
ZCBUb25lCiAgICAgLy8gMHgyQ0EgTW9kaWZpZXIgTGV0dGVyIEFjdXRlIEFjY2VudCwgTWFuZGFy
aW4gQ2hpbmVzZSAybmQgVG9uZQpAQCAtOTE0LDcgKzkxNCw3IEBAIGJvb2wgRm9udDo6aXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBD
aGFyYWN0ZXJzLgogICAgIGlmIChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24s
IGV4Y2x1ZGluZyAweDMwMzAuCiAgICAgaWYgKGMgPj0gMHgzMDAwICYmIGMgPCAweDMwMzApCiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTQwLDcgKzk0MCw3IEBAIGJvb2wgRm9udDo6aXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAgICAvLyBCb3BvbW9mbyBFeHRlbmRlZAogICAgIGlm
IChjID49IDB4MzFBMCAmJiBjIDw9IDB4MzFCRikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gCisK
ICAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzLgogICAgIGlmIChjID49IDB4
MzIwMCAmJiBjIDw9IDB4MzJGRikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05ODksNyArOTg5
LDcgQEAgYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMwogICAgIHJldHVy
biBpc0NKS0lkZW9ncmFwaChjKTsKIH0KIAotdW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3Vuc2ln
bmVkIEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAg
ICBpZiAoZGlyZWN0aW9uID09IExUUikgewpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgdW5zaWduZWQg
Rm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudAogICAgIHJldHVybiBjb3VudDsKIH0KIAot
dW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlOjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQog
ewogICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBjYW5FeHBhbmRBcm91
bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAg
LTEwNjIsMTQgKzEwNjIsMTQgQEAgdW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudAogICAgIHJldHVybiBjb3VudDsKIH0KIAotdW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3Vuc2lnbmVkIEZvbnRDYXNjYWRl
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQogewogICAg
IGlmIChzdHJpbmdWaWV3LmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5s
ZW5ndGgoKSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICByZXR1cm4gZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0
cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiB9CiAKLWJv
b2wgRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNj
YWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYykKIHsKICAgICBpZiAoVV9HRVRf
R0NfTUFTSyhjKSAmIChVX0dDX1pfTUFTSyB8IFVfR0NfQ05fTUFTSyB8IFVfR0NfQ0NfTUFTSyB8
IFVfR0NfQ0ZfTUFTSykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwODIsNyArMTA4Miw3
IEBAIGJvb2wgRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBGb250Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Citib29s
IEZvbnRDYXNjYWRlOjppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZ2x5cGhzICYmIG1fZ2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCShyZXZp
c2lvbiAxNzg0OTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aDoxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDYsIDIwMDcsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IEZvbnRfaAorI2RlZmluZSBGb250X2gKKworI2luY2x1ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNsdWRl
ICJQYXRoLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJUZXh0RGly
ZWN0aW9uLmgiCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorCisvLyAiWDExL1guaCIgZGVmaW5lcyBDb21wbGV4IHRv
IDAgYW5kIGNvbmZsaWN0cworLy8gd2l0aCBDb21wbGV4IHZhbHVlIGluIENvZGVQYXRoIGVudW0u
CisjaWZkZWYgQ29tcGxleAorI3VuZGVmIENvbXBsZXgKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGb250
RGF0YTsKK2NsYXNzIEZvbnRNZXRyaWNzOworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNz
IEZvbnRTZWxlY3RvcjsKK2NsYXNzIEdseXBoQnVmZmVyOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
OworY2xhc3MgTGF5b3V0UmVjdDsKK2NsYXNzIFJlbmRlclRleHQ7CitjbGFzcyBUZXh0TGF5b3V0
OworY2xhc3MgVGV4dFJ1bjsKKworc3RydWN0IEdseXBoRGF0YTsKKworc3RydWN0IEdseXBoT3Zl
cmZsb3cgeworICAgIEdseXBoT3ZlcmZsb3coKQorICAgICAgICA6IGxlZnQoMCkKKyAgICAgICAg
LCByaWdodCgwKQorICAgICAgICAsIHRvcCgwKQorICAgICAgICAsIGJvdHRvbSgwKQorICAgICAg
ICAsIGNvbXB1dGVCb3VuZHMoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBib29s
IGlzRW1wdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFsZWZ0ICYmICFyaWdodCAmJiAhdG9w
ICYmICFib3R0b207CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgZXh0ZW5kVG8oY29uc3QgR2x5
cGhPdmVyZmxvdyYgb3RoZXIpCisgICAgeworICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwg
b3RoZXIubGVmdCk7CisgICAgICAgIHJpZ2h0ID0gc3RkOjptYXgocmlnaHQsIG90aGVyLnJpZ2h0
KTsKKyAgICAgICAgdG9wID0gc3RkOjptYXgodG9wLCBvdGhlci50b3ApOworICAgICAgICBib3R0
b20gPSBzdGQ6Om1heChib3R0b20sIG90aGVyLmJvdHRvbSk7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxlZnQgIT0gb3RoZXIubGVmdCB8fCByaWdodCAhPSBvdGhlci5yaWdodCB8fCB0b3AgIT0g
b3RoZXIudG9wIHx8IGJvdHRvbSAhPSBvdGhlci5ib3R0b207CisgICAgfQorCisgICAgaW50IGxl
ZnQ7CisgICAgaW50IHJpZ2h0OworICAgIGludCB0b3A7CisgICAgaW50IGJvdHRvbTsKKyAgICBi
b29sIGNvbXB1dGVCb3VuZHM7Cit9OworCitjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3Igewor
cHVibGljOgorICAgIGVudW0gY2xhc3MgR2x5cGhVbmRlcmxpbmVUeXBlIHtTa2lwRGVzY2VuZGVy
cywgU2tpcEdseXBoLCBEcmF3T3ZlckdseXBofTsKKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNN
b3JlUGF0aHMoKSA9IDA7CisgICAgdmlydHVhbCBQYXRoIHBhdGgoKSA9IDA7CisgICAgdmlydHVh
bCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBleHRlbnRzKCkgPSAwOworICAgIHZpcnR1YWwgR2x5
cGhVbmRlcmxpbmVUeXBlIHVuZGVybGluZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFk
dmFuY2UoKSA9IDA7CisgICAgdmlydHVhbCB+R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCkgeyB9Cit9
OworR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVy
bGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGluZGV4KTsK
KworY2xhc3MgRm9udCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVy
U3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMg
b25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZlIGZv
bnQuCisgICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9v
bCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOworCisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBl
bmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisjZW5kaWYKKyAgICB+Rm9udCgpOworCisg
ICAgRm9udChjb25zdCBGb250Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9
KGNvbnN0IEZvbnQmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnQmIG90
aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNj
cmlwdGlvbjsgfQorCisgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7IH0KKyAgICBmbG9hdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KKworICAgIHZvaWQg
dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPikgY29uc3Q7CisKKyAgICBlbnVtIEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJh
Y2tJZkZvbnROb3RSZWFkeSB9OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWlu
dElmRm9udE5vdFJlYWR5KSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3
RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSkgY29uc3Q7CisKKyAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhS
ZWN0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBG
bG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0
IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGZsb2F0IHdp
ZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdDsKKworICAgIFBhc3NPd25QdHI8VGV4dExheW91dD4gY3JlYXRlTGF5b3V0KFJlbmRl
clRleHQqLCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7CisgICAg
c3RhdGljIHZvaWQgZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKTsKKyAgICBzdGF0aWMgZmxvYXQg
d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CisKKyAgICBpbnQgb2Zm
c2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JU
ZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSA9
IDAsIGludCB0byA9IC0xKSBjb25zdDsKKworICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQorCisgICAgZmxvYXQgd29y
ZFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3dvcmRTcGFjaW5nOyB9CisgICAgZmxvYXQgbGV0
dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQorICAgIHZvaWQg
c2V0V29yZFNwYWNpbmcoZmxvYXQgcykgeyBtX3dvcmRTcGFjaW5nID0gczsgfQorICAgIHZvaWQg
c2V0TGV0dGVyU3BhY2luZyhmbG9hdCBzKSB7IG1fbGV0dGVyU3BhY2luZyA9IHM7IH0KKyAgICBi
b29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OworICAgIGJvb2wgaXNQcmludGVyRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnVzZVByaW50ZXJGb250KCk7IH0KKyAgICAKKyAg
ICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpOyB9CisKKyAgICBUeXBlc2V0dGluZ0ZlYXR1cmVz
IHR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlc2V0
dGluZ0ZlYXR1cmVzPihtX3R5cGVzZXR0aW5nRmVhdHVyZXMpOyB9CisKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKTsgfQorICAgIHVuc2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRp
b24uZmFtaWx5QXQoaSk7IH0KKworICAgIEZvbnRJdGFsaWMgaXRhbGljKCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGVzY3JpcHRpb24uaXRhbGljKCk7IH0KKyAgICBGb250V2VpZ2h0IHdlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndlaWdodCgpOyB9CisgICAgRm9udFdp
ZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi53aWR0aFZhcmlhbnQoKTsgfQorCisgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2x5cGhzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9CisKKyAgICBjb25zdCBGb250
TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEoKS5m
b250TWV0cmljcygpOyB9CisgICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHBy
aW1hcnlGb250RGF0YSgpLnNwYWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQorICAgIGZs
b2F0IHRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxv
YXQgcG9zaXRpb24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUs
IGZsb2F0IHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udERhdGEo
KSwgdGFiU2l6ZSwgcG9zaXRpb24pOyB9CisgICAgYm9vbCBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lk
dGgoKSBjb25zdDsKKyAgICBib29sIGZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxv
YXQgJndpZHRoKSBjb25zdDsgLy8gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MKKworICAgIGludCBl
bXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgaW50IGVt
cGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgaW50IGVt
cGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKKyAgICBjb25zdCBGb250
UmFuZ2VzJiBmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkKSBjb25zdDsKKyAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlh
bnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CisgICAgCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQpIGNvbnN0Owor
I2VuZGlmCisKKyAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKKyAgICBz
dGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIpOworCisgICAgLy8gQkVX
QVJFOiBJZiBpc0FmdGVyRXhwYW5zaW9uIGlzIHRydWUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxs
LCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZSBpbmNsdWRlcyBhIHRyYWlsaW5nIG9wcG9ydHVuaXR5
CisgICAgLy8gd2hpY2ggbWF5IG9yIG1heSBub3QgYWN0dWFsbHkgYmUgcHJlc2VudC4gUmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudCgpIGNv
bXBlbnNhdGVzCisgICAgLy8gZm9yIHRoaXMgYnkgZGVjcmVtZW50aW5nIHRoZSByZXR1cm5lZCB2
YWx1ZSBpZiBpc0FmdGVyRXhwYW5zaW9uIGlzIHRydWUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuCisg
ICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5n
VmlldyYsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOworCisgICAg
ZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEdseXBoT3Zl
cmZsb3cgfTsKKyAgICBDb2RlUGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7Cisg
ICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9CisgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3Rl
clJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOworCisgICAgYm9vbCBw
cmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVt
IEZvclRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVtcGhhc2lzLCBGb3JUZXh0RW1waGFz
aXMgfTsKKworICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCisg
ICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0g
Tm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3U2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lk
IGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
R2x5cGhCdWZmZXImLCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgZmxv
YXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkg
Y29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0
UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Owor
ICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYs
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworCisg
ICAgYm9vbCBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiwgR2x5
cGhEYXRhJikgY29uc3Q7CisKKyAgICBzdGF0aWMgYm9vbCBjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJl
YW0gYWR2YW5jZS4KKyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRF
bXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5
cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4
dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisKKyAgICBmcmllbmQgc3RydWN0
IFdpZHRoSXRlcmF0b3I7CisgICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0OworCitwdWJsaWM6CisjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCisgICAgYm9v
bCBlcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmVxdWFsRm9yVGV4dEF1dG9TaXppbmco
b3RoZXIubV9mb250RGVzY3JpcHRpb24pCisgICAgICAgICAgICAmJiBtX2xldHRlclNwYWNpbmcg
PT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nCisgICAgICAgICAgICAmJiBtX3dvcmRTcGFjaW5nID09
IG90aGVyLm1fd29yZFNwYWNpbmc7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBVc2VmdWwgZm9y
IGRlYnVnZ2luZyB0aGUgZGlmZmVyZW50IGZvbnQgcmVuZGVyaW5nIGNvZGUgcGF0aHMuCisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0Q29kZVBhdGgoQ29kZVBhdGgpOworICAgIHN0
YXRpYyBDb2RlUGF0aCBjb2RlUGF0aCgpOworICAgIHN0YXRpYyBDb2RlUGF0aCBzX2NvZGVQYXRo
OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXMoVHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVh
dHVyZXMgZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKKworICAgIHN0YXRpYyBjb25zdCB1
aW50OF90IHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XTsKKyAgICBzdGF0aWMgYm9v
bCBpc1JvdW5kaW5nSGFja0NoYXJhY3RlcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgICByZXR1
cm4gIShjICYgfjB4RkYpICYmIHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbY107CisgICAg
fQorCisgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKKyAgICBzdGF0aWMg
Ym9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQn
IHx8IGMgPT0gJ1xuJyB8fCBjID09IG5vQnJlYWtTcGFjZTsgfQorICAgIHN0YXRpYyBib29sIHRy
ZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2VJbkNvbXBsZXhTY3JpcHQoYykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIwMGQ7IH0KKyAg
ICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoVUNoYXIg
YykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9PSBz
b2Z0SHlwaGVuIHx8IGMgPT0gemVyb1dpZHRoU3BhY2UgfHwgKGMgPj0gMHgyMDBlICYmIGMgPD0g
MHgyMDBmKSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0gemVyb1dpZHRo
Tm9CcmVha1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7IH0KKyAgICBz
dGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CisKKyAgICBzdGF0
aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgewor
ICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICByZXR1cm4g
c3BhY2U7CisKKyAgICAgICAgaWYgKHRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHplcm9XaWR0aFNwYWNlOworCisgICAgICAgIHJldHVybiBjaGFy
YWN0ZXI7CisgICAgfQorCisgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3Qg
TENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3Bh
Y2VzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIGJvb2wgdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woKSBjb25zdCB7IHJldHVybiBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
OyB9CisgICAgRm9udEdseXBocyogZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMuZ2V0
KCk7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3Q7
CisKKyAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2Rl
ID0gbV9mb250RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKTsKKyAgICAgICAgVHlwZXNl
dHRpbmdGZWF0dXJlcyBmZWF0dXJlcyA9IHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CisK
KyAgICAgICAgc3dpdGNoICh0ZXh0UmVuZGVyaW5nTW9kZSkgeworICAgICAgICBjYXNlIEF1dG9U
ZXh0UmVuZGVyaW5nOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT3B0aW1pemVT
cGVlZDoKKyAgICAgICAgICAgIGZlYXR1cmVzICY9IH4oS2VybmluZyB8IExpZ2F0dXJlcyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZW9tZXRyaWNQcmVjaXNpb246CisgICAg
ICAgIGNhc2UgT3B0aW1pemVMZWdpYmlsaXR5OgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2Vy
bmluZyB8IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCkpIHsKKyAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgJj0gfktl
cm5pbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
Ok5vcm1hbEtlcm5pbmc6CisgICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtX2ZvbnRE
ZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKSB7CisgICAgICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgZmVhdHVyZXMg
Jj0gfkxpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNj
cmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0g
TGlnYXR1cmVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIH0KKworICAgIHN0YXRpYyBUeXBlc2V0
dGluZ0ZlYXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CisKKyAgICBGb250RGVz
Y3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CisgICAgbXV0YWJsZSBSZWZQdHI8Rm9udEdseXBo
cz4gbV9nbHlwaHM7CisgICAgZmxvYXQgbV9sZXR0ZXJTcGFjaW5nOworICAgIGZsb2F0IG1fd29y
ZFNwYWNpbmc7CisgICAgbXV0YWJsZSBib29sIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7Cisg
ICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNl
dHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBjb21wdXRlZCBmcm9tIG1fZm9udERlc2NyaXB0
aW9uLgorfTsKKwordm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIHBydW5l
VW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKK3ZvaWQgY2xlYXJXaWR0
aENhY2hlcygpOworCitpbmxpbmUgRm9udDo6fkZvbnQoKQoreworfQorCitpbmxpbmUgY29uc3Qg
U2ltcGxlRm9udERhdGEmIEZvbnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fZ2x5cGhzKTsKKyAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0
YShtX2ZvbnREZXNjcmlwdGlvbik7Cit9CisKK2lubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250
OjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVCht
X2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdCht
X2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworfQorCitpbmxpbmUgYm9vbCBGb250Ojppc0ZpeGVk
UGl0Y2goKSBjb25zdAoreworICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5
cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgRm9udFNl
bGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2dseXBo
cyA/IG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSA6IDA7Cit9CisKK2lubGluZSBmbG9hdCBGb250
Ojp0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghdGFiU2l6ZSkKKyAgICAgICAg
cmV0dXJuIGxldHRlclNwYWNpbmcoKTsKKyAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUgKiBm
b250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiRGVs
dGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsKKyAgICByZXR1
cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldpZHRo
IDogdGFiRGVsdGFXaWR0aDsKK30KKworfQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUg
PD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0
TGF5b3V0Kik7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBGb250X2gKLSNkZWZpbmUgRm9udF9oCisj
aWZuZGVmIEZvbnRDYXNjYWRlX2gKKyNkZWZpbmUgRm9udENhc2NhZGVfaAogCiAjaW5jbHVkZSAi
RGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0xMDYsMjQgKzEw
NiwyNCBAQCBwdWJsaWM6CiB9OwogR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGlu
ZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgaW50IGluZGV4KTsKIAotY2xhc3MgRm9udCB7CitjbGFzcyBGb250Q2FzY2FkZSB7CiBw
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29y
ZFNwYWNpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgRm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVy
U3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwogICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMg
b25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZlIGZv
bnQuCi0gICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9v
bCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOworICAgIFdF
QkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlz
UHJpbnRpbmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVu
dC4KICNpZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
UGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKyAgICBGb250Q2FzY2FkZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKICNlbmRpZgotICAgIH5Gb250
KCk7CisgICAgfkZvbnRDYXNjYWRlKCk7CiAKLSAgICBGb250KGNvbnN0IEZvbnQmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9udCYpOworICAgIEZvbnRDYXNj
YWRlKGNvbnN0IEZvbnRDYXNjYWRlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUm
IG9wZXJhdG9yPShjb25zdCBGb250Q2FzY2FkZSYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlJiBv
dGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAogICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3Jp
cHRpb247IH0KIApAQCAtMjQzLDcgKzI0Myw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICNpZiBF
TkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9yVGV4dEF1dG9TaXpp
bmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0CisgICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6
aW5nKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRvU2l6aW5nKG90aGVyLm1fZm9udERl
c2NyaXB0aW9uKQogICAgICAgICAgICAgJiYgbV9sZXR0ZXJTcGFjaW5nID09IG90aGVyLm1fbGV0
dGVyU3BhY2luZwpAQCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMg
PT0gJ1xuJyB8fCBjID09IG5vQnJlYWtTcGFjZTsgfQogICAgIHN0YXRpYyBib29sIHRyZWF0QXNa
ZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNv
bXBsZXhTY3JpcHQoYykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIwMGQ7IH0KICAgICBzdGF0
aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoVUNoYXIgYykgeyBy
ZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9PSBzb2Z0SHlw
aGVuIHx8IGMgPT0gemVyb1dpZHRoU3BhY2UgfHwgKGMgPj0gMHgyMDBlICYmIGMgPD0gMHgyMDBm
KSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0gemVyb1dpZHRoTm9CcmVh
a1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7IH0KLSAgICBzdGF0aWMg
Ym9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CisgICAgc3RhdGljIGJvb2wg
Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgVUNo
YXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKICAgICB7CkBAIC0zNDcsMzQgKzM0
NywzNCBAQCB2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgcHJ1bmVVbnJl
ZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwogdm9pZCBjbGVhcldpZHRoQ2Fj
aGVzKCk7CiAKLWlubGluZSBGb250Ojp+Rm9udCgpCitpbmxpbmUgRm9udENhc2NhZGU6On5Gb250
Q2FzY2FkZSgpCiB7CiB9CiAKLWlubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udDo6cHJp
bWFyeUZvbnREYXRhKCkgY29uc3QKK2lubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSYgRm9udENh
c2NhZGU6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsK
ICAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YShtX2ZvbnREZXNjcmlw
dGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250OjpmYWxsYmFja1Jhbmdl
c0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRD
YXNjYWRlOjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIEFT
U0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwogfQogCi1pbmxpbmUgYm9vbCBGb250Ojpp
c0ZpeGVkUGl0Y2goKSBjb25zdAoraW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRj
aCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKICAgICByZXR1cm4gbV9nbHlwaHMt
PmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBGb250U2VsZWN0
b3IqIEZvbnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CitpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250
Q2FzY2FkZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9nbHlwaHMgPyBt
X2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1pbmxpbmUgZmxvYXQgRm9udDo6dGFi
V2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXplLCBm
bG9hdCBwb3NpdGlvbikgY29uc3QKK2lubGluZSBmbG9hdCBGb250Q2FzY2FkZTo6dGFiV2lkdGgo
Y29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBw
b3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXRhYlNpemUpCiAgICAgICAgIHJldHVybiBsZXR0
ZXJTcGFjaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJGb250R2x5cGhzLmgiCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gbWF5IG5vdCB3b3JrIGlmIHRoZSBlbXBoYXNp
cyBtYXJrIHVzZXMgYSBjb21wbGV4IHNjcmlwdCwgYnV0IG5vbmUgb2YgdGhlCiAvLyBzdGFuZGFy
ZCBlbXBoYXNpcyBtYXJrcyBkbyBzby4KLWJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhE
YXRhKGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0
Citib29sIEZvbnRDYXNjYWRlOjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBHbHlwaERhdGEmIGdseXBoRGF0YSkgY29uc3QKIHsKICAgICBpZiAobWFy
ay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY2LDcgKzY2LDcgQEAgYm9v
bCBGb250OjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29ucwogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aykgY29uc3QKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaykgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0YTsKICAg
ICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKQEAg
LTgwLDcgKzgwLDcgQEAgaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taQog
ICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiB9CiAKLWlu
dCBGb250OjplbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29u
c3QKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CiAgICAgaWYg
KCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCkBAIC05NCw3
ICs5NCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b20KICAgICBy
ZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKIH0KIAotaW50IEZv
bnQ6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0Citp
bnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CiAgICAgaWYgKCFnZXRF
bXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCkBAIC0xMDgsNyArMTA4
LDcgQEAgaW50IEZvbnQ6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taQogICAgIHJldHVy
biBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZsb2F0IEZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lz
T3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBp
bnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9y
VGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC0x
MzgsNyArMTM4LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbAog
ICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
IHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2Zv
bnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAg
LTE1NCw3ICsxNTQsNyBAQCBmbG9hdCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRl
CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRy
YXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBn
bHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4CiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZl
ciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgp
KSk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogI2lm
ICFFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFVOVVNFRF9QQVJBTShydW4pOwpAQCAtMjMxLDcgKzIz
MSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXAKICAgICByZXR1
cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaSksIGdseXBo
QnVmZmVyLmdseXBoQXQoaSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAg
IGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAt
MjYwLDcgKzI2MCw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb24K
ICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBtYXJrQnVmZmVyLCBzdGFydFBvaW50
KTsKIH0KIAotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Zmxv
YXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZs
b3cpIGNvbnN0CiB7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4sIGZhbGxiYWNrRm9u
dHMsIGdseXBoT3ZlcmZsb3cpOwogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMjc2
LDcgKzI3Niw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnMKICAg
ICByZXR1cm4gaXQubV9ydW5XaWR0aFNvRmFyOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0
UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7CkBA
IC0yOTUsNyArMjk1LDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxl
VAogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsK
IH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CitpbnQg
Rm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAg
ZmxvYXQgZGVsdGEgPSB4OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDggKzI5LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgi
CiAKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMjY0LDcgKzI2NCw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFG
b3JTeXN0ZW0KICAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCiAgICAgICAgIHJldHVy
biBHbHlwaERhdGEoKTsKIAotICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnRE
YXRhLT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykpCisgICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRp
Y2FsR2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAg
ICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwogCiAgICAgR2x5cGhEYXRh
IGZhbGxiYWNrR2x5cGhEYXRhOwpAQCAtMjc0LDcgKzI3NCw3IEBAIEdseXBoRGF0YSBGb250R2x5
cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW0KICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0
ZW1GYWxsYmFja0ZvbnREYXRhLT52YXJpYW50Rm9udERhdGEoZGVzY3JpcHRpb24sIHZhcmlhbnQp
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxW
YXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICghRm9u
dDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tH
bHlwaERhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAg
aWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0ds
eXBoRGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2soKSkKICAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yTm9uQ0pL
Q2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhP
cmllbnRhdGlvbigpLCBmYWxsYmFja0dseXBoRGF0YSk7CiAgICAgfQogCkBAIC0zMjIsNyArMzIy
LDcgQEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBH
bHlwaERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAg
aWYgKGRhdGEuZm9udERhdGEpIHsKICAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5p
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIUZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgICAgICAgICAgICAgaWYgKCFGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRl
c2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoIWRhdGEuZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkKIC8vIHRoZSB3aWR0aCBv
ZiB0aGUgZHJhd24gdGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5vdGljZWFibGUgZGlm
ZmVyZW5jZXMgaW4gbGF5b3V0LgogI2lmICFQTEFURk9STShJT1MpCiAjaWYgIVVTRShXSU5HREkp
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC00MzksNyArNDM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bgogfQogI2VuZGlmCiAjZWxzZQotZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25z
dCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ0OCw3ICs0NDgsNyBAQCBmbG9hdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU2lt
cGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEYKICAgICBmb250LmRyYXdHbHlw
aHModGhpcywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDY1LDEyICs0NjUsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdFbXBoYXNpc01hcmtzKAogfQogCiAvLyBGSVhNRTogQmV0dGVyIG1lcmdlIHRoZSBpT1MgYW5k
IG5vbi1pT1MgZGlmZmVyZW5jZXMuIEluIHBhcnRpY3VsYXIsIG1ha2UgdGhpcyBtZXRob2QgdXNl
IHRoZQotLy8gcmV0dXJuZWQgd2lkdGggb2YgdGhlIGRyYXduIHRleHQsIEZvbnQ6OmRyYXdUZXh0
KCksIGluc3RlYWQgb2YgY29tcHV0aW5nIGl0LiBFbnN1cmUgdGhhdCB0aGVyZQorLy8gcmV0dXJu
ZWQgd2lkdGggb2YgdGhlIGRyYXduIHRleHQsIEZvbnRDYXNjYWRlOjpkcmF3VGV4dCgpLCBpbnN0
ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKIC8vIGFyZW4ndCBub3RpY2Vh
YmxlIGRpZmZlcmVuY2VzIGluIGxheW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCiAjaWYgIVBMQVRG
T1JNKElPUykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udDo6
Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogI2Vsc2UK
LWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnQ6OkN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0
YXR1cywgaW50IGxlbmd0aCkKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiwgQmlkaVN0YXR1cyogc3RhdHVzLCBpbnQgbGVuZ3RoKQogI2VuZGlm
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTUxNSw3ICs1MTUsNyBAQCBmbG9h
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zCiAgICAgICAgIGZvbnQuZHJhd1Rl
eHQodGhpcywgc3VicnVuLCBjdXJyUG9pbnQsIDAsIC0xLCBjdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24pOwogCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBIYXZlIEZvbnQ6OmRyYXdUZXh0IHJldHVybiB0aGUgd2lkdGggb2Ygd2hhdCBpdCBkcmV3
IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byByZS1tZWFzdXJlIGhlcmUuCisgICAgICAgIC8vIEZJ
WE1FOiBIYXZlIEZvbnRDYXNjYWRlOjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgogICAgICAg
ICBpZiAoYmlkaVJ1bikKICAgICAgICAgICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQud2lkdGgoc3Vi
cnVuKSwgMCk7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkRh
c2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCkBAIC0zNTYsMTYgKzM1Niwx
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgIVBMQVRGT1JN
KElPUykKLSAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAg
dm9pZCBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAjZWxzZQotICAgICAgICBm
bG9hdCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgZmxvYXQgZHJhd1RleHQo
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2VuZGlmCi0gICAgICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mICwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSk7CisgICAgICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYgLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsK
ICNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOworICAgICAgICB2
b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZv
bnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogI2Vsc2UKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZv
bnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3Ro
ID0gLTEpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3QmlkaVRleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAtMSk7CiAjZW5kaWYK
ICAgICAgICAgZW51bSBSb3VuZGluZ01vZGUgewogICAgICAgICAgICAgUm91bmRBbGxTaWRlcywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OCBAQAogI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKICNl
bmRpZgotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
NDE5LDcgKzQxOSw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnMK
ICAgICAgICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3Ro
OwogICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgY29kZVVu
aXRzWzBdID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBj
b2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgogCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbGVmdFRydW5jYXRlVG9CdWZm
ZXIoY29uCiAgICAgcmV0dXJuIGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsKIH0KIAotc3Rh
dGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGluZ0hhY2tzKQor
c3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiByZW5kZXJlciwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRp
bmdIYWNrcykKIHsKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIGlm
IChkaXNhYmxlUm91bmRpbmdIYWNrcykKQEAgLTIwMCw3ICsyMDAsNyBAQCBzdGF0aWMgZmxvYXQg
c3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuCiAgICAgcmV0dXJuIHJlbmRlcmVyLndpZHRoKHJ1
bik7CiB9CiAKLXN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBUcnVuY2F0aW9uRnVuY3Rpb24g
dHJ1bmNhdGVUb0J1ZmZlciwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcywgZmxvYXQqIHJlc3Vs
dFdpZHRoID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsICBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9
IGZhbHNlKQorc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBUcnVuY2F0aW9uRnVu
Y3Rpb24gdHJ1bmNhdGVUb0J1ZmZlciwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcywgZmxvYXQq
IHJlc3VsdFdpZHRoID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
ICBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVu
Y2F0ZSA9IGZhbHNlKQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gc3RyaW5nOwpAQCAtMjk1LDQyICsyOTUsNDIgQEAgc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0
cmluZyhjb25zdCBTdHJpbgogICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLCB0cnVuY2F0
ZWRMZW5ndGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShj
b25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVu
YWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQorU3RyaW5nIFN0cmlu
Z1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1h
eFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0cmlu
ZywgbWF4V2lkdGgsIGZvbnQsIGNlbnRlclRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3VuZGlu
Z0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShjb25z
dCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQorU3RyaW5nIFN0cmluZ1Ry
dW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lk
dGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBt
YXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNr
cyk7CiB9CiAKLWZsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3Vu
ZGluZ0hhY2tzKQorZmxvYXQgU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aChjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBl
bmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiBzdHJpbmdXaWR0aChmb250LCBTdHJp
bmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwg
IWVuYWJsZVJvdW5kaW5nSGFja3MpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50
ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBm
bG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0IGN1c3Rv
bVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9t
VHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJp
Z2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywg
ZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRU
cnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVS
b3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21U
cnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6bGVm
dFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9u
dCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZs
b2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9t
VHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OmxlZnRUcnVu
Y2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywg
ZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhz
dHJpbmcsIG1heFdpZHRoLCBmb250LCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENs
aXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tz
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdo
dENsaXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91
bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
LCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQogewogICAgIHJldHVybiB0cnVu
Y2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb0NoYXJhY3RlckJ1
ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5n
VHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1h
eFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxl
Um91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlw
c2lzLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVu
Y2F0ZSkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJp
bmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVs
ZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVT
dHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9Xb3JkQnVmZmVyLCAhZW5h
YmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1bmNhdGUpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0
cmluZ1RydW5jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMyArMzMsMjMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIEZvbnQ7Ci0gICAgCi0gICAgY2xhc3Mg
U3RyaW5nVHJ1bmNhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90IHsgRGlzYWJsZVJvdW5kaW5nSGFja3MsIEVuYWJsZVJvdW5kaW5nSGFja3Mg
fTsKLQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNlbnRlclRydW5jYXRl
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91
bmRpbmdIYWNrcyk7Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50
ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVu
YWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZElu
c2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9
IDApOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUo
Y29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBsZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5n
JiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3Qs
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZs
b2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxv
YXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOwotICAgICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIHJpZ2h0Q2xpcFRvV29yZChjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3Vs
dFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1
bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSk7Citj
bGFzcyBGb250Q2FzY2FkZTsKKworY2xhc3MgU3RyaW5nVHJ1bmNhdG9yIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBF
bmFibGVSb3VuZGluZ0hhY2tzIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5n
IGNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250
Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tz
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3Qg
U3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgU3RyaW5nIHJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0
V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmlu
ZyBsZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJv
b2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENs
aXBUb0NoYXJhY3Rlcihjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENh
c2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9v
bCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVt
ZW50V2lkdGggPSAwKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJpZ2h0Q2xp
cFRvV29yZChjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUm
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91
bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lk
dGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFsc2UpOwogCi0gICAgICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25zdCBGb250JiwgRW5h
YmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgIH07Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IHdpZHRoKGNvbnN0IFN0cmluZyYsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5n
SGFja3MpOworfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEdseXBoQnVmZmVyOwogY2xhc3MgR2x5cGhU
b1BhdGhUcmFuc2xhdG9yOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgdmly
dHVhbCB+UmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAg
ICAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQm
LCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3Vy
cmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXpl
ZFNwYWNlc1N0cmluZ0NhY2hlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hh
cjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25l
ZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQg
dG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQg
ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYg
Y2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmly
dHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0
ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVG
b250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCA9
IDA7CiAgICAgICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRv
cj4gY3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29u
c3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAg
LTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
KQorV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRFbXBoYXNp
cykKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9jdXJyZW50
Q2hhcmFjdGVyKDApCkBAIC01Nyw3ICs1Nyw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0
b3IoY29uc3QgRm9udCoKICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1faXNBZnRlckV4cGFu
c2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExU
UiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCht
X3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsK
ICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1fcnVuLmFsbG93c1RyYWlsaW5nRXhw
YW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LS07CiAKQEAg
LTIyOSw5ICsyMjksOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUlu
CiAgICAgICAgICAgICBpZiAod2lkdGggJiYgbV9mb250LT5sZXR0ZXJTcGFjaW5nKCkpCiAgICAg
ICAgICAgICAgICAgd2lkdGggKz0gbV9mb250LT5sZXR0ZXJTcGFjaW5nKCk7CiAKLSAgICAgICAg
ICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250OjpjYW5FeHBhbmRB
cm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwotICAgICAgICAgICAgYm9vbCB0cmVhdEFz
U3BhY2UgPSBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UgfHwgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgeworICAgICAgICAgICAgc3RhdGljIGJvb2wgZXhw
YW5kQXJvdW5kSWRlb2dyYXBocyA9IEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpOworICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250
Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBpZiAodHJlYXRB
c1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnRDYXNjYWRlOjppc0NKS0lk
ZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3RlcikpKSB7CiAgICAgICAgICAgICAgICAgLy8gRGlzdHJp
YnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBhbnNpb24g
b3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAgICAgICAgICAgIGlmIChtX2V4cGFuc2lv
bikgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhw
YW5zaW9uOwpAQCAtMjY4LDkgKzI2OCwxMCBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgICAgICAgICAgbV9pc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpICYm
IGdseXBoQnVmZmVyICYmIEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICBp
ZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpICYmIGdseXBoQnVmZmVyICYmIEZvbnRDYXNj
YWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgewogICAgICAgICAgICAgY2hhcmFjdGVyc1Ry
ZWF0ZWRBc1NwYWNlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+c2l6ZSgpLAog
ICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFj
ZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhCdWZmZXItPmFk
dmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkud2lkdGgoKSA6IDAsIHdpZHRoKSkpOwor
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRzKSB7CiAgICAg
ICAgICAgICBib3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwpAQCAtMjc4
LDcgKzI3OSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAg
ICAgICAgICAgICAgICBtX2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAt
Ym91bmRzLngoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMg
JiYgIUZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoY2hhcmFjdGVyKSkKKyAgICAgICAgaWYg
KG1fZm9yVGV4dEVtcGhhc2lzICYmICFGb250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNp
cyhjaGFyYWN0ZXIpKQogICAgICAgICAgICAgZ2x5cGggPSAwOwogCiAgICAgICAgIC8vIEFkdmFu
Y2UgcGFzdCB0aGUgY2hhcmFjdGVyIHdlIGp1c3QgZGVhbHQgd2l0aC4KQEAgLTI4OCw3ICsyODks
NyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAKICAgICAgICAg
Ly8gRm9yY2UgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIHRvIGRldGVybWluZSB3b3JkIGJvdW5k
YXJpZXMgZm9yIHRoZSByb3VuZGluZyBoYWNrCiAgICAgICAgIC8vIHRvIGJlIGludGVnZXIgd2lk
dGgsIHNvIGZvbGxvd2luZyB3b3JkcyB3aWxsIHN0YXJ0IG9uIGFuIGludGVnZXIgYm91bmRhcnku
Ci0gICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnQ6OmlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHsKKyAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29y
ZFJvdW5kaW5nKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoYXJh
Y3RlcikpIHsKICAgICAgICAgICAgIHdpZHRoID0gY2VpbGYod2lkdGgpOwogCiAgICAgICAgICAg
ICAvLyBTaW5jZSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nIGNhbiBsb3NlIHByZWNpc2lvbiBpZiB3
ZSBpbmNsdWRlIG1lYXN1cmVtZW50cyBmb3IKQEAgLTMwMSw3ICszMDIsNyBAQCBpbmxpbmUgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgInJvdW5kaW5n
IGhhY2sgY2hhcmFjdGVyIiwgaWYgc28sIGFkanVzdAogICAgICAgICAgICAgLy8gd2lkdGggc28g
dGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4K
LSAgICAgICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSkgPCBtX3J1bi5sZW5n
dGgoKSAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcigqKHRleHRJdGVyYXRvci5jaGFy
YWN0ZXJzKCkpKSkKKyAgICAgICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAm
JiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSkg
PCBtX3J1bi5sZW5ndGgoKSAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIo
Kih0ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpKSkpCiAgICAgICAgICAgICAgICAgfHwgKG1fcnVu
LmFwcGx5UnVuUm91bmRpbmcoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dEl0ZXJhdG9y
LmN1cnJlbnRDaGFyYWN0ZXIoKSkgPj0gbV9ydW4ubGVuZ3RoKCkpKSB7CiAgICAgICAgICAgICAg
ICAgZmxvYXQgdG90YWxXaWR0aCA9IHdpZHRoU2luY2VMYXN0Um91bmRpbmcgKyB3aWR0aDsKICAg
ICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nID0gY2VpbGYodG90YWxXaWR0aCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNp
Zm5kZWYgV2lkdGhJdGVyYXRvcl9oCiAjZGVmaW5lIFdpZHRoSXRlcmF0b3JfaAogCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHR2x5cGgu
aCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTMw
LDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3Mg
Rm9udENhc2NhZGU7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwog
Y2xhc3MgVGV4dFJ1bjsKQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IEdseXBoRGF0YTsKIHN0cnVj
dCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9y
R2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAg
V2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRG
b3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAog
ICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wgYWR2
YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC01OCw3ICs1
OCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+JiBhcmFiaWNG
b3JtcygpIHsgcmV0dXJuIG1fYXJhYmljRm9ybXM7IH0KICNlbmRpZgogCi0gICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnQmIGZvbnQpCisgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KQogICAgIHsKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogICAgICAgICBpZiAoIWZvbnQuaXNQ
cmludGVyRm9udCgpKQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAK
LSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9udDsK
IAogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2ltcG9ydCAiQ29yZUdy
YXBoaWNzU1BJLmgiCiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgotI2ltcG9ydCAiRm9udC5oIgor
I2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lSU9TLmgiCiAjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
U2ltcGxlRm9udERhdGFJT1MubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksOCArMjksOCBAQAogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBv
cnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENh
Y2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9u
LmgiCiAjaW1wb3J0ICJGb250U2VydmljZXNJT1MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJD
b21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJh
dG9yLmgiCkBAIC00MywxMyArNDMsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBU
ZXh0TGF5b3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc05lZWRlZChSZW5kZXJUZXh0
KiB0ZXh0LCBjb25zdCBGb250JiBmb250KQorICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRl
clRleHQqIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIHsKICAgICAgICAgVGV4
dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0
LCB0ZXh0LT5zdHlsZSgpKTsKLSAgICAgICAgcmV0dXJuIGZvbnQuY29kZVBhdGgocnVuKSA9PSBG
b250OjpDb21wbGV4OworICAgICAgICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnRD
YXNjYWRlOjpDb21wbGV4OwogICAgIH0KIAotICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCogdGV4
dCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBvcykKKyAgICBUZXh0TGF5b3V0KFJlbmRlclRl
eHQqIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zKQogICAgICAgICA6
IG1fZm9udChmb250KQogICAgICAgICAsIG1fcnVuKGNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9u
dCwgeFBvcykpCiAgICAgICAgICwgbV9jb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGxl
eFRleHRDb250cm9sbGVyPigmbV9mb250LCBtX3J1biwgdHJ1ZSkpCkBAIC02MCw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShmcm9tLCAwLCBC
eVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQgYmVmb3JlV2lkdGgg
PSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaWYgKG1fZm9udC53b3Jk
U3BhY2luZygpICYmIGZyb20gJiYgRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkKKyAg
ICAgICAgaWYgKG1fZm9udC53b3JkU3BhY2luZygpICYmIGZyb20gJiYgRm9udENhc2NhZGU6OnRy
ZWF0QXNTcGFjZShtX3J1bltmcm9tXSkpCiAgICAgICAgICAgICBiZWZvcmVXaWR0aCArPSBtX2Zv
bnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20gKyBs
ZW4sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBmbG9hdCBhZnRl
cldpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7CkBAIC02OCw3ICs2OCw3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB4UG9zKQor
ICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyVGV4dCogdGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgewogICAgICAgICBUZXh0UnVu
IHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIHRl
eHQtPnN0eWxlKCkpOwogICAgICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0LT50ZXh0
TGVuZ3RoKCkpOwpAQCAtNzgsMjUgKzc4LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBy
dW47CiAgICAgfQogCi0gICAgLy8gQ29tcGxleFRleHRDb250cm9sbGVyIGhhcyBvbmx5IHJlZmVy
ZW5jZXMgdG8gaXRzIEZvbnQgYW5kIFRleHRSdW4gc28gdGhleSBtdXN0IGJlIGtlcHQgYWxpdmUg
aGVyZS4KLSAgICBGb250IG1fZm9udDsKKyAgICAvLyBDb21wbGV4VGV4dENvbnRyb2xsZXIgaGFz
IG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9udENhc2NhZGUgYW5kIFRleHRSdW4gc28gdGhleSBt
dXN0IGJlIGtlcHQgYWxpdmUgaGVyZS4KKyAgICBGb250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgVGV4
dFJ1biBtX3J1bjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGxleFRleHRDb250cm9sbGVyPiBt
X2NvbnRyb2xsZXI7CiB9OwogCi1QYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnQ6OmNyZWF0ZUxh
eW91dChSZW5kZXJUZXh0KiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFj
ZSkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxheW91
dChSZW5kZXJUZXh0KiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkg
Y29uc3QKIHsKICAgICBpZiAoIWNvbGxhcHNlV2hpdGVTcGFjZSB8fCAhVGV4dExheW91dDo6aXNO
ZWVkZWQodGV4dCwgKnRoaXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFRleHRMYXlvdXQodGV4dCwgKnRoaXMsIHhQb3MpKTsKIH0KIAotdm9pZCBG
b250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCogbGF5b3V0KQordm9pZCBGb250Q2FzY2FkZTo6
ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqIGxheW91dCkKIHsKICAgICBkZWxldGUgbGF5b3V0Owog
fQogCi1mbG9hdCBGb250Ojp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMpCiB7CiAgICAgcmV0dXJuIGxheW91dC53aWR0aChmcm9tLCBsZW4sIGZhbGxi
YWNrRm9udHMpOwogfQpAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbmxpbmUgQ0dGbG9hdCBj
ZWlsQ0dGbG9hdChDR0Zsb2EKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY2VpbChm
KSk7CiB9CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNv
bnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3Jp
dGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAg
OiBtX2ZvbnQoKmZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2lzTFRST25seSh0cnVl
KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRD
b250cm8KICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7
CiAgICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1fYWZ0ZXJFeHBhbnNpb247Ci0gICAg
ICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250OjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlz
QWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgp
LCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAgIGlm
IChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQog
ICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwogCkBAIC02MTUsNyArNjE1
LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21wbGV4VGV4dFJ1bnNbciAr
IDFdLT5jaGFyYWN0ZXJzKCkgKyBtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmluZGV4QXQoMCkp
OwogCi0gICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnQ6OnRyZWF0QXNTcGFjZShj
aCk7CisgICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFz
U3BhY2UoY2gpOwogICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZv
bnREYXRhLnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAgICAgIENHU2l6ZSBhZHZh
bmNlID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRoLCBhZHZhbmNlc1tpXS5o
ZWlnaHQpIDogYWR2YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtNjI1LDcgKzYyNSw3
IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKIAogICAgICAgICAg
ICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCiAgICAgICAgICAgICAgICAg
YWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aChmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgp
LCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpICYmICF0
cmVhdEFzU3BhY2UpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFz
WmVyb1dpZHRoU3BhY2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gMDsKICAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnREYXRhLnNwYWNl
R2x5cGgoKTsKICAgICAgICAgICAgIH0KQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uu
d2lkdGggKz0gbV9mb250LmxldHRlclNwYWNpbmcoKTsKIAogICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoKSkgeworICAg
ICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dy
YXBoT3JTeW1ib2woY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgdGhl
IHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9ydHVu
aXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9uKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhw
YW5zaW9uOwpAQCAtNjg1LDEyICs2ODUsMTMgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmFkanVzdEdseXBocwogICAgICAgICAgICAgLy8gV2UgYWRqdXN0IHRoZSB3aWR0aCBvZiB0aGUg
bGFzdCBjaGFyYWN0ZXIgb2YgYSAid29yZCIgdG8gZW5zdXJlIGFuIGludGVnZXIgd2lkdGguIAog
ICAgICAgICAgICAgLy8gRm9yY2UgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIHRvIGRldGVybWlu
ZSB3b3JkIGJvdW5kYXJpZXMgZm9yIHRoZSByb3VuZGluZyBoYWNrIAogICAgICAgICAgICAgLy8g
dG8gYmUgaW50ZWdlciB3aWR0aCwgc28gdGhlIGZvbGxvd2luZyB3b3JkcyB3aWxsIHN0YXJ0IG9u
IGFuIGludGVnZXIgYm91bmRhcnkuIAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJv
dW5kaW5nKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoY2gpKSAKKyAgICAgICAg
ICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5k
aW5nSGFja0NoYXJhY3RlcihjaCkpIAogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBj
ZWlsQ0dGbG9hdChhZHZhbmNlLndpZHRoKTsgCiAKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSAicm91bmRpbmcgaGFjayBjaGFyYWN0ZXIiLCBp
ZiBzbywgYWRqdXN0IHRoZSAKLSAgICAgICAgICAgIC8vIHdpZHRoIHNvIHRoYXQgdGhlIHRvdGFs
IHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91bmRhcnkuIAotICAgICAgICAgICAg
aWYgKChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmICFsYXN0R2x5cGggJiYgRm9udDo6aXNS
b3VuZGluZ0hhY2tDaGFyYWN0ZXIobmV4dENoKSkgfHwgKG1fcnVuLmFwcGx5UnVuUm91bmRpbmco
KSAmJiBsYXN0R2x5cGgpKSB7IAorICAgICAgICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90
YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4KKyAgICAgICAgICAg
IGJvb2wgbmVlZHNSb3VuZGluZ0ZvckNoYXJhY3RlciA9IG1fcnVuLmFwcGx5V29yZFJvdW5kaW5n
KCkgJiYgIWxhc3RHbHlwaCAmJiBGb250Q2FzY2FkZTo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIo
bmV4dENoKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JvdW5kaW5nRm9yQ2hhcmFjdGVyIHx8ICht
X3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgbGFzdEdseXBoKSkgewogICAgICAgICAgICAgICAg
IENHRmxvYXQgdG90YWxXaWR0aCA9IHdpZHRoU2luY2VMYXN0Q29tbWl0ICsgYWR2YW5jZS53aWR0
aDsgCiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RDb21taXQgPSBjZWlsQ0dGbG9hdCh0
b3RhbFdpZHRoKTsgCiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBleHRyYVdpZHRoID0gd2lkdGhT
aW5jZUxhc3RDb21taXQgLSB0b3RhbFdpZHRoOyAKQEAgLTcwOSw3ICs3MTAsNyBAQCB2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgd2lkdGhT
aW5jZUxhc3RDb21taXQgKz0gYWR2YW5jZS53aWR0aDsgCiAKICAgICAgICAgICAgIC8vIEZJWE1F
OiBDb21iaW5pbmcgbWFya3Mgc2hvdWxkIHJlY2VpdmUgYSB0ZXh0IGVtcGhhc2lzIG1hcmsgaWYg
dGhleSBhcmUgY29tYmluZSB3aXRoIGEgc3BhY2UuCi0gICAgICAgICAgICBpZiAobV9mb3JUZXh0
RW1waGFzaXMgJiYgKCFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoKSB8fCAoVV9HRVRf
R0NfTUFTSyhjaCkgJiBVX0dDX01fTUFTSykpKQorICAgICAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICghRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoY2gpIHx8IChV
X0dFVF9HQ19NQVNLKGNoKSAmIFVfR0NfTV9NQVNLKSkpCiAgICAgICAgICAgICAgICAgZ2x5cGgg
PSAwOwogCiAgICAgICAgICAgICBhZHZhbmNlLmhlaWdodCAqPSAtMTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJl
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRl
OwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBUZXh0UnVuOwogCkBAIC01MCw3ICs1MCw3
IEBAIGVudW0gR2x5cGhJdGVyYXRpb25TdHlsZSB7IEluY2x1ZGVQYXJ0aWEKIC8vIGNvbXBsZXgg
c2NyaXB0cyBvbiBPUyBYLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKIHB1YmxpYzoK
LSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mLCBi
b29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
ID0gZmFsc2UpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSos
IGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFs
c2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBn
bHlwaHMgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCiAgICAgdm9pZCBhZHZhbmNlKHVu
c2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cyA9IDApOwpAQCAtMTM4LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2ln
bmVkLCAxNj4gbV9ydW5JbmRpY2VzOwogICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IG1fZ2x5cGhD
b3VudEZyb21TdGFydFRvSW5kZXg7CiAKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29u
c3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKICAgICBi
b29sIG1faXNMVFJPbmx5OwogICAgIGJvb2wgbV9tYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlv
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXJDb3JlVGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcs
OCBAQAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ29y
ZVRleHRTUEkuaCIKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCkBAIC00MCwxOSArNDAsMTkgQEAKIAogQGludGVy
ZmFjZSBXZWJDYXNjYWRlTGlzdCA6IE5TQXJyYXkgewogICAgIEBwcml2YXRlCi0gICAgY29uc3Qg
V2ViQ29yZTo6Rm9udCogX2ZvbnQ7CisgICAgY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqIF9m
b250OwogICAgIFVDaGFyMzIgX2NoYXJhY3RlcjsKICAgICBOU1VJbnRlZ2VyIF9jb3VudDsKICAg
ICBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+LCAxNj4gX2ZvbnREZXNjcmlw
dG9yczsKIH0KIAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250Kilmb250
IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXI7CistIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0
IFdlYkNvcmU6OkZvbnRDYXNjYWRlKilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXI7
CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkNhc2NhZGVMaXN0CiAKLS0gKGlkKWluaXRX
aXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udCopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hh
cmFjdGVyCistIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNjYWRlKilm
b250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXIKIHsKICAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTYwLDcgKzYwLDcgQEAgLSAoaWQp
aW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250KgogICAgIF9mb250ID0gZm9udDsKICAg
ICBfY2hhcmFjdGVyID0gY2hhcmFjdGVyOwogCi0gICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNj
YWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udCBoYXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxp
emUgYWxsIG9mIGl0cworICAgIC8vIEJ5IHRoZSB0aW1lIGEgV2ViQ2FzY2FkZUxpc3QgaXMgdXNl
ZCwgdGhlIEZvbnRDYXNjYWRlIGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwg
b2YgaXRzCiAgICAgLy8gRm9udERhdGEsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZv
bnRDYWNoZS4KICAgICB3aGlsZSAoIV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9jb3VudCkuaXNO
dWxsKCkpCiAgICAgICAgIF9jb3VudCsrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaWYgIVBMQVRGT1JNKElPUykKIAog
I2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJG
b250Q2FzY2FkZS5oIgogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKICNpbXBvcnQgIk5TRm9udFNQSS5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7
CkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXgKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7
CiB9CiAKLWZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JU
ZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5p
dGlhbEFkdmFuY2U7CiAKQEAgLTc1LDcgKzc1LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JDb21wbAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91
ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTkzLDcgKzkzLDcgQEAgZmxvYXQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0
WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2
YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywg
Z2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZQogICAgIGRyYXdFbXBoYXNpc01hcmtz
KGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsg
aW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAg
ICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKQEAgLTExNiwxMyArMTE2LDEzIEBAIGZsb2F0IEZvbnQ6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb24KICAgICByZXR1cm4gY29udHJvbGxlci50b3Rh
bFdpZHRoKCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsK
ICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlh
bEdseXBocyk7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Ojpmb250RGF0YUZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK2NvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FzY2FkZTo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50IHZh
cmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNpemVfdCBi
YXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRm9u
dC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJ
LmgiCiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgpAQCAtNTgsMTIgKzU4LDEyIEBAIFNPRlRfTElO
SyhVSUtpdCwgX1VJS2l0R2V0VGV4dEVmZmVjdHNDYXQKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCitib29s
IEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFw
aHNJbkNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5NSw3ICsx
OTUsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAjZW5k
aWYKIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBj
b25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQ
b2ludCkgY29uc3QKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEg
PSBmb250LT5wbGF0Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBA
IC01MjYsNyArNTI2LDcgQEAgdm9pZCBNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2Uo
KQogICAgIH0gd2hpbGUgKG1fZm9udERhdGEtPmlzU1ZHRm9udCgpICYmIG1faW5kZXggPCBtX2ds
eXBoQnVmZmVyLnNpemUoKSk7CiB9CiAKLURhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRlcnNl
Y3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0
T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdAorRGFzaEFycmF5IEZv
bnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVF
eHRlbnRzKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAg
ICByZXR1cm4gRGFzaEFycmF5KCk7CkBAIC01MzQsNyArNTM0LDcgQEAgRGFzaEFycmF5IEZvbnQ6
OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaQogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwog
ICAgIGdseXBoQnVmZmVyLnNhdmVPZmZzZXRzSW5TdHJpbmcoKTsKICAgICBmbG9hdCBkZWx0YVg7
Ci0gICAgaWYgKGNvZGVQYXRoKHJ1bikgIT0gRm9udDo6Q29tcGxleCkKKyAgICBpZiAoY29kZVBh
dGgocnVuKSAhPSBGb250Q2FzY2FkZTo6Q29tcGxleCkKICAgICAgICAgZGVsdGFYID0gZ2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwgMCwgcnVuLmxlbmd0aCgpLCBnbHlwaEJ1
ZmZlcik7CiAgICAgZWxzZQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KHJ1biwgMCwgcnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7CkBAIC01OTAs
NyArNTkwLDcgQEAgRGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaQogfQog
I2VuZGlmCiAKLWJvb2wgRm9udDo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QK
K2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0CiB7
CiAjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4g
MTA5MAogICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQ
YWdlTWFjLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2luY2x1ZGUgIkNvcmVUZXh0
U1BJLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIGJvb2wgc2hv
dWxkVXNlQ29yZVRleHQoY29uc3QgVUNoYQogICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkud2lkdGhWYXJpYW50KCkgIT0gUmVndWxhcldpZHRoIHx8IGZvbnREYXRhLT5oYXNWZXJ0aWNh
bEdseXBocygpKSB7CiAgICAgICAgIC8vIElkZW9ncmFwaHMgZG9uJ3QgaGF2ZSBhIHZlcnRpY2Fs
IHZhcmlhbnQgb3Igd2lkdGggdmFyaWFudHMuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCFGb250Ojppc0NKS0lk
ZW9ncmFwaChidWZmZXJbaV0pKQorICAgICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJ
ZGVvZ3JhcGgoYnVmZmVyW2ldKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2ltcG9ydCAiQ29yZUdyYXBoaWNz
U1BJLmgiCiAjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCi0j
aW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkN1cnNv
ci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZv
bnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
d2FrL1dLR3JhcGhpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XS0dyYXBoaWNzLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5o
IgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIldl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKICNpbXBv
cnQgPEltYWdlSU8vSW1hZ2VJTy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0RyYWdJbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRHJhZ0ltYWdlTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3
IEBACiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAj
aW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZv
bnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRT
ZWxlY3Rvci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xNTcsMTAgKzE1Nywx
MCBAQCBjb25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CiAKIC8vIEZJWE1FIC0g
d2Ugc2hvdWxkIG1vdmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5nIGV4dHJhcyB0
byBXZWJDb3JlCiAgICAgCi1zdGF0aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250
KQorc3RhdGljIEZvbnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCiB7CiAg
ICAgc3RhdGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250Q2FzY2FkZSwgY3VycmVudFJlbmRlcmVyLCAoKSk7CiAgICAg
CiAgICAgaWYgKFtmb250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQogICAgICAgICByZXR1cm4gY3Vy
cmVudFJlbmRlcmVyOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBGb250JiBmb250RnJvbU5T
Rm9udChOU0ZvbnQgKmZvbnQKICAgICBjdXJyZW50Rm9udCA9IGZvbnQ7CiAgICAgQ0ZSZXRhaW4o
Y3VycmVudEZvbnQpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgZihmb250LCBbZm9udCBwb2ludFNp
emVdKTsKLSAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250KGYsICFbW05TR3JhcGhpY3NDb250ZXh0
IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgIGN1cnJlbnRSZW5kZXJl
ciA9IEZvbnRDYXNjYWRlKGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBp
c0RyYXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CiB9CiAKQEAg
LTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhXaXRoRm9udChOU1N0cmluZyAqc3Ry
CiAgICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogICAgIAogICAgIGlm
IChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBG
b250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSks
ICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0p
OworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQs
IFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
aXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwg
bGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJl
dHVybiB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2
b2lkIGRyYXdBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcKICAgICAgICAgaWYgKCFmbGlwcGVkKQog
ICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtm
b250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0sIEFudGlhbGlh
c2VkKTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShm
b250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBB
bnRpYWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7
CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0
MSwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFk
anVzdG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRp
b24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9s
UGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAK
LSAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZv
bnQmLCBjb25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmly
dHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9u
dCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250
cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXpl
JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmlt
dW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0
IHpvb21GYWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIo
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRp
bmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29t
ZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNv
bnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3Ro
Qm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3Qg
eyByZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsx
NDksNyBAQCBUaGVtZSogcGxhdGZvcm1UaGVtZSgpCiAKIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNl
ZCBieSBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgogCi1zdGF0aWMgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsK
ICAgICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+
PSAxNikKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbU5TQ29u
dHJvbFNpemUoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgc2l6
ZUZyb21Gb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUs
IGZsb2F0IHpvb21GYWN0b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQor
c3RhdGljIExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6
OmFycmF5PEludFNpemUsIDM+JiBzaXplcykKIHsKICAgICByZXR1cm4gc2l6ZUZyb21OU0NvbnRy
b2xTaXplKGNvbnRyb2xTaXplRm9yRm9udChmb250KSwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvciwg
c2l6ZXMpOwogfQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIGNoZWNrYm94
TWFyZ2lucyhOU0NvbnQKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0
YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5n
dGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUg
Y2hlY2tib3hTaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6
b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAg
ICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVk
U2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtMzIzLDcgKzMyMyw3IEBAIHN0
YXRpYyBjb25zdCBpbnQqIHJhZGlvTWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2lu
c1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBG
b250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9y
KQorc3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8v
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAt
NTkzLDcgKzU5Myw3IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PEludFNpemUsIDM+JiBzdGUK
IAogLy8gV2UgZG9uJ3QgdXNlIGNvbnRyb2xTaXplRm9yRm9udCgpIGZvciBzdGVwcGVycyBiZWNh
dXNlIHRoZSBzdGVwcGVyIGhlaWdodAogLy8gc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhh
biB0aGUgY29ycmVzcG9uZGluZyB0ZXh0IGZpZWxkIGhlaWdodCwKLXN0YXRpYyBOU0NvbnRyb2xT
aXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBO
U0NvbnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpCiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKICAgICBpZiAo
Zm9udFNpemUgPj0gMTgpCkBAIC02NzMsNyArNjczLDcgQEAgaW50IFRoZW1lTWFjOjpiYXNlbGlu
ZVBvc2l0aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFk
anVzdG1lbnQocGFydCk7CiB9CiAKLUZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZv
bnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3Rvcikg
Y29uc3QKK0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKQEAg
LTY5MSw3ICs2OTEsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRyb2xGb250KENv
CiAgICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFy
dCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBm
bG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUo
Q29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNp
emUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChw
YXJ0KSB7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgpAQCAtNzEwLDcgKzcxMCw3IEBAIExl
bmd0aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2wKICAgICB9CiB9CiAKLUxlbmd0
aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1h
Yzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewog
ICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MjcsNyArNzI3LDcgQEAgTGVuZ3Ro
U2l6ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKAogICAgIH0KIH0KIAotTGVuZ3RoQm94
IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAor
TGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVh
cmVCdXR0b25QYXJ0OgpAQCAtNzM5LDcgKzczOSw3IEBAIExlbmd0aEJveCBUaGVtZU1hYzo6Y29u
dHJvbEJvcmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJv
bFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3Ro
Qm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVN
YWM6OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQg
IkN1cnNvci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBv
cnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3
LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0o
SU9TKQotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogI2VuZGlmCiAKIGNsYXNzIExv
Y2FsZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWRE
YXRlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lv
cy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKIAogI2luY2x1
ZGUgIkRhdGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKIGNsYXNzIExvY2FsaXplZERhdGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgTlNEYXRl
Rm9ybWF0dGVyICpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7Ci0g
ICAgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNv
bnN0IEZvbnQmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOworICAgIGZsb2F0IG1heGltdW1X
aWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50Jik7CiAgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7CiAK
IHByaXZhdGU6CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFw
PGludCwgZmxvYXQ+IERhdGVUeXBlTWF4V2lkdGhNYXA7CiAgICAgRGF0ZVR5cGVGb3JtYXR0ZXJN
YXAgbV9mb3JtYXR0ZXJNYXA7CiAgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdpZHRoTWFw
OwotICAgIEZvbnQgbV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKIAogICAgIGZyaWVu
ZCBMb2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOwogICAgIGZyaWVuZCBO
ZXZlckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxp
emVkRGF0ZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCi0jaW1wb3J0ICJG
b250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiVGV4dFJ1bi5oIgogI2lt
cG9ydCA8bWF0aC5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTUyLDcgKzUyLDYg
QEAgc3RhdGljIHZvaWQgX2xvY2FsZUNoYW5nZWQoQ0ZOb3RpZmljYXRpbwogfQogCiBMb2NhbGl6
ZWREYXRlQ2FjaGU6OkxvY2FsaXplZERhdGVDYWNoZSgpCi0gICAgOiBtX2ZvbnQoRm9udCgpKQog
ewogICAgIC8vIExpc3RlbiB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBh
bmQgY2xlYXIgdGhlIGNhY2hlIHdoZW4gaXQgZG9lcy4KICAgICBDRk5vdGlmaWNhdGlvbkNlbnRl
ckFkZE9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQq
KXRoaXMsIF9sb2NhbGVDaGFuZ2VkLApAQCAtODQsMTQgKzgzLDE0IEBAIE5TRGF0ZUZvcm1hdHRl
ciAqTG9jYWxpemVkRGF0ZUNhY2hlOjpmb3IKICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKIH0K
IAotZmxvYXQgTG9jYWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRl
Q29tcG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBNZWFzdXJlVGV4
dENsaWVudCYgbWVhc3VyZXIpCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0
aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYgbWVhc3VyZXIpCiB7CiAgICAgaW50IGtl
eSA9IHN0YXRpY19jYXN0PGludD4odHlwZSk7CiAgICAgaWYgKG1fZm9udCA9PSBmb250KSB7CiAg
ICAgICAgIGlmIChtX21heFdpZHRoTWFwLmNvbnRhaW5zKGtleSkpCiAgICAgICAgICAgICByZXR1
cm4gbV9tYXhXaWR0aE1hcC5nZXQoa2V5KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnQg
PSBGb250KGZvbnQpOworICAgICAgICBtX2ZvbnQgPSBGb250Q2FzY2FkZShmb250KTsKICAgICAg
ICAgbV9tYXhXaWR0aE1hcC5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsy
MSw3IEBACiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IklubGluZVRleHRCb3guaCIKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAot
ICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKHNlbGVjdGlv
blN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgIHBhaW50
U2VsZWN0aW9uKGNvbnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCkBAIC0x
MTAsNyArMTEwLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRNYXJrdXBCb3goUGFpbnRJbgog
SW50UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiB7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGlu
ZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9
IHJvb3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBh
c3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAgICBMYXlvdXRSZWN0IHNlbGVj
dGlvblJlY3QgPSBMYXlvdXRSZWN0KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1
c3RlZEZvclByZWNlZGluZ0Jsb2NrKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0QWRqdXN0
ZWRGb3JQcmVjZWRpbmdCbG9jaygpKTsKQEAgLTExOSw3ICsxMTksNyBAQCBJbnRSZWN0IEVsbGlw
c2lzQm94OjpzZWxlY3Rpb25SZWN0KCkKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzZWxl
Y3Rpb25SZWN0KTsKIH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxsaXBzaXNCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KQogewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjID0gYmxvY2tGbG93KCkuc2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RWxsaXBzaXNCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIGNv
bnN0IFJlbmRlclN0eWxlJik7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVp
Z2h0OyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlv
blN0YXRlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQotICAgIHZvaWQg
cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250Q2FzY2FkZSYpOwogICAgIElubGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAK
ICAgICBib29sIG1fc2hvdWxkUGFpbnRNYXJrdXBCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDcgKzIzLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0x
MjIsNyArMTIyLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94Kgog
ICAgICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJh
c2VsaW5lID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmJlaGF2ZXNMaWtlVGV4dCgp
KSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSB8fCBj
aGlsZC0+cmVuZGVyZXIoKS5wYXJlbnQoKSAhPSAmcmVuZGVyZXIoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNj
ZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUu
bGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAg
ICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9v
dElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkK
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhl
aWdodEFuZEJhc2VsaW5lID0gdHJ1ZTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIElubGluZUZs
b3dCb3g6OmFkZFRvTGluZShJbmxpbmVCb3gqCiAgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRG
bG93Qm94ID0gZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgICAgICAg
ICAvLyBDaGVjayB0aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZl
cmVuY2VzIGluIGZvbnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgogICAgICAgICAgICAg
ICAgIGlmICghY2hpbGRGbG93Qm94LmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFz
ZWxpbmUoKQotICAgICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5m
b250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxl
LmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5k
TGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAg
ICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUubGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGlu
ZUhlaWdodCgpCiAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFs
aWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZl
cnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgICAgICAgICB8fCBjaGlsZFN0
eWxlLmhhc0JvcmRlcigpIHx8IGNoaWxkU3R5bGUuaGFzUGFkZGluZygpIHx8IGNoaWxkU3R5bGUu
aGFzVGV4dENvbWJpbmUoKSkKQEAgLTM4OCw3ICszODgsNyBAQCBmbG9hdCBJbmxpbmVGbG93Qm94
OjpwbGFjZUJveFJhbmdlSW5JbmxpCiAgICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0
ID0gdGV4dEJveC5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlclRleHQudGV4dExl
bmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFj
ZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3guc3RhcnQoKSkpKQotICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94LmxpbmVTdHlsZSgpLmZvbnQo
KS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0
Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAg
ICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFy
YWN0ZXJBdCh0ZXh0Qm94LmVuZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXh0
Qm94LnNldExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29s
IElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5m
b250RGVzY3JpcHRpb24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtNDYwLDcgKzQ2MCw3IEBA
IGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlm
IChkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNl
bGluZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNo
aWxkLT5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9u
dHMgPSBudWxscHRyOwpAQCAtODczLDcgKzg3Myw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dC
b3g6OmFkZFRleHRCb3hWaXMKIAogICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICBp
ZiAobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAm
JiB0ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNp
c01hcmtJc0Fib3ZlKSkgewotICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0
eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtT
dHJpbmcoKSk7CisgICAgICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5lU3R5bGUuZm9u
dENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtT
dHJpbmcoKSk7CiAgICAgICAgIGlmIChlbXBoYXNpc01hcmtJc0Fib3ZlID09ICFsaW5lU3R5bGUu
aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxv
dyA9IHN0ZDo6bWluKHRvcEdseXBoT3ZlcmZsb3csIC1lbXBoYXNpc01hcmtIZWlnaHQpOwogICAg
ICAgICBlbHNlCkBAIC04ODIsNyArODgyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6
YWRkVGV4dEJveFZpcwogCiAgICAgLy8gSWYgbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmUsIHdl
IHNob3VsZCBmYWN0b3IgdGhhdCBpbnRvIHJpZ2h0IGxheW91dCBvdmVyZmxvdy4gKEV2ZW4gaW4g
UlRMLCBsZXR0ZXItc3BhY2luZyBpcwogICAgIC8vIGFwcGxpZWQgdG8gdGhlIHJpZ2h0LCBzbyB0
aGlzIGlzIG5vdCBhbiBpc3N1ZSB3aXRoIGxlZnQgb3ZlcmZsb3cuCi0gICAgcmlnaHRHbHlwaE92
ZXJmbG93IC09IHN0ZDo6bWluKDAsIChpbnQpbGluZVN0eWxlLmZvbnQoKS5sZXR0ZXJTcGFjaW5n
KCkpOworICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHls
ZS5mb250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSk7CiAKICAgICBMYXlvdXRVbml0IHRleHRT
aGFkb3dMb2dpY2FsVG9wOwogICAgIExheW91dFVuaXQgdGV4dFNoYWRvd0xvZ2ljYWxCb3R0b207
CkBAIC0xNTM0LDEwICsxNTM0LDEwIEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0
ZU92ZXJBbm4KICAgICAgICAgICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICAgICAg
ICAgIGlmIChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lz
TWFya05vbmUgJiYgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtF
eGlzdHNBbmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKSAmJiBl
bXBoYXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHls
ZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxl
LmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0g
Y2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFz
aXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0
aW9uIC0gdG9wT2ZFbXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2Fs
Qm90dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxk
TGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAg
IGludCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBjaGls
ZExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHls
ZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBzdGQ6Om1heChyZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBvc2l0aW9u
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTgzLDEwICsxNTgzLDEw
IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZVVuZGVyQW4KICAgICAgICAgICAg
IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNB
Ym92ZShjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSk7CiAgICAgICAgICAgICBp
ZiAoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtO
b25lICYmICFlbXBoYXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGls
ZExpbmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90
dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsg
Y2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5l
U3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3Np
dGlvbik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExp
bmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBo
YXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZF
bXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENh
c2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0
LCBhbGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTQgKzI0NSwxNCBAQCBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAgICAgcmV0dXJuIHN0YXRl
OwogfQogCi1zdGF0aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQm
IHJlbmRlcmVyKQogewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRl
ckNvbWJpbmVUZXh0PihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJp
bmVSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAg
ICAgIGlmICh0ZXh0Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB0ZXh0Q29tYmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KLSAgICBy
ZXR1cm4gc3R5bGUuZm9udCgpOworICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQog
CiBMYXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQ
b3MsIGludCBlbmRQb3MpIGNvbnN0CkBAIC0yNjYsNyArMjY2LDcgQEAgTGF5b3V0UmVjdCBJbmxp
bmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0g
dGhpcy0+c2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0
aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxl
ID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShs
aW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9u
dFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRlZFN0
cmluZ0J1ZmZlcjsKICAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhh
c0h5cGhlbigpOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWkKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHRleHRQYWludFN0
eWxlOwogCiAgICAgLy8gU2V0IG91ciBmb250LgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250
VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIC8vIDEuIFBhaW50IGJh
Y2tncm91bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gRXhhbXBsZXMgb2Ygc3VjaCBiYWNrZ3Jv
dW5kcyBpbmNsdWRlIHNlbGVjdGlvbgogICAgIC8vIGFuZCBjb21wb3NpdGlvbiB1bmRlcmxpbmVz
LgogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVRleHRDbGlwICYmICFpc1ByaW50aW5nKSB7CkBAIC02
NzgsNyArNjc4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgog
ICAgIGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKIH0KIAot
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGb250JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCit2b2lkIElubGluZVRleHRCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQog
ICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNyw3ICs3MzcsNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAjZW5kaWYKIH0KIAotdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2
b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBl
bmRQb3MpCiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBzdGQ6
Om1heChzdGFydFBvcyAtIG9mZnNldCwgMCk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBzdGF0aWMg
R3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpCiAgICAgfQogfQogCi12b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtl
ciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1t
YXIpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgYm9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5n
L2dyYW1tYXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgp
LnByaW50aW5nKCkpCkBAIC0xMTI4LDcgKzExMjgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50RG9jdW1lbnRNYXJrZXIoCiAgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJs
aW5lT2Zmc2V0KSwgd2lkdGgsIGxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkp
OwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRo
aXMtPnNlbGVjdGlvbkhlaWdodCgpOwogCkBAIC0xMTU5LDcgKzExNTksNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAgfQogfQogCi12b2lkIElubGluZVRl
eHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1h
cmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQp
Cit2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVu
ZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJl
IG5vdCBhY3R1YWxseSBkcmF3biwgYnV0IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQg
Zm9yIGhpdCB0ZXN0aW5nLgogICAgIExheW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CkBA
IC0xMTc3LDcgKzExNzcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVw
bGFjCiAgICAgbWFya2VyLnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQordm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQogewogICAgIGlmICghcmVuZGVyZXIo
KS50ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbnQg
SW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAgICAgIHJldHVybiBpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogbGVuKCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9
IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIGZv
bnQub2Zmc2V0Rm9yUG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBs
aW5lT2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCkBA
IC0xMzQyLDcgKzEzNDIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNl
dChpCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIGludCBmcm9t
ID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwogICAg
IGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1f
c3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJl
PwpAQCAtMTM1Miw3ICsxMzUyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JP
ZmZzZXQoaQogICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJl
Y3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCksIHJ1bi5sdHIoKSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNv
bnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250
LCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRl
eHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAog
ewogICAgIEFTU0VSVChyZW5kZXJlcigpLnRleHQoKSk7CiAKQEAgLTEzNjYsNyArMTM2Niw3IEBA
IFRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKICAgICByZXR1cm4gY29u
c3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgo
KSAtIHN0YXJ0UG9zLCBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKTsKIH0KIAotVGV4dFJ1biBJbmxp
bmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3Ry
aW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94
Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmlu
ZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBAIHByaXZh
dGU6CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKICAgICBMYXlvdXRV
bml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZyogaHlwaGVuYXRlZFN0
cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGlt
dW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0
OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikg
Y29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udENhc2NhZGUmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmlu
ZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwogCiBwdWJsaWM6CiAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJu
IEZsb2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNDgsMTcgKzE0
OCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQg
b2Zmc2V0KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
OwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBi
b29sIGJhY2tncm91bmQpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAg
ICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYs
IGJvb2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9z
aXRpb25VbmRlcmxpbmUmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFRleHREZWNvcmF0
aW9uLCBUZXh0RGVjb3JhdGlvblN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwgVGV4dFBhaW50ZXIm
KTsKLSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQ29sb3Ig
dGV4dENvbG9yKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwg
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lk
IHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZv
bnRDYXNjYWRlJiwgQ29sb3IgdGV4dENvbG9yKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJr
ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJl
ZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYs
IGJvb2wgZ3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKLSAgICB2b2lk
IGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYs
IGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgY29tcHV0ZVJlY3RG
b3JSZXBsYWNlbWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVy
U3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMy
NSw3ICsyMzI1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgog
ICAgICAgICByZXR1cm4gbGVmdDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNp
bmcgYXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0
aGUgZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldp
ZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5t
YXhDaGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIGxl
ZnQ7CiAKQEAgLTIzNjUsNyArMjM2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVz
dExvZ2ljYWxSaWcKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vz
bid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlk
LT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBm
bG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAg
ICAgICByZXR1cm4gcmlnaHQ7CiAKQEAgLTMwMDMsNyArMzAwMyw3IEBAIHN0YXRpYyBSZW5kZXJT
dHlsZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIG5ld0ZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIHBzZXVkb1N0
eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcHNl
dWRvU3R5bGUtPmZvbnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3Io
KSk7CisgICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHls
ZS0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQg
ZGVzaXJlZENhcEhlaWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0g
MSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVp
Z2h0KCk7CiAgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1l
dHJpY3MoKS5jYXBIZWlnaHQoKTsKQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyBSZW5kZXJT
dHlsZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAx
KTsKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHBz
ZXVkb1N0eWxlLT5mb250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9y
KCkpOworICAgICAgICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHBzZXVk
b1N0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIGFjdHVh
bENhcEhlaWdodCA9IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzY5Myw3ICszNjkzLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxv
Y2s6OnJlbmRlck5hbWUoKSBjbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVy
T2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb24pCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJv
b2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3Jk
ZXI7CkBAIC0zNzA4LDcgKzM3MDgsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bkluCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGlj
IGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNv
bnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0
eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBAIC0zNzI3LDI0ICszNzI3LDI0IEBA
IHN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICByZXR1cm4gcnVu
OwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihS
ZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVj
dFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0eWxl
LCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6
RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0
dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBs
ZW5ndGgsIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29u
c3QgUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFJlbmRlclRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1
bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIGlmICh0ZXh0LT5pczhCaXQo
KSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250
LCB0ZXh0LT5jaGFyYWN0ZXJzOCgpLCB0ZXh0LT50ZXh0TGVuZ3RoKCksIHN0eWxlLCBleHBhbnNp
b24pOwogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwg
dGV4dC0+Y2hhcmFjdGVyczE2KCksIHRleHQtPnRleHRMZW5ndGgoKSwgc3R5bGUsIGV4cGFuc2lv
bik7CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2Jq
ZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHRl
eHQtPnRleHRMZW5ndGgoKSk7CiAgICAgaWYgKHRleHQtPmlzOEJpdCgpKQpAQCAtMzc1Miw3ICsz
NzUyLDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZQogICAgIHJl
dHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFj
dGVyczE2KCkgKyBvZmZzZXQsIGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRS
dW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBj
b25zdCBGb250JiBmb250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFn
cyBmbGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2Jq
ZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwyMiArMjAyLDIyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpICYmICFvYmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYg
IW9iai0+Y29udGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBG
b250JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1
bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwg
VGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRl
eHRSdW5GbGFncyk7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
ck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBS
ZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIGNv
bnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4
cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhh
dmlvciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRM
ZWFkaW5nRXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4o
UmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIHVu
c2lnbmVkIG9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwK
ICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWls
aW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBz
dGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29u
c3QgRm9udCYsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6
Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRl
clN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7
CiAgICAgCiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0
cmlwVHJhaWxpbmdTcGFjZShmbAogICAgICAgICAvLyBDb2xsYXBzZSBhd2F5IHRoZSB0cmFpbGlu
ZyBzcGFjZSBhdCB0aGUgZW5kIG9mIGEgYmxvY2suCiAgICAgICAgIFJlbmRlclRleHQmIHJlbmRl
clRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqdHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAg
ICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBy
ZW5kZXJUZXh0LnN0eWxlKCkuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxp
bmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgp
LmZvbnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAg
ICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4oJnJlbmRlclRleHQsIGZvbnQsICZzcGFjZSwgMSwgcmVuZGVyVGV4dC5zdHlsZSgpKSk7
CiAgICAgICAgIGlubGluZU1heCAtPSBzcGFjZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOwog
ICAgICAgICBpZiAoaW5saW5lTWluID4gaW5saW5lTWF4KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IHNldExvZ2ljYWxXaWR0aEZvclRleAogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiBmYWxsYmFja0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUlu
Zm8pLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVu
ZGVyZXItPnBhcmVudCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKICAgICAvLyBBbHdheXMg
Y29tcHV0ZSBnbHlwaCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJveC1jb250YWluIHZh
bHVlIGlzICJnbHlwaHMiLgogICAgIGlmIChsaW5lQm94LT5maXRzVG9HbHlwaHMoKSkgewogICAg
ICAgICAvLyBJZiB3ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdzIGZvbnQgYm94
LCB0aGVuIGRvbid0IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93LiBUaGlzIG9w
dGltaXphdGlvbgpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dp
Y2FsV2lkdGhGb3JUZXgKICAgICAgICAgICAgICAgICAgICAgJndvcmRNZWFzdXJlbWVudC5mYWxs
YmFja0ZvbnRzLCAmb3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgIFVDaGFyIGMgPSByZW5kZXJl
ci0+Y2hhcmFjdGVyQXQod29yZE1lYXN1cmVtZW50LnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAg
ICAgICBpZiAoaSA+IDAgJiYgd29yZExlbmd0aCA9PSAxICYmIChjID09ICcgJyB8fCBjID09ICdc
dCcpKQotICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRlcmVyLT5zdHls
ZSgpLmZvbnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdp
ZHRoICs9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1l
YXN1cmVtZW50LndpZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJh
Y2tGb250cy5pc0VtcHR5KCkpIHsKQEAgLTc0MywxNCArNzQzLDE0IEBAIEJpZGlSdW4qIFJlbmRl
ckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT0g
SlVTVElGWSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1bikgewogICAgICAgICAgICAgICAgIGlm
ICghaXNBZnRlckV4cGFuc2lvbikKICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5l
VGV4dEJveD4oKnJ1bi0+Ym94KCkpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKHRydWUpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFydCwg
cnVuLT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udENhc2Nh
ZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+
bV9zdGFydCwgcnVuLT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4
cGFuc2lvbik7CiAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQo
b3Bwb3J0dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKGludCBsZW5ndGggPSByZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAg
ICAgICAgIGlmICghcnVuLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9y
TmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+bV9zdGFydCkpKQotICAgICAgICAg
ICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFy
ZW50KCksIGxpbmVJbmZvKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdG90YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBs
aW5lSW5mbykuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIG5l
ZWRzV29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0
KHJ1bi0+bV9zdG9wIC0gMSkpICYmIHJ1bi0+bV9zdG9wID09IGxlbmd0aDsKICAgICAgICAgICAg
IH0KIApAQCAtNzY4LDcgKzc2OCw3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0
ZUlubGluZUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0
Qm94PigqbGVhZkNoaWxkKS5zZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4
dD4obGVhZkNoaWxkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
cmVuZGVyVGV4dC5zdHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJF
eHBhbnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGll
c0luUnVuID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4
dC5zdHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24p
OwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQo
b3Bwb3J0dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0xOTA3LDkgKzE5MDcsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tMaW5l
c0ZvclRleHRPCiB7CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMg
dXNpbmcgdGhlIGN1cnJlbnQgZm9udC4KICAgICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMg
Y29uZmlndXJhYmxlLCBhbHNvIG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jp
em9udGFsIGVsbGlwc2lzIGlzICJub3QgcmVuZGVyYWJsZSIKLSAgICBjb25zdCBGb250JiBmb250
ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7Ci0gICAgY29u
c3QgRm9udCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkuZm9udCgpOworICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5mb250Q2Fz
Y2FkZSgpOwogICAgIGZsb2F0IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250
LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxF
bGxpcHNpcywgMSwgZmlyc3RMaW5lU3R5bGUoKSkpOwogICAgIGZsb2F0IGVsbGlwc2lzV2lkdGgg
PSAoZm9udCA9PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250
LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywg
MSwgc3R5bGUoKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29t
YmluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6c2V0UmVuZGVyZWRUZXh0KAogICAgIG1fbmVl
ZHNGb250VXBkYXRlID0gdHJ1ZTsKIH0KIAotZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRo
KHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQg
eFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5l
VGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7
CiAgICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgcmV0dXJuIGZvbnQuc2l6ZSgpOwpAQCAt
MTA4LDcgKzEwOCw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAg
ICBmbG9hdCBjb21iaW5lZFRleHRXaWR0aCA9IHdpZHRoKDAsIHRleHRMZW5ndGgoKSwgb3JpZ2lu
YWxGb250KCksIDAsIG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKICAgICBtX2lzQ29tYmluZWQg
PSBjb21iaW5lZFRleHRXaWR0aCA8PSBlbVdpZHRoOwogICAgIAotICAgIEZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yID0gc3R5bGUoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNl
bGVjdG9yKiBmb250U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9y
KCk7CiAKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICBzaG91bGRVcGRhdGVGb250ID0g
bV9jb21iaW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOyAvLyBO
ZWVkIHRvIGNoYW5nZSBmb250IG9yaWVudGF0aW9uIHRvIGhvcml6b250YWwuCkBAIC0xMTcsNyAr
MTE3LDggQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBz
dGF0aWMgY29uc3QgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnRzW10gPSB7IEhhbGZXaWR0
aCwgVGhpcmRXaWR0aCwgUXVhcnRlcldpZHRoIH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
IDsgaSA8IFdURl9BUlJBWV9MRU5HVEgod2lkdGhWYXJpYW50cykgOyArK2kpIHsKICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uLnNldFdpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnRzW2ldKTsKLSAgICAg
ICAgICAgIEZvbnQgY29tcHJlc3NlZEZvbnQgPSBGb250KGRlc2NyaXB0aW9uLCBzdHlsZSgpLmZv
bnQoKS5sZXR0ZXJTcGFjaW5nKCksIHN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCkpOworCisg
ICAgICAgICAgICBGb250Q2FzY2FkZSBjb21wcmVzc2VkRm9udChkZXNjcmlwdGlvbiwgc3R5bGUo
KS5mb250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndv
cmRTcGFjaW5nKCkpOwogICAgICAgICAgICAgY29tcHJlc3NlZEZvbnQudXBkYXRlKGZvbnRTZWxl
Y3Rvcik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZsb2F0IHJ1bldpZHRoID0gUmVuZGVy
VGV4dDo6d2lkdGgoMCwgdGV4dExlbmd0aCgpLCBjb21wcmVzc2VkRm9udCwgMCwgbnVsbHB0ciwg
JmdseXBoT3ZlcmZsb3cpOwpAQCAtMTM2LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRl
eHQ6OmNvbWJpbmVUZXh0KCkKICAgICAgICAgc2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZv
bnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlv
bigpKTsKIAogICAgIGlmIChzaG91bGRVcGRhdGVGb250KQotICAgICAgICBtX2NvbWJpbmVGb250
U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKyAgICAgICAgbV9jb21iaW5lRm9u
dFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgaWYgKG1f
aXNDb21iaW5lZCkgewogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclN0cmluZywgKCZvYmplY3RSZXBsYWNlbWVu
dENoYXJhY3RlciwgMSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjaWZuZGVmIFJlbmRlckNvbWJpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyQ29tYmluZVRleHRf
aAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCkBAIC0zOCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIHZvaWQgYWRqdXN0VGV4dE9y
aWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNv
bnN0OwogICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmLCBpbnQmIGxlbmd0
aCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJp
bmVkOyB9Ci0gICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9udCkgY29u
c3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KLSAgICBjb25zdCBGb250JiBvcmlnaW5hbEZvbnQo
KSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250KCk7IH0KLSAgICBjb25zdCBG
b250JiB0ZXh0Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUt
PmZvbnQoKTsgfQorICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBvcmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250
Q2FzY2FkZSgpOyB9CisgICAgY29uc3QgRm9udENhc2NhZGUmIHRleHRDb21iaW5lRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKTsgfQogCiBwcml2
YXRlOgogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmlydHVhbCBib29s
IGlzQ29tYmluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZv
bnQmLCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuICJSZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtOTk3
LDcgKzk5Nyw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUwKICAg
ICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBz
aXNBbmRTcGFjZVN0ciwgKGVsbGlwc2lzQW5kU3BhY2UsIDIpKTsKICAgICAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpv
bnRhbEVsbGlwc2lzLCAxKSk7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUg
PSBudW1WaXNpYmxlTGluZXMgPT0gMSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKIAogICAgICAgICAv
LyBHZXQgZWxsaXBzaXMgd2lkdGgsIGFuZCBpZiB0aGUgbGFzdCBjaGlsZCBpcyBhbiBhbmNob3Is
IGl0IHdpbGwgZ28gYWZ0ZXIgdGhlIGVsbGlwc2lzLCBzbyBhZGQgaW4gYSBzcGFjZSBhbmQgdGhl
IGFuY2hvciB3aWR0aCB0b28KICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRXZlbnRI
YW5kbGVyLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAg
ICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0
OwotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVu
KCIiKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFnZXRSZXBsYWNlbWVudFRleHRH
ZW9tZXRyeShwYWludE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2Vt
ZW50VGV4dFJlY3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtMzQ5LDcg
KzM0OSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFVuYXZhaWxhYmwKICAgICBy
ZXBhaW50KCk7CiB9CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50
VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRS
ZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJl
cGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiBmb250LCBUZXh0
UnVuJiBydW4sIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0Citib29sIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9y
UmVjdCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVj
dCwgRm9udENhc2NhZGUmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29u
c3QKIHsKICAgICBib29sIGluY2x1ZGVzQXJyb3cgPSBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1l
c3NhZ2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsK
IApAQCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxh
Y2VtZW4KICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShmcmFtZSgpLnNldHRpbmdzKCkuZm9u
dFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgx
Mik7Ci0gICAgZm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKKyAgICBmb250ID0g
Rm9udENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZSgwKTsK
IAogICAgIHJ1biA9IFRleHRSdW4obV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCk7
CkBAIC0zOTEsNyArMzkxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dW5h
dmFpbAogICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNl
bWVudFRleHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250Owor
ICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIsIDApOwogICAgIGZsb2F0
IHRleHRXaWR0aDsKICAgICBpZiAoZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoYWNjdW11bGF0
ZWRPZmZzZXQsIGNvbnRlbnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0
LCBhcnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBi
b29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFiCiAgICAgRmxvYXRSZWN0IGlu
ZGljYXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxv
YXRSZWN0IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsK
ICAgICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIHJldHVybiBn
ZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShJbnRQb2ludCgpLCBjb250ZW50UmVjdCwgaW5kaWNh
dG9yUmVjdCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRX
aWR0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQo
Ym9vbCk7CiAgICAgYm9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91
c2VFdmVudCYpIGNvbnN0OwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9y
KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdl
b21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBj
b250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2Vt
ZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0
JiB0ZXh0V2lkdGgpIGNvbnN0OworICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnko
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRS
ZWN0LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0
UmVjdCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiwgVGV4dFJ1biYsIGZsb2F0
JiB0ZXh0V2lkdGgpIGNvbnN0OwogICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRp
Y2F0b3JCb3VuZHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAKICNpbmNsdWRlICJGaWxlTGlzdC5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjCiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VGb3JlZ3JvdW5kKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheWVkRmlsZW5hbWUg
PSBmaWxlVGV4dFZhbHVlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZv
bnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCk7CiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywg
Zm9udCwgZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdF
eHBhbnNpb24sIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwog
ICAgICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKQEAgLTIwMSw3ICsyMDEs
NyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlSW50CiAgICAgLy8gKHVz
aW5nICIwIiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgIGNvbnN0IFVDaGFyIGNoYXJh
Y3RlciA9ICcwJzsKICAgICBjb25zdCBTdHJpbmcgY2hhcmFjdGVyQXNTdHJpbmcgPSBTdHJpbmco
JmNoYXJhY3RlciwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOwor
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAg
IC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcg
Y29uc3RydWN0VGV4dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KICAgICBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbCogcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlckZpbGVVcGxvYWRD
b250cm9sKj4odGhpcyk7CiAgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0
V2lkdGhOdW1DaGFycyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9u
dCwgY2hhcmFjdGVyQXNTdHJpbmcsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBh
bnNpb24pKTsKQEAgLTI3MSw5ICsyNzEsOSBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w6OmZpbGVUZXh0CiAgICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLmZpbGVzKCkpOwogI2lmIFBM
QVRGT1JNKElPUykKICAgICBpZiAoaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50
KCkuZGlzcGxheVN0cmluZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udCgpLCBT
dHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICByZXR1cm4gU3Ry
aW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmco
KSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIFN0cmluZ1RydW5j
YXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CiAjZW5kaWYKLSAgICByZXR1cm4gdGhlbWUoKS5m
aWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHlsZSgpLmZvbnQo
KSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBpbnB1dEVsZW1lbnQoKS5tdWx0aXBsZSgpKTsKKyAgICBy
ZXR1cm4gdGhlbWUoKS5maWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygp
LCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50
KCkubXVsdGlwbGUoKSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBSZW5k
ZXJGbG93VGhyZWFkOjpjcmVhdAogICAgIG5ld1N0eWxlLmdldCgpLnNldFRvcChMZW5ndGgoMCwg
Rml4ZWQpKTsKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRXaWR0aChMZW5ndGgoMTAwLCBQZXJjZW50
KSk7CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0SGVpZ2h0KExlbmd0aCgxMDAsIFBlcmNlbnQpKTsK
LSAgICBuZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIG5ld1N0eWxlLmdldCgp
LmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogICAgIHJldHVybiBuZXdTdHlsZTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1
bGxTY3JlZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBSZWY8
UmVuZGVyU3R5bGU+IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCku
c2V0WkluZGV4KElOVF9NQVgpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEZvbnRE
ZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZnVsbHNjcmVlblN0eWxlLmdldCgp
LmZvbnQoKS51cGRhdGUoMCk7CisgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3Bs
YXkoRkxFWCk7CiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEp1c3RpZnlDb250ZW50KEp1
c3RpZnlDZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdl
b21ldHJ5VXRpbGl0aWVzLmgiCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6
c2V0SW1hZ2VTaXplRm9yQWx0VGV4dAogCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1
c2VyIG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0
VGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9u
dCgpOworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2Nh
ZGUoKTsKICAgICAgICAgSW50U2l6ZSBwYWRkZWRUZXh0U2l6ZShwYWRkaW5nV2lkdGggKyBzdGQ6
Om1pbihjZWlsZihmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMs
IGZvbnQsIG1fYWx0VGV4dCwgc3R5bGUoKSkpKSwgbWF4QWx0VGV4dFdpZHRoKSwgcGFkZGluZ0hl
aWdodCArIHN0ZDo6bWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhl
aWdodCkpOwogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemUuZXhwYW5kZWRUbyhwYWRkZWRU
ZXh0U2l6ZSk7CiAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3Ry
aW5nTW9kaWZpZWRCeUVuY29kaW5nKG1fYWx0VGV4dCk7CiAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBzdHlsZSgpLmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0
IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3MoKTsKICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwogICAgICAg
ICAgICAgICAgIExheW91dFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdh
eXNDcmVhdGVMaW4KICAgICAgICAgfHwgKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRTdHls
ZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FKQogICAgICAgICB8fCBzdHlsZSgpLnZlcnRp
Y2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgpLnRleHRFbXBoYXNpc01h
cmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZQotICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAo
IXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNj
ZW50QW5kTGluZUdhcChzdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICB8fCAo
Y2hlY2tGb250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCku
aGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250Q2FzY2FkZSgp
LmZvbnRNZXRyaWNzKCkpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0g
c3R5bGUoKS5saW5lSGVpZ2h0KCkpKQogICAgICAgICB8fCAoZmxvd1RocmVhZCAmJiBmbG93VGhy
ZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKTsgLy8gRklYTUU6IEVuYWJsZSB0aGUgb3B0
aW1pemF0aW9uIG9uY2Ugd2UgbWFrZSBvdmVyZmxvdyBjb21wdXRhdGlvbiBmb3IgY3VsbGVkIGlu
bGluZXMgaW4gcmVnaW9ucy4KIApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUmVuZGVySW5saW5l
Ojp1cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmly
c3QgbGluZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+
Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJz
dExpbmVTdHlsZSgpOwotICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5
bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5l
R2FwKGNoaWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgIGFsd2F5c0NyZWF0
ZUxpbmVCb3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhh
c0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkg
IT0gY2hpbGRTdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgfQpAQCAtNTc0LDggKzU3NCw4IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgIGlmIChy
ZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9v
dElubGluZUJveCYgcm9vdEJveCA9IHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3Qo
KTsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSBy
b290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250
YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94
LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9u
dCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxU
b3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxI
ZWlnaHQgPSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigp
LT54KCkgLSByZW5kZXJCb3gubWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCByZW5kZXJCb3gud2lk
dGgoKSArIHJlbmRlckJveC5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGxvZ2ljYWxIZWlnaHQp
KTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgICAgIGZvciAoSW5saW5l
Rmxvd0JveCogY2hpbGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExp
bmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgewogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9
IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNv
bnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBy
b290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9n
aWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygp
LmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250
YWluZXJTdHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJl
Y3QoRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpLApAQCAtNjEwLDggKzYxMCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxl
ZExpbmVCb3gKICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3Vy
clRleHQuZmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5u
ZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9v
dEJveCA9IGNoaWxkVGV4dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBjb250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+
Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxl
KCkuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWln
aHQgPSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RC
b3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29u
dGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KGNoaWxk
VGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2Fs
SGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBjb3VsZCB1c2UgYSBoZWxwZXIgdG8gc2hhcmUgdGhlc2Ugd2l0aCB0ZXh0IHBh
dGguCiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGlubGlu
ZUJveC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWlu
ZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5
bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRv
cCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94Lmxv
Z2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXJTdHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hv
cml6b250YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3Qo
aW5saW5lQm94LT54KCksIGxvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFdpZHRoKCksIGxv
Z2ljYWxIZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgdm9p
ZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IGxpc3RJdGVtc1tpXTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwotICAgICAgICAgICAgRm9u
dCBpdGVtRm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgRm9udENhc2NhZGUgaXRl
bUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExh
YmVsKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxl
bWVudCkpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxl
bWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAg
ICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVtRm9u
dCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2lu
ZygpKTsKKyAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250
LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICAg
ICAgaXRlbUZvbnQudXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRT
ZWxlY3RvcigpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgUmVu
ZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlv
dXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHls
ZSogaXRlbVN0eWxlLCBGb250IGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQor
c3RhdGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4s
IFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0
IGl0ZW1Cb3VkaW5nQm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRl
bVN0eWxlLT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3Bl
Y3QgSlVTVElGWS4gU2hvdWxkIHdlPwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBSZW5kZXJM
aXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRG
aWxsQ29sb3IodGV4dENvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihp
dGVtVGV4dCwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgaXRlbVN0eWxl
LT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUtPnVuaWNvZGVCaWRpKCkpLCB0cnVl
LCBUZXh0UnVuOjpOb1JvdW5kaW5nKTsKLSAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250
KCk7CisgICAgRm9udENhc2NhZGUgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAg
ICAgTGF5b3V0UmVjdCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdElu
ZGV4KTsKICAgICByLm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVuLCBpdGVtU3R5
bGUsIGl0ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxp
c3RJdGVtRWxlbWVudCkpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5m
b250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7
Ci0gICAgICAgIGl0ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0
ZW1Gb250LndvcmRTcGFjaW5nKCkpOworICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQs
IGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAg
ICAgIGl0ZW1Gb250LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250
U2VsZWN0b3IoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgpAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBSZW5k
ZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250
KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7
CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhp
cywgZm9udCwgbV90ZXh0LCBzdHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogCiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGggPSAwOwogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgp
Lmxpc3RTdHlsZVR5cGUoKTsKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGlz
dE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2Fz
ZSBBc3Rlcmlza3M6CiAgICAgICAgIGNhc2UgRm9vdG5vdGVzOiB7Ci0gICAgICAgICAgICBjb25z
dCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4g
cnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBz
dHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlk
TGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICByZWxh
dGl2ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIGZvbnQud2lkdGgocnVuKSwgZm9udC5mb250TWV0cmlj
cygpLmhlaWdodCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1MSw3ICsxODUxLDcgQEAg
SW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICBjYXNlIFVy
ZHU6CiAgICAgICAgICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCku
Zm9udCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dU
cmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1
bHRUZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgo
cnVuKTsKICAgICAgICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3Vm
Zml4KHR5cGUsIG1fbGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bAogICAgIGlmIChtX2lubmVyQmxvY2spIC8vIFJlbmRlckJsb2NrIGhhbmRsZWQgdXBkYXRp
bmcgdGhlIGFub255bW91cyBibG9jaydzIHN0eWxlLgogICAgICAgICBhZGp1c3RJbm5lclN0eWxl
KCk7CiAKLSAgICBib29sIGZvbnRDaGFuZ2VkID0gIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5mb250
KCkgIT0gc3R5bGUoKS5mb250KCk7CisgICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8
fCBvbGRTdHlsZS0+Zm9udENhc2NhZGUoKSAhPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
aWYgKGZvbnRDaGFuZ2VkKSB7CiAgICAgICAgIHVwZGF0ZU9wdGlvbnNXaWR0aCgpOwogICAgICAg
ICBtX25lZWRzT3B0aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CkBAIC0yMjIsMTMgKzIyMiwxMyBA
QCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgICAgICBp
ZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQog
ICAgICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRp
b25TdHlsZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7
CisgICAgICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVs
dFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gZm9udC53aWR0
aChydW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGggPSBzdGQ6
Om1heChtYXhPcHRpb25XaWR0aCwgb3B0aW9uV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKCF0
ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCku
Zm9udCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJh
aWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0
VGV4dFJ1bkZsYWdzKTsKICAgICAgICAgICAgIG1heE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4
T3B0aW9uV2lkdGgsIGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIH0KQEAgLTUyMyw3ICs1MjMs
NyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgZ2V0SXRl
bUJhY2tncm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXND
dXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVu
dC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5jb21w
dXRlZFN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xv
ciwgc3R5bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJl
dHVybiBzdHlsZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250Q2FzY2Fk
ZSgpLCBzdHlsZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLT5kaXNw
bGF5KCkgPT0gTk9ORSwgdHJ1ZSwgc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlv
bigpLCBpc092ZXJyaWRlKHN0eWxlLT51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1
c3RvbUJhY2tncm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29s
b3IgOiBQb3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcikgOiBtZW51U3R5bGUo
KTsKIH0KQEAgLTU2NCw3ICs1NjQsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6
bWVudVN0eWxlCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBtX2lubmVyQmxv
Y2sgPyBtX2lubmVyQmxvY2stPnN0eWxlKCkgOiBzdHlsZSgpOwogICAgIEludFJlY3QgYWJzQm91
bmRzID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICBy
ZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSwKLSAgICAgICAgc3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9V
c2UudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUs
CisgICAgICAgIHN0eWxlVG9Vc2UuZm9udENhc2NhZGUoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwKICAgICAgICAgc3R5
bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQ
YXJ0LCBzdHlsZVRvVXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5kaXJlY3Rpb24o
KSwgaXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6RGVm
YXVsdEJhY2tncm91bmRDb2xvciwKICAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVw
LCB0aGVtZSgpLnBvcHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFJlbmRlclJ1YnlSdW46OmxheW91dCgp
CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcnQtPnN0eWxlKCkucnVieVBv
c2l0aW9uKCkgPT0gUnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIpIHsKICAgICAgICAgLy8gQm9w
b21vZm8uIFdlIG5lZWQgdG8gbW92ZSB0aGUgUmVuZGVyUnVieVRleHQgb3ZlciB0byB0aGUgcmln
aHQgc2lkZSBhbmQgY2VudGVyIGl0CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgcmVsYXRpdmUgdG8g
dGhlIGJhc2UuCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKLSAg
ICAgICAgZmxvYXQgZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250LmxldHRlclNwYWNpbmco
KSwgMi4wZiAqIHJ0LT5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpKTsKKyAg
ICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7Cisg
ICAgICAgIGZsb2F0IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9udC5sZXR0ZXJTcGFjaW5n
KCksIDIuMGYgKiBydC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0
KCkpOwogICAgICAgICBzZXRXaWR0aCh3aWR0aCgpICsgZGlzdGFuY2VCZXR3ZWVuQmFzZSAtIGZv
bnQubGV0dGVyU3BhY2luZygpKTsKICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiByYiA9IHJ1
YnlCYXNlKCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgZmlyc3RMaW5lVG9wID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIFBvcHVwTWVudVN0
eWxlIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtU3QKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyU2Vh
cmNoRmllbGQ6Om1lbnVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxl
KHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxl
KCkuZm9udCgpLCBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBQ
b3B1cE1lbnVTdHlsZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUsCiAgICAgICAgIHN0eWxlKCkuZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlKCku
dGV4dEluZGVudCgpLCBzdHlsZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5p
Y29kZUJpZGkoKSksIFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSw4ICsyMjksOCBAQCBib29sIFJlbmRlclRleHQ6OmlzVGV4dEZyYWdt
ZW50KCkgY29uc3QKIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKCkgY29uc3QKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHls
ZSgpOwotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUu
Zm9udCgpLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChzdHlsZS5mb250KCkudXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woKSkKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKHN0
eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2wo
KTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwot
ICAgIH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgp
ICE9IG5ld1N0eWxlLmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKSB7CisgICAgfSBl
bHNlIGlmIChvbGRTdHlsZS0+Zm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgp
ICE9IG5ld1N0eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkgewog
ICAgICAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tzbGFzaEFz
WWVuU3ltYm9sKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC00
NTEsNyArNDUxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgog
ICAgIHJldHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwg
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJU
ZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZs
b2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAorQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25z
dCBGb250Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAo
c3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7
CiAgICAgICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0
PFJlbmRlckNvbWJpbmVUZXh0PigqdGhpcyk7CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBSZW5k
ZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAg
IFN0cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAn
ICcgfHwgKHRleHRbMF0gPT0gJ1xuJyAmJiAhc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHx8IHRl
eHRbMF0gPT0gJ1x0JykgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgp
OyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3Jl
cyBmaXJzdC1saW5lLgogICAgICAgICBpZiAoc3RyaXBGcm9udFNwYWNlcykgewogICAgICAgICAg
ICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgICAgICBmbG9hdCBzcGFjZVdpZHRo
ID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAm
c3BhY2UsIDEsIHN0eWxlKSk7CkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0
cmltbWVkUHJlZldpZHRocyhmbG9hdAogCiAgICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRocyBi
eSBzY2FubmluZyB0aGUgc3RyaW5nIGZvciBuZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWspIHsK
LSAgICAgICAgY29uc3QgRm9udCYgZiA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdu
b3JlcyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZiA9IHN0eWxlLmZv
bnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAg
Ym9vbCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBiZWdpbk1heFcgPSBtYXhXOwogICAgICAg
ICBlbmRNYXhXID0gbWF4VzsKQEAgLTYzNywxMyArNjM3LDEzIEBAIHZvaWQgUmVuZGVyVGV4dDo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dB
bmROb0ZhbGxiYWNrRm9udHMgPSB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhl
bldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQorc3RhdGljIGlu
bGluZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIt
PnN0eWxlKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHls
ZSkpOwogfQogCi1zdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3Ry
aW5nVmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1
ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGlj
IGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdv
cmQsIGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3Ro
LCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAgc3VmZml4U3Rh
cnQgPSAwOwogICAgIGlmICh3b3JkLmxlbmd0aCgpIDw9IG1pbmltdW1TdWZmaXhMZW5ndGgpCkBA
IC03MDEsNyArNzAxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNh
bAogICAgIG1faGFzRW5kV1MgPSBmYWxzZTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSA9IHRoaXMtPnN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsg
Ly8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJz
dC1saW5lLgogICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gZm9udC53b3JkU3BhY2luZygpOwogICAg
IGludCBsZW4gPSB0ZXh0TGVuZ3RoKCk7CiAgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFr
SXRlcmF0b3IobV90ZXh0LCBzdHlsZS5sb2NhbGUoKSwgbWFwTGluZUJyZWFrVG9JdGVyYXRvck1v
ZGUoc3R5bGUubGluZUJyZWFrKCkpKTsKQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAgZmxvYXQgUmVu
ZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgICAgICBsZW4gPSB0ZXh0TGVuZ3Ro
KCkgLSBmcm9tOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IGZpcnN0TGlu
ZSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgIHJldHVybiB3aWR0aChmcm9tLCBs
ZW4sIGxpbmVTdHlsZS5mb250KCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cp
OworICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4
UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4
dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmLCBmbG9h
dCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0
aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9h
dCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBs
ZW4gPD0gdGV4dExlbmd0aCgpKTsKICAgICBpZiAoIXRleHRMZW5ndGgoKSkKQEAgLTEyMjYsNyAr
MTIyNiw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKIAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgZmxvYXQgdzsK
LSAgICBpZiAoJmYgPT0gJnN0eWxlLmZvbnQoKSkgeworICAgIGlmICgmZiA9PSAmc3R5bGUuZm9u
dENhc2NhZGUoKSkgewogICAgICAgICBpZiAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSgpICYmICFm
cm9tICYmIGxlbiA9PSB0ZXh0TGVuZ3RoKCkgJiYgKCFnbHlwaE92ZXJmbG93IHx8ICFnbHlwaE92
ZXJmbG93LT5jb21wdXRlQm91bmRzKSkgewogICAgICAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZ2x5cGhPdmVyZmxvdyk7CkBAIC0xNTU2LDcgKzE1
NTYsNyBAQCBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVDYW5Vc2VTaW1wbGVGb250CiB7CiAgICAg
aWYgKGlzQWxsQVNDSUkoKSB8fCBtX3RleHQuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigp
LCBsZW5ndGgoKSkgPT0gRm9udDo6U2ltcGxlOworICAgIHJldHVybiBGb250Q2FzY2FkZTo6Y2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnRDYXNj
YWRlOjpTaW1wbGU7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6bW9tZW50YXJpbHlSZXZlYWxMYXN0
VHlwZWRDaGFyYWN0ZXIodW5zaWduZWQgb2Zmc2V0QWZ0ZXJMYXN0VHlwZWRDaGFyYWN0ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRl
eHRCb3gmKTsKIAotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuLCBjb25zdCBGb250JiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3Qg
Rm9udENhc2NhZGUmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIHZpcnR1
YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBi
b29sIGZpcnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogCiAgICAgZmxvYXQg
bWluTG9naWNhbFdpZHRoKCkgY29uc3Q7CkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRU
ZXN0QWN0aW9uKSBvdmVycmlkZSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBsZW4pIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZv
bnQmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0
eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUm
LCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbEFT
Q0lJOyB9CiAgICAgYm9vbCBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sOjpoaXRJbm5lclRleHRFbGVtCiBmbG9hdCBSZW5kZXJUZXh0Q29u
dHJvbDo6Z2V0QXZlcmFnZUNoYXJXaWR0aCgpCiB7CiAgICAgZmxvYXQgd2lkdGg7Ci0gICAgaWYg
KHN0eWxlKCkuZm9udCgpLmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQor
ICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiB3aWR0aDsKIAogICAgIGNvbnN0IFVDaGFyIGNo
ID0gJzAnOwogICAgIGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKLSAgICBjb25z
dCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCBzdHIsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxp
bmdFeHBhbnNpb24pOwogICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICBy
ZXR1cm4gZm9udC53aWR0aCh0ZXh0UnVuKTsKQEAgLTE4OSw3ICsxODksNyBAQCBmbG9hdCBSZW5k
ZXJUZXh0Q29udHJvbDo6c2NhbGVFbVRvVW5pdHMoCiB7CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRo
ZSB1bml0c1BlckVtIHZhbHVlIGZvciBNUyBTaGVsbCBEbGcgYW5kIENvdXJpZXIgTmV3IGZyb20g
dGhlICJoZWFkIiBmb250IHRhYmxlLgogICAgIGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOwot
ICAgIHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0p
OworICAgIHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAqIHggLyB1
bml0c1BlckVtKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZUludHJpbnNp
Y0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBt
YXhMb2dpY2FsV2lkdGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6OmdldEF2ZQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhl
IGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9m
IENvdXJpZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVm
b3ggYW5kIFNhZmFyaSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVl
IGluIHRoZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KLSAgICBpZiAoc3R5bGUoKS5mb250
KCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCisgICAgaWYgKHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgcmV0
dXJuIHNjYWxlRW1Ub1VuaXRzKDEyMjkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBA
IGZsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXYKICAgICAvLyBvZiBNUyBT
aGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZh
cmkgV2luIGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZh
dWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hh
cldpZHRoIHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYg
KHN0eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAgIGlm
IChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIp
CiAgICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwogI2VuZGlmCiAKQEAgLTMzOCwx
NSArMzM4LDE1IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjoKICAg
ICBmbG9hdCBtYXhDaGFyV2lkdGggPSAwLmY7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5m
aXJzdEZhbWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQg
Zm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIE1TIFNoZWxs
IERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBX
aW4gYW5kCiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQg
Zm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCiAgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4
TWluKSB2YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KICAg
ICBpZiAoZmFtaWx5ID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgbWF4Q2hhcldpZHRoID0g
c2NhbGVFbVRvVW5pdHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoc3R5bGUoKS5mb250KCkuaGFzVmFs
aWRBdmVyYWdlQ2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHls
ZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CisgICAgZWxzZSBp
ZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQorICAg
ICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpLm1heENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5w
dXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgY2FzZSBC
dXR0b25QYXJ0OiB7CiAgICAgICAgIC8vIEJvcmRlcgogICAgICAgICBMZW5ndGhCb3ggYm9yZGVy
Qm94KHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5
bGUuYm9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAg
ICBib3JkZXJCb3ggPSBtX3RoZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnQoKSwg
Ym9yZGVyQm94LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBib3JkZXJCb3ggPSBt
X3RoZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIGJvcmRlckJv
eCwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52
YWx1ZSgpICE9IHN0YXRpY19jYXN0PGludD4oc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSkpIHsKICAg
ICAgICAgICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUoKSkKICAgICAgICAgICAgICAgICBz
dHlsZS5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJCb3gudG9wKCkudmFsdWUoKSk7CkBAIC0xNDMs
NyArMTQzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAg
ICAgICB9CiAKICAgICAgICAgLy8gUGFkZGluZwotICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0Jv
eCA9IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUucGFk
ZGluZ0JveCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhCb3ggcGFk
ZGluZ0JveCA9IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRl
KCksIHN0eWxlLnBhZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
aWYgKHBhZGRpbmdCb3ggIT0gc3R5bGUucGFkZGluZ0JveCgpKQogICAgICAgICAgICAgc3R5bGUu
c2V0UGFkZGluZ0JveChwYWRkaW5nQm94KTsKIApAQCAtMTU0LDI1ICsxNTQsMjUgQEAgdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICAvLyBXaWR0aCAvIEhl
aWdodAogICAgICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBoZXJlIGFyZSBhZmZlY3RlZCBi
eSB0aGUgem9vbS4KICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQg
ZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgotICAgICAgICBM
ZW5ndGhTaXplIGNvbnRyb2xTaXplID0gbV90aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUu
Zm9udCgpLCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhl
bWUtPmNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIExlbmd0aFNpemUoc3R5
bGUud2lkdGgoKSwgc3R5bGUuaGVpZ2h0KCkpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAg
ICAgICBpZiAoY29udHJvbFNpemUud2lkdGgoKSAhPSBzdHlsZS53aWR0aCgpKQogICAgICAgICAg
ICAgc3R5bGUuc2V0V2lkdGgoY29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChjb250
cm9sU2l6ZS5oZWlnaHQoKSAhPSBzdHlsZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxlLnNl
dEhlaWdodChjb250cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
IC8vIE1pbi1XaWR0aCAvIE1pbi1IZWlnaHQKLSAgICAgICAgTGVuZ3RoU2l6ZSBtaW5Db250cm9s
U2l6ZSA9IG1fdGhlbWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250KCksIHN0
eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUg
PSBtX3RoZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLndpZHRo
KCkgIT0gc3R5bGUubWluV2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldE1pbldpZHRoKG1p
bkNvbnRyb2xTaXplLndpZHRoKCkpOwogICAgICAgICBpZiAobWluQ29udHJvbFNpemUuaGVpZ2h0
KCkgIT0gc3R5bGUubWluSGVpZ2h0KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQo
bWluQ29udHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBG
b250Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRy
b2xGb250KHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAg
ICAgaWYgKGNvbnRyb2xGb250ICE9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKSkgewor
ICAgICAgICBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9u
dChwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAg
ICAgICBpZiAoY29udHJvbEZvbnQgIT0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRp
b24oKSkgewogICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgZm9udC4KICAgICAgICAgICAg
IGlmIChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQotICAgICAgICAgICAg
ICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgICAgICAgICAgc3R5bGUuZm9udENh
c2NhZGUoKS51cGRhdGUoMCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgb3VyIGxpbmUt
aGVpZ2h0CiAgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpm
aWxlTGlzdERlZmF1bHRMYWJlbAogICAgIHJldHVybiBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRM
YWJlbCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNv
bnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29s
IG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlz
dE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAg
ICAgaWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5
LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JS
ZXR1cm4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgZmls
ZUxpc3REZWZhdWx0TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25z
dCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNv
bnN0IEZvbnRDYXNjYWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBj
b25zdDsKIAogICAgIGVudW0gRmlsZVVwbG9hZERlY29yYXRpb25zIHsgU2luZ2xlRmlsZSwgTXVs
dGlwbGVGaWxlcyB9OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiAvKmlucHV0UmVuZGVyZXIqLywgY29uc3QgUmVuZGVy
T2JqZWN0JiAvKmJ1dHRvblJlbmRlcmVyKi8sIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmLCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSB7IHJldHVybiB0cnVlOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKICNpbXBvcnQgIkRhdGVDb21wb25lbnRzLmgi
CiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2lt
cG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2Fk
ZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAi
R3JhZGllbnQuaCIKQEAgLTU0NSw3ICs1NDUsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTZWxlY3RM
aXN0QnV0dG9uU3R5bGUoCiAgICAgCiBjbGFzcyBSZW5kZXJUaGVtZU1lYXN1cmVUZXh0Q2xpZW50
IDogcHVibGljIE1lYXN1cmVUZXh0Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZU1l
YXN1cmVUZXh0Q2xpZW50KGNvbnN0IEZvbnQmIGZvbnQsIFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCisgICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4
dENsaWVudChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAgICAgLCBtX3JlbmRlck9iamVjdChyZW5kZXJPYmplY3QpCiAgICAgICAgICwgbV9zdHlsZShz
dHlsZSkKQEAgLTU1Nyw3ICs1NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2ZvbnQu
d2lkdGgocnVuKTsKICAgICB9CiBwcml2YXRlOgotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJP
YmplY3Q7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CiB9OwpAQCAtNTc3LDcgKzU3
Nyw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRW5mb3JjZSB0aGUgd2lkdGggYW5kIHNldCB0aGUgYm94LXNpemlu
ZyB0byBjb250ZW50LWJveCB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcGFkZGluZy4KLSAgICBG
b250IGZvbnQgPSBzdHlsZS5mb250KCk7CisgICAgRm9udENhc2NhZGUgZm9udCA9IHN0eWxlLmZv
bnRDYXNjYWRlKCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0RWxl
bWVudC5yZW5kZXJlcigpOwogICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpICYmICFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRo
KGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZp
bGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0
aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBGbG9h
dFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5k
ZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYg
aW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
ODE3LDcgKzgxNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFMK
ICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKIAogICAgIGlmIChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkK
LSAgICAgICAgc3R5bGUuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoMCk7CiB9CiAKIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRy
b2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CkBAIC0xOTk3LDcg
KzE5OTcsNyBAQCBOU1RleHRGaWVsZENlbGwqIFJlbmRlclRoZW1lTWFjOjp0ZXh0RmllCiAgICAg
cmV0dXJuIG1fdGV4dEZpZWxkLmdldCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmZp
bGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYg
Zm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5n
IFJlbmRlclRoZW1lTWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmls
ZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVG
aWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgUm9v
dElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBib3hMaW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250cyAmJiAh
dXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGlu
ZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAgICAgIHVz
ZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpKTsK
KyAgICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9u
dHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MgPSB1c2VkRm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAgICAgICAgaW50
IHVzZWRGb250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSgpKTsKQEAg
LTEwMTcsNyArMTAxNyw3IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6dmVydGljYWxQb3Np
dGkKICAgICAKICAgICBpZiAodmVydGljYWxBbGlnbiAhPSBCQVNFTElORSkgewogICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgcGFyZW50TGluZVN0eWxlID0gZmlyc3RMaW5lID8gcGFyZW50LT5m
aXJzdExpbmVTdHlsZSgpIDogcGFyZW50LT5zdHlsZSgpOwotICAgICAgICBjb25zdCBGb250JiBm
b250ID0gcGFyZW50TGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQgPSBwYXJlbnRMaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgICAgICBpbnQg
Zm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4NCwxNyArMTg0LDE3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmwKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBw
dXJlbHkgb24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBz
dHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgYXV0byYgcHJpbWFyeUZvbnREYXRh
ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAocHJpbWFy
eUZvbnREYXRhLmlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChj
b25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93
KSkgewogICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSB8fCB0ZXh0UmVu
ZGVyZXIuaXNDb3VudGVyKCkgfHwgdGV4dFJlbmRlcmVyLmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVy
ZXIuaXNUZXh0RnJhZ21lbnQoKQogICAgICAgICAgICAgfHwgdGV4dFJlbmRlcmVyLmlzU1ZHSW5s
aW5lVGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3R5bGUu
Zm9udCgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnQ6OlNp
bXBsZSkKKyAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0
ZXh0UmVuZGVyZXIudGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwg
cHJpbWFyeUZvbnREYXRhKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dD
b250ZW50cy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91
dCB7CiAKIEZsb3dDb250ZW50czo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKLSAgICA6IGZvbnQoc3R5bGUuZm9udCgpKQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2Fk
ZSgpKQogICAgICwgdGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigpKQogICAgICwgY29sbGFwc2VX
aGl0ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQogICAgICwgcHJlc2VydmVOZXds
aW5lKHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNp
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNfaAogI2RlZmluZSBTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzX2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAg
ICAgc3RydWN0IFN0eWxlIHsKICAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUmKTsKIAotICAgICAgICBjb25zdCBGb250JiBmb250OworICAgICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udDsKICAgICAgICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247CiAgICAgICAgIGJvb2wg
Y29sbGFwc2VXaGl0ZXNwYWNlOwogICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgYm9v
bCBkZWJ1Z0JvcmRlcnNFbmFibGVkID0gZmxvdy5mcmFtZSgpLnNldHRpbmdzKCkuc2ltcGxlTGlu
ZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCA9ICpwYWludEluZm8uY29udGV4dDsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUu
Zm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUo
KTsKICAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0UGFpbnRTdHlsZSA9IGNvbXB1dGVUZXh0UGFpbnRT
dHlsZShmbG93LmZyYW1lKCksIHN0eWxlLCBwYWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0
aCA+IDApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMCw4ICsxMjAsOCBAQCBSdW5SZXNvbHZlcjo6UnVuUmVzb2x2ZXIoY29uc3QgUmVu
ZGVyQmxvCiAgICAgLCBtX2xpbmVIZWlnaHQobGluZUhlaWdodEZyb21GbG93KGZsb3cpKQogICAg
ICwgbV9iYXNlbGluZShiYXNlbGluZUZyb21GbG93KGZsb3cpKQogICAgICwgbV9ib3JkZXJBbmRQ
YWRkaW5nQmVmb3JlKGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKQotICAgICwgbV9hc2Nl
bnQoZmxvdy5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9k
ZXNjZW50KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCisgICAg
LCBtX2FzY2VudChmbG93LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpKQorICAgICwgbV9kZXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRy
aWNzKCkuZGVzY2VudCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9TaXppbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b1NpemluZy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsx
NjQsNyBAQCBib29sIFRleHRBdXRvU2l6aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVy
YWdlU2l6ZSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1
bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAg
ICB0ZXh0LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gdGV4
dC0+cGFyZW50KCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVl
OjphZGp1c3ROb2RlU2l6ZQogICAgICAgICAgICAgaWYgKGxpc3RNYXJrZXJSZW5kZXJlci0+aXNM
aXN0TWFya2VyKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
ID0gY2xvbmVSZW5kZXJTdHlsZVdpdGhTdGF0ZShsaXN0TWFya2VyUmVuZGVyZXItPnN0eWxlKCkp
OwogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+
ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KCpsaXN0TWFya2VyUmVuZGVyZXIp
LnNldFN0eWxlKHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1
c3ROb2RlU2l6ZQogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0
KExlbmd0aChsaW5lSGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0
eWxlLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KGxpbmVIZWlnaHRMZW5ndGgpOwogICAgICAgICAg
ICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKLSAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6
aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShh
dXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVj
dG9yKCkpOwogICAgICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQYXJl
bnRTdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MjIwLDcgKzIyMCw3IEBAIHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShvcmlnaW5hbFNpemUpOwogICAg
ICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRo
U3RhdGUodGV4dC0+c3R5bGUoKSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShh
dXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVj
dG9yKCkpOworICAgICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXpp
bmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7
CiAgICAgICAgICAgICB0ZXh0LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgdGhlIGxpbmUgaGVpZ2h0IG9mIHRo
ZSBwYXJlbnQuCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpy
ZXNldCgpCiAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1BhcmVudFN0eWxlID0g
Y2xvbmVSZW5kZXJTdHlsZVdpdGhTdGF0ZShwYXJlbnRTdHlsZSk7CiAgICAgICAgICAgICBuZXdQ
YXJlbnRTdHlsZS0+c2V0TGluZUhlaWdodChvcmlnaW5hbExpbmVIZWlnaHQpOwogICAgICAgICAg
ICAgbmV3UGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwot
ICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUt
PmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAg
ICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAgICAgcGFyZW50UmVuZGVyZXItPnNldFN0eWxlKG5ld1BhcmVudFN0eWxlLnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dFBhaW50ZXI6OlRleHRQYWludGVyKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250JiBmb250LAorVGV4dFBhaW50ZXI6
OlRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVk
VGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwKICAgICBpbnQgc3RhcnRQb3NpdGlvbkluVGV4dFJ1biwgaW50IGVuZFBvc2l0
aW9uSW5UZXh0Qm94U3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhh
c2lzTWFyaywgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCwgVGV4dFJ1biYgdGV4dFJ1
biwKICAgICBGbG9hdFJlY3QmIGJveFJlY3QsIEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBl
bXBoYXNpc01hcmtPZmZzZXQsIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNo
YWRvd0RhdGEqIHNlbGVjdGlvblNoYWRvdywKICAgICBib29sIHRleHRCb3hJc0hvcml6b250YWws
IFRleHRQYWludFN0eWxlJiB0ZXh0UGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlv
blBhaW50U3R5bGUpCkBAIC01Niw3ICs1Niw3IEBAIFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihH
cmFwaGljc0NvbnRleHQKIHsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFy
a3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0
UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKK3N0YXRpYyB2
b2lkIGRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZW1waGFzaXNNYXJrLAogICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IHRvKQogewogICAg
IGlmIChlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQpAQCAtMTEzLDcgKzExMyw3IEBAIFNoYWRvd0Fw
cGxpZXI6On5TaGFkb3dBcHBsaWVyKCkKICAgICAgICAgbV9jb250ZXh0LmNsZWFyU2hhZG93KCk7
CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3Qg
QXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssCitzdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hh
ZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywK
ICAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZz
ZXQsIGludCB0cnVuY2F0aW9uUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJv
b2wgc3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludGVyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0UGFpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHN0
YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKIAogY2xhc3MgVGV4dFBhaW50
ZXIgewogcHVibGljOgotICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29u
c3QgRm9udCYsCisgICAgVGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgYm9vbCBwYWludFNl
bGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBG
b250Q2FzY2FkZSYsCiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRleHRSdW4sIGludCBlbmRQb3Np
dGlvbkluVGV4dEJveFN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBo
YXNpc01hcmssIFJlbmRlckNvbWJpbmVUZXh0KiwKICAgICBUZXh0UnVuJiwgRmxvYXRSZWN0JiBi
b3hSZWN0LCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBj
b25zdCBTaGFkb3dEYXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25T
aGFkb3csCiAgICAgYm9vbCB0ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgbm9u
U2VsZWN0aW9uUGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50U3R5bGUp
OwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNoYWRvd0RhdGEqIG1fc2Vs
ZWN0aW9uU2hhZG93OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dE9ubHk7CiAgICAgYm9v
bCBtX3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseTsKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7
CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBpbnQgbV9zdGFydFBvc2l0aW9u
SW5UZXh0UnVuOwogICAgIGludCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuOwogICAgIGludCBtX2xl
bmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4
dElubGluZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDEzICs0ODYsMTMgQEAgaW5saW5lIHZvaWQgdXBk
YXRlQ291bnRlcklmTmVlZGVkKFJlbmRlcgogICAgIGRvd25jYXN0PFJlbmRlckNvdW50ZXI+KHJl
bmRlclRleHQpLnVwZGF0ZUNvdW50ZXIoKTsKIH0KIAotaW5saW5lIGZsb2F0IG1lYXN1cmVIeXBo
ZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udCYgZm9udCwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBt
ZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAw
KQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwog
ICAgIHJldHVybiBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRl
cmVyLCBmb250LCBzdHlsZS5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpLCBmYWxsYmFj
a0ZvbnRzKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCog
dGV4dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmb250LCBmbG9h
dCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5
b3V0ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZs
b2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBs
YXlvdXQgPSAwKQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRleHQtPnN0eWxl
KCk7CiAKQEAgLTUwMSw3ICs1MDEsNyBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChS
ZW5kZXJUZXh0CiAgICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9tLCBsZW4sIGZvbnQsIHhQ
b3MsICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7CiAKICAgICBpZiAobGF5b3V0KQot
ICAgICAgICByZXR1cm4gRm9udDo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVuLCAmZmFsbGJhY2tG
b250cyk7CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZTo6d2lkdGgoKmxheW91dCwgZnJvbSwg
bGVuLCAmZmFsbGJhY2tGb250cyk7CiAKICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIGZyb20sIGxlbiwgc3R5bGUpOwogICAg
IHJ1bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSAtIGZyb20pOwpAQCAt
NTIxLDcgKzUyMSw3IEBAIGlubGluZSB2b2lkIGVuc3VyZUNoYXJhY3RlckdldHNMaW5lQm94KEwK
ICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5zdG9wSWdub3JpbmdTcGFjZXMoSW5saW5lSXRlcmF0b3Io
MCwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJh
dG9yLm9mZnNldCgpKSk7CiB9CiAKLWlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRl
eHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRl
bnRpZmllciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1
dGl2ZUh5cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWlu
aW11bVN1ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQg
eFBvcywgaW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBz
ZVdoaXRlU3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3ImIGxp
bmVCcmVhaywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCitpbmxpbmUgdm9p
ZCB0cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1
dGl2ZUh5cGhlbmF0ZWRMaW5lcywgaW50IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQs
IGludCBtaW5pbXVtUHJlZml4TGltaXQsIGludCBtaW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVk
IGxhc3RTcGFjZSwgdW5zaWduZWQgcG9zLCBmbG9hdCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgs
IGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFj
ZVdvcmRTcGFjaW5nLCBJbmxpbmVJdGVyYXRvciYgbGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJs
ZSwgYm9vbCYgaHlwaGVuYXRlZCkKIHsKICAgICAvLyBNYXAgJ2h5cGhlbmF0ZS1saW1pdC17YmVm
b3JlLGFmdGVyfTogYXV0bzsnIHRvIDIuCiAgICAgdW5zaWduZWQgbWluaW11bVByZWZpeExlbmd0
aDsKQEAgLTYxNSwxMiArNjE1LDEyIEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFu
ZGxlVGV4dCgKICAgICB9CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5
bGUoKnJlbmRlclRleHQucGFyZW50KCksIG1fbGluZUluZm8pOwotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBzdHlsZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5m
b250Q2FzY2FkZSgpOwogICAgIGJvb2wgaXNGaXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2go
KTsKICAgICBib29sIGNhbkh5cGhlbmF0ZSA9IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0
byAmJiBXZWJDb3JlOjpjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOwogCiAgICAgdW5zaWdu
ZWQgbGFzdFNwYWNlID0gbV9jdXJyZW50Lm9mZnNldCgpOwotICAgIGZsb2F0IHdvcmRTcGFjaW5n
ID0gbV9jdXJyZW50U3R5bGUtPmZvbnQoKS53b3JkU3BhY2luZygpOworICAgIGZsb2F0IHdvcmRT
cGFjaW5nID0gbV9jdXJyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAg
ICBmbG9hdCBsYXN0U3BhY2VXb3JkU3BhY2luZyA9IDA7CiAgICAgZmxvYXQgd29yZFNwYWNpbmdG
b3JXb3JkTWVhc3VyZW1lbnQgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9MaW5lQnJlYWtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVCcmVha2VyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDcgQEAgc3RydWN0IFJlbmRlclRleHRJbmZvIHsKICAgICBSZW5kZXJUZXh0KiBtX3RleHQ7CiAg
ICAgT3duUHRyPFRleHRMYXlvdXQ+IG1fbGF5b3V0OwogICAgIExhenlMaW5lQnJlYWtJdGVyYXRv
ciBtX2xpbmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKKyAgICBjb25z
dCBGb250Q2FzY2FkZSogbV9mb250OwogfTsKIAogY2xhc3MgTGluZUJyZWFrZXIgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5o
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5l
SW5saW5lSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGlubGluZSBi
b29sIHJlcXVpcmVzTGluZUJveEZvckNvbnRlbnQoY28KICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlID0gbGluZVN0eWxlKCpwYXJlbnQsIGxpbmVJbmZvKTsKICAgICAgICAg
aWYgKGZsb3dTdHlsZS5saW5lSGVpZ2h0KCkgIT0gcGFyZW50U3R5bGUubGluZUhlaWdodCgpCiAg
ICAgICAgICAgICB8fCBmbG93U3R5bGUudmVydGljYWxBbGlnbigpICE9IHBhcmVudFN0eWxlLnZl
cnRpY2FsQWxpZ24oKQotICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0
cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dTdHlsZS5mb250
KCkuZm9udE1ldHJpY3MoKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udENhc2Nh
ZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZs
b3dTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgYm9vbCBwYXJzZU1hdGhN
TExlbmd0aChjb25zdCBTdHJpbmcmIHN0cgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgaWYgKHVuaXQgPT0gImVtIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFsdWUg
KiBzdHlsZS0+Zm9udCgpLnNpemUoKTsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVl
ICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKHVuaXQgPT0gImV4IikgewpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wgcGFy
c2VNYXRoTUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYKICAgICAgICAgICAgIGxlbmd0aCA9IC03
OyAgICAgICAgCiAgICAgfQogICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUg
PSBsZW5ndGggKiBzdHlsZS0+Zm9udCgpLnNpemUoKSAvIDE4OworICAgICAgICBsZW5ndGhWYWx1
ZSA9IGxlbmd0aCAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkxLDggKzExOTEs
OCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByCiAgICAgICAgIG1f
b3BlcmF0b3JGbGFncyA9IGVudHJ5LT5mbGFnczsKIAogICAgIC8vIExlYWRpbmcgYW5kIHRyYWls
aW5nIHNwYWNlIGlzIHNwZWNpZmllZCBhcyBtdWx0aXBsZSBvZiAxLzE4ZW0uCi0gICAgbV9sZWFk
aW5nU3BhY2UgPSBlbnRyeS0+bHNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0g
ICAgbV90cmFpbGluZ1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUo
KSAvIDE4OworICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5zaXplKCkgLyAxODsKKyAgICBtX3RyYWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNw
YWNlICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogfQogCiB2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQpAQCAtMTIyOSw5ICsxMjI5
LDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBt
X29wZXJhdG9yRmxhZ3MgJj0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSB8IE1hdGhN
TE9wZXJhdG9yRGljdGlvbmFyeTo6U2VwYXJhdG9yOyAvLyBUaGlzIHJlc2V0cyBhbGwgYnV0IHRo
ZSBGZW5jZSBhbmQgU2VwYXJhdG9yIHByb3BlcnRpZXMuCiAgICAgZWxzZQogICAgICAgICBtX29w
ZXJhdG9yRmxhZ3MgPSAwOyAvLyBUaGlzIHJlc2V0cyBhbGwgdGhlIG9wZXJhdG9yIHByb3BlcnRp
ZXMuCi0gICAgbV9sZWFkaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7
IC8vIFRoaXMgc2V0cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCi0gICAgbV90
cmFpbGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNl
dHMgdHJhaWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KLSAgICBtX21pblNpemUgPSBz
dHlsZSgpLmZvbnQoKS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgorICAg
IG1fbGVhZGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsg
Ly8gVGhpcyBzZXRzIGxlYWRpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX3Ry
YWlsaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OyAvLyBU
aGlzIHNldHMgdHJhaWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX21pblNp
emUgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0
byAiMWVtIi4KICAgICBtX21heFNpemUgPSBpbnRNYXhGb3JMYXlvdXRVbml0OyAvLyBUaGlzIHNl
dHMgbWF4c2l6ZSB0byAiaW5maW5pdHkiLgogCiAgICAgaWYgKG1fdGV4dENvbnRlbnQpIHsKQEAg
LTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVm
ZXIKICAgICAgICAgUmVuZGVyTWF0aE1MVG9rZW46OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKCk7CiAgICAgICAgIGlmIChpc0ludmlzaWJsZU9wZXJhdG9yKCkpIHsKICAgICAgICAgICAg
IC8vIEluIHNvbWUgZm9udHMsIGdseXBocyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyBoYXZlIG5v
bnplcm8gd2lkdGguIENvbnNlcXVlbnRseSwgd2Ugc3VidHJhY3QgdGhhdCB3aWR0aCBoZXJlIHRv
IGF2b2lkIHdpZGUgZ2Fwcy4KLSAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5m
b250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsIGZhbHNlKTsKKyAgICAg
ICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZv
ckNoYXJhY3RlcihtX3RleHRDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICAgICBmbG9hdCBnbHlw
aFdpZHRoID0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgICAgICAgICAgQVNTRVJUKGdseXBo
V2lkdGggPD0gbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGggLT0gZ2x5cGhXaWR0aDsKQEAgLTEzNjQsNyArMTM2NCw3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7CisgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSk7CiAgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBhZHZhbmNlRm9yR2x5cGgo
ZGF0YSk7CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKICAgICAgICAgaWYgKG1heGltdW1HbHlw
aFdpZHRoIDwgc3RyZXRjaFNpemUoKSkKQEAgLTE1MjEsNyArMTUyMSw3IEBAIGJvb2wgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAg
ICAgICAgYm90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRh
ID0gJnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIHRvcC5mb250RGF0YSA9
ICZzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgZXh0ZW5zaW9u
LmZvbnREYXRhID0gdG9wLmZvbnREYXRhOwogICAgIGJvdHRvbS5mb250RGF0YSA9IHRvcC5mb250
RGF0YTsKICAgICBpZiAobWlkZGxlLmdseXBoKQpAQCAtMTUzOCw4ICsxNTM4LDggQEAgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogCiAgICAgQVNTRVJUKG1faXNWZXJ0
aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIAotICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwot
ICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSB8
fCBiYXNlR2x5cGguZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKICAgICAgICAgcmV0dXJu
IGRhdGE7CiAKQEAgLTE1NzAsOCArMTU3MCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJl
dGNoeURhdGEgUmVuZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNoeURhdGEg
YXNzZW1ibHlEYXRhOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0
eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRh
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIEdseXBoRGF0
YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKICAg
ICBpZiAocHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09
ICZwcmltYXJ5Rm9udERhdGEpIHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7
CkBAIC0xNjE4LDEyICsxNjE4LDEyIEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURh
dGEgUmVuZGUKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgIC8vIFdlIGNvbnZl
cnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRh
dGEuCi0gICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgR2x5
cGhEYXRhIGV4dGVuc2lvbiA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcihz
dHJldGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOwotICAgICAgICBHbHlwaERh
dGEgYm90dG9tID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5
Q2hhcmFjdGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSB0b3AgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFj
dGVyLT50b3BDaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT5leHRlbnNpb25DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBib3R0b20gPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT5ib3R0b21DaGFyLCBmYWxzZSk7CiAgICAgICAgIEdseXBoRGF0YSBtaWRkbGU7CiAgICAgICAg
IGlmIChzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhcikKLSAgICAgICAgICAgIG1pZGRsZSA9
IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+
bWlkZGxlQ2hhciwgZmFsc2UpOworICAgICAgICAgICAgbWlkZGxlID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hh
ciwgZmFsc2UpOwogICAgICAgICBhc3NlbWJseURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9w
LCBleHRlbnNpb24sIGJvdHRvbSwgbWlkZGxlKTsKICAgICB9CiAKQEAgLTE2ODAsNyArMTY4MCw3
IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICAgICAgbV9z
dHJldGNoeURhdGEgPSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKG1fdGV4dENvbnRlbnQp
OwogICAgIGVsc2UgewogICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFzZSBn
bHlwaCBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHls
ZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVu
dCwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgZmxvYXQgYmFz
ZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5j
ZUZvckdseXBoKGJhc2VHbHlwaCk7CiAgICAgICAgIGlmIChzdHJldGNoU2l6ZSgpIDw9IGJhc2VT
aXplKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTgwMiw3ICsxODAyLDcgQEAgTGF5b3V0UmVj
dCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbAogCiAgICAgR2x5cGhCdWZmZXIgYnVmZmVy
OwogICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0YSwgYWR2YW5jZUZvckds
eXBoKGRhdGEpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCks
ICpkYXRhLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisgICAgaW5mby5jb250ZXh0
LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZl
ciwgMCwgMSwgb3JpZ2luKTsKIAogICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0KQEAgLTE4
OTgsNyArMTg5OCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4K
ICAgICAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKICAgICAgICAgTGF5b3V0
UG9pbnQgb3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0
LnkoKSAtIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBo
cyhzdHlsZSgpLmZvbnQoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYnVm
ZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0ds
eXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9u
dERhdGEsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xOTgwLDcgKzE5ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpw
YWludENoaWxkcmVuCiAKIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5n
U3BhY2VFcnJvcigpCiB7Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnRE
YXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGlmICgh
cHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xOTg5
LDcgKzE5ODksNyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluCiAg
ICAgTGF5b3V0VW5pdCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwogCiAgICAgaWYgKG1fc3RyZXRj
aHlEYXRhLm1vZGUoKSA9PSBEcmF3Tm9ybWFsKSB7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0g
c3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50KCksICFzdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0Q29udGVudCgp
LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgICAgICByZXR1cm4gd2lk
dGggLSBhZHZhbmNlRm9yR2x5cGgoZGF0YSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDcgQEAgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5kZXJN
YXRoTQogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91
dFVuaXQgaGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUp
CiB7Ci0gICAgaWYgKCFzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgp
KSB7CisgICAgaWYgKCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0
aERhdGEoKSkgewogICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRI
IGZvbnQsIHdlIGFsd2F5cyBtYWtlIHRoZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFu
IHRoZSB0YXJnZXQuCiAgICAgICAgIGRlcHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRv
bVBvaW50TG93ZXI7CiAgICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJh
ZGljYWxPcGVyYXRvcjo6Y29tcHV0CiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0
aHNEaXJ0eSgpKTsKIAotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5t
YXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTYs
NyArOTYsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiAKIHZv
aWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVu
dENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwg
bG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTExLDcgKzExMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWludCgK
ICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAh
PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnRE
YXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTcgKzE5OSwx
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKIAogICAgIC8vIFdlIHNl
dCBzb21lIGNvbnN0YW50cyB0byBkcmF3IHRoZSByYWRpY2FsLCBhcyBkZWZpbmVkIGluIHRoZSBP
cGVuVHlwZSBNQVRIIHRhYmxlcy4KIAotICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5
bGUoKS5mb250KCkuc2l6ZSgpOworICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnNpemUoKTsKIAogICAgIC8vIEZJWE1FOiBUaGUgcmVjb21tZW5kZWQg
ZGVmYXVsdCBmb3IgbV92ZXJ0aWNhbEdhcCBpbiBkaXNwbGF5c3R5bGUgaXMgcnVsZSB0aGlja25l
c3MgKyAxLzQgeC1oZWlnaHQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg3MzcpLgogICAgIG1fdmVydGljYWxHYXAgPSAxMSAqIG1fcnVsZVRoaWNrbmVzcyAvIDQ7
CiAgICAgbV9leHRyYUFzY2VuZGVyID0gbV9ydWxlVGhpY2tuZXNzOwotICAgIExheW91dFVuaXQg
a2VybkJlZm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKLSAgICBM
YXlvdXRVbml0IGtlcm5BZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAv
IDE4OworICAgIExheW91dFVuaXQga2VybkJlZm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuc2l6ZSgpIC8gMTg7CisgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAt
MTAgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0
b21SYWlzZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRh
ID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKGF1dG8qIG1hdGhE
YXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBGSVhNRTog
bV92ZXJ0aWNhbEdhcCBzaG91bGQgdXNlIFJhZGljYWxEaXNwbGF5U3R5bGVWZXJ0aWNhbCBpbiBk
aXNwbGF5IG1vZGUgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3
MzcpLgogICAgICAgICBtX3ZlcnRpY2FsR2FwID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChw
cmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CiAg
ICAgICAgIG1fcnVsZVRoaWNrbmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFy
eUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsUnVsZVRoaWNrbmVzcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFRva2VuLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDExICs4
OCwxMSBAQCB2b2lkIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIC8v
IFRoaXMgdHJpZXMgdG8gZW11bGF0ZSB0aGUgZGVmYXVsdCBtYXRodmFyaWFudCB2YWx1ZSBvbiA8
bWk+IHVzaW5nIHRoZSBDU1MgZm9udC1zdHlsZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHJldmlzZWQgd2hlbiBtYXRodmFyaWFudCBpcyBpbXBsZW1lbnRlZCAo
aHR0cDovL3drYnVnLzg1NzM1KSBhbmQgd2hlbiBmb250cyB3aXRoIE1hdGhlbWF0aWNhbCBBbHBo
YW51bWVyaWMgU3ltYm9scyBjaGFyYWN0ZXJzIGFyZSBtb3JlIHBvcHVsYXIuCiAgICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24obmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0
aW9uKCkpOwotICAgICAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IG5ld1N0eWxlLmdl
dCgpLmZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAg
ICAgICBpZiAoIW1fY29udGFpbnNFbGVtZW50ICYmIGVsZW1lbnQoKS50ZXh0Q29udGVudCgpLnN0
cmlwV2hpdGVTcGFjZSgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLmxlbmd0aCgpID09IDEgJiYgIXRv
a2VuRWxlbWVudC5oYXNBdHRyaWJ1dGUobWF0aHZhcmlhbnRBdHRyKSkKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKICAgICAgICAgaWYgKG5ld1N0
eWxlLmdldCgpLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAg
ICAgbmV3U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgICAgICAg
ICAgbmV3U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKICAg
ICB9CiAKICAgICB3cmFwcGVyLT5zZXRTdHlsZShXVEY6Om1vdmUobmV3U3R5bGUpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkN1cnNv
ckxpc3QuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRS
b3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHls
ZS5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJl
bmRlclN0eWxlOjppbmhlcml0ZWROb3RFcXVhbChjb25zCiB9CiAKICNpZiBFTkFCTEUoSU9TX1RF
WFRfQVVUT1NJWklORykKLWlubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9u
dCYgZm9udCkKK2lubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQpCiB7CiAgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gewogICAgICAgICBDYXNl
Rm9sZGluZ0hhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZhbWlseSgpLmlt
cGwoKSksCkBAIC0zMTUsNyArMzE1LDcgQEAgdWludDMyX3QgUmVuZGVyU3R5bGU6Omhhc2hGb3JU
ZXh0QXV0b3NpegogICAgIGhhc2ggXj0gcmFyZUluaGVyaXRlZERhdGEtPm5ic3BNb2RlOwogICAg
IGhhc2ggXj0gcmFyZUluaGVyaXRlZERhdGEtPmxpbmVCcmVhazsKICAgICBoYXNoIF49IFdURjo6
RmxvYXRIYXNoPGZsb2F0Pjo6aGFzaChpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQudmFs
dWUoKSk7Ci0gICAgaGFzaCBePSBjb21wdXRlRm9udEhhc2goaW5oZXJpdGVkLT5mb250KTsKKyAg
ICBoYXNoIF49IGNvbXB1dGVGb250SGFzaChpbmhlcml0ZWQtPmZvbnRDYXNjYWRlKTsKICAgICBo
YXNoIF49IGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZzsKICAgICBoYXNoIF49
IGluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmc7CiAgICAgaGFzaCBePSBpbmhlcml0
ZWRfZmxhZ3MuX2JveF9kaXJlY3Rpb247CkBAIC0zMzksNyArMzM5LDcgQEAgYm9vbCBSZW5kZXJT
dHlsZTo6ZXF1YWxGb3JUZXh0QXV0b3NpemluZwogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0
YS0+bGluZUJyZWFrID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrCiAgICAg
ICAgICYmIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkgPT0gb3RoZXItPnJhcmVJbmhl
cml0ZWREYXRhLT50ZXh0U2VjdXJpdHkKICAgICAgICAgJiYgaW5oZXJpdGVkLT5zcGVjaWZpZWRM
aW5lSGVpZ2h0ID09IG90aGVyLT5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKLSAgICAg
ICAgJiYgaW5oZXJpdGVkLT5mb250LmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVy
aXRlZC0+Zm9udCkKKyAgICAgICAgJiYgaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5lcXVhbEZvclRl
eHRBdXRvU2l6aW5nKG90aGVyLT5pbmhlcml0ZWQtPmZvbnRDYXNjYWRlKQogICAgICAgICAmJiBp
bmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+
aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICAmJiBpbmhlcml0ZWQtPnZlcnRpY2Fs
X2JvcmRlcl9zcGFjaW5nID09IG90aGVyLT5pbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFj
aW5nCiAgICAgICAgICYmIGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbiA9PSBvdGhlci0+
aW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBS
ZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoYwogI2lmIEVOQUJMRShJT1NfVEVYVF9B
VVRPU0laSU5HKQogICAgICAgICB8fCBpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQgIT0g
b3RoZXIuaW5oZXJpdGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0CiAjZW5kaWYKLSAgICAgICAgfHwg
aW5oZXJpdGVkLT5mb250ICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udAorICAgICAgICB8fCBpbmhl
cml0ZWQtPmZvbnRDYXNjYWRlICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udENhc2NhZGUKICAgICAg
ICAgfHwgaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVy
aXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWQtPnZl
cnRpY2FsX2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVy
X3NwYWNpbmcKICAgICAgICAgfHwgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uICE9IG90
aGVyLmluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbgpAQCAtMTE4NCw3ICsxMTg0LDcgQEAg
Y29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBkZXBlbmQgb24gbG9jYWxlLgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGh5cGhlbk1pbnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAx
KSk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlw
aGVuU3RyaW5nLCAoJmh5cGhlbiwgMSkpOwotICAgIHJldHVybiBmb250KCkucHJpbWFyeUZvbnRE
YXRhKCkuZ2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1p
bnVzU3RyaW5nOworICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmds
eXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmlu
ZzsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpIGNvbnN0CkBAIC0xMzQwLDIwICsxMzQwLDIwIEBAIGNvbnN0IEFuaW1hdGlvbiog
UmVuZGVyU3R5bGU6OnRyYW5zaXRpb24KICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgRm9udCYg
UmVuZGVyU3R5bGU6OmZvbnQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQ7IH0KLWNv
bnN0IEZvbnRNZXRyaWNzJiBSZW5kZXJTdHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVy
biBpbmhlcml0ZWQtPmZvbnQuZm9udE1ldHJpY3MoKTsgfQotY29uc3QgRm9udERlc2NyaXB0aW9u
JiBSZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVk
LT5mb250LmZvbnREZXNjcmlwdGlvbigpOyB9Citjb25zdCBGb250Q2FzY2FkZSYgUmVuZGVyU3R5
bGU6OmZvbnRDYXNjYWRlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZTsg
fQorY29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKTsgfQorY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBSZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsgfQogZmxvYXQgUmVu
ZGVyU3R5bGU6OnNwZWNpZmllZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0
aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9
Ci1pbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5m
b250LnBpeGVsU2l6ZSgpOyB9CitpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5waXhlbFNpemUoKTsgfQogCiBjb25zdCBMZW5n
dGgmIFJlbmRlclN0eWxlOjp3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT53b3JkU3BhY2luZzsgfQotZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmco
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpOyB9CitmbG9h
dCBSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+
Zm9udENhc2NhZGUubGV0dGVyU3BhY2luZygpOyB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6OnNldEZv
bnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIHYpCiB7Ci0gICAgaWYgKGluaGVy
aXRlZC0+Zm9udC5mb250RGVzY3JpcHRpb24oKSAhPSB2KSB7Ci0gICAgICAgIGluaGVyaXRlZC5h
Y2Nlc3MoKS0+Zm9udCA9IEZvbnQodiwgaW5oZXJpdGVkLT5mb250LmxldHRlclNwYWNpbmcoKSwg
aW5oZXJpdGVkLT5mb250LndvcmRTcGFjaW5nKCkpOworICAgIGlmIChpbmhlcml0ZWQtPmZvbnRD
YXNjYWRlLmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKKyAgICAgICAgaW5oZXJpdGVkLmFjY2Vz
cygpLT5mb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKHYsIGluaGVyaXRlZC0+Zm9udENhc2NhZGUu
bGV0dGVyU3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLndvcmRTcGFjaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwNCw3
ICsxNDA0LDcgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIAogICAg
ICAgICBmb250V29yZFNwYWNpbmcgPSAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBlcmNl
bnQ6Ci0gICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQoKSAqIGZvbnQoKS5z
cGFjZVdpZHRoKCkgLyAxMDA7CisgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNl
bnQoKSAqIGZvbnRDYXNjYWRlKCkuc3BhY2VXaWR0aCgpIC8gMTAwOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZpeGVkOgogICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2YWx1ZS52YWx1ZSgp
OwpAQCAtMTQxNywxMSArMTQxNywxMSBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2lu
ZyhMZW5ndGggCiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnQuc2V0V29yZFNwYWNpbmcoZm9udFdv
cmRTcGFjaW5nKTsKKyAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNldFdvcmRT
cGFjaW5nKGZvbnRXb3JkU3BhY2luZyk7CiAgICAgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCkt
PndvcmRTcGFjaW5nID0gV1RGOjptb3ZlKHZhbHVlKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6
c2V0TGV0dGVyU3BhY2luZyhmbG9hdCB2KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRM
ZXR0ZXJTcGFjaW5nKHYpOyB9Cit2b2lkIFJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZs
b2F0IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250Q2FzY2FkZS5zZXRMZXR0ZXJTcGFjaW5n
KHYpOyB9CiAKIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0IHNpemUpCiB7CkBA
IC0xNDM0LDcgKzE0MzQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBz
aXplCiAgICAgZWxzZQogICAgICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250
U2l6ZSwgc2l6ZSk7CiAKLSAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBm
b250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVj
dG9yID0gZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICBGb250RGVzY3JpcHRpb24g
ZGVzYyhmb250RGVzY3JpcHRpb24oKSk7CiAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNpemUp
OwogICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAg
dm9pZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogI2VuZGlmCiAKICAgICBz
ZXRGb250RGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgZm9udCgpLnVwZGF0ZShjdXJyZW50Rm9udFNl
bGVjdG9yKTsKKyAgICBmb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsK
IH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEq
IHNoYWRvdywgTGF5b3V0VW5pdCAmdG9wLCBMYXlvdXRVbml0ICZyaWdodCwgTGF5b3V0VW5pdCAm
Ym90dG9tLCBMYXlvdXRVbml0ICZsZWZ0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDcgQEAgY2xhc3MgQ29udGVudERhdGE7CiBjbGFzcyBDb3VudGVyQ29udGVu
dDsKIGNsYXNzIEN1cnNvckxpc3Q7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xhc3MgRm9u
dDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udE1ldHJpY3M7CiBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgTWFza0ltYWdlT3BlcmF0aW9uOwpAQCAtNjg5LDcgKzY4OSw3IEBAIHB1YmxpYzoK
ICAgICBFQ2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MuY2xl
YXIoKTsgfQogICAgIEVUYWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG5v
bmluaGVyaXRlZF9mbGFncy50YWJsZUxheW91dCgpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBGb250JiBmb250KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udENh
c2NhZGUmIGZvbnRDYXNjYWRlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBmbG9hdCBzcGVj
aWZpZWRGb250U2l6ZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGlubGluZSBTdHlsZUluaGVyaXRlZERh
dGE6OlN0eWxlSW5oZXJpdGUKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAs
IHNwZWNpZmllZExpbmVIZWlnaHQoby5zcGVjaWZpZWRMaW5lSGVpZ2h0KQogI2VuZGlmCi0gICAg
LCBmb250KG8uZm9udCkKKyAgICAsIGZvbnRDYXNjYWRlKG8uZm9udENhc2NhZGUpCiAgICAgLCBj
b2xvcihvLmNvbG9yKQogICAgICwgdmlzaXRlZExpbmtDb2xvcihvLnZpc2l0ZWRMaW5rQ29sb3Ip
CiB7CkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgU3R5bGVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09
KGNvbnMKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgJiYgc3BlY2lm
aWVkTGluZUhlaWdodCA9PSBvLnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRpZgotICAgICAgICAm
JiBmb250ID09IG8uZm9udAorICAgICAgICAmJiBmb250Q2FzY2FkZSA9PSBvLmZvbnRDYXNjYWRl
CiAgICAgICAgICYmIGNvbG9yID09IG8uY29sb3IKICAgICAgICAgJiYgdmlzaXRlZExpbmtDb2xv
ciA9PSBvLnZpc2l0ZWRMaW5rQ29sb3IKICAgICAgICAgJiYgaG9yaXpvbnRhbF9ib3JkZXJfc3Bh
Y2luZyA9PSBvLmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRl
ZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBTdHlsZUlu
aGVyaXRlZERhdGFfaAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Niw3ICs1
Niw3IEBAIHB1YmxpYzoKICAgICBMZW5ndGggc3BlY2lmaWVkTGluZUhlaWdodDsKICNlbmRpZgog
Ci0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZvbnRDYXNjYWRlOwogICAgIENvbG9y
IGNvbG9yOwogICAgIENvbG9yIHZpc2l0ZWRMaW5rQ29sb3I7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDEzICsyMjUsMTMgQEAgdm9pZCBS
ZW5kZXJTVkdJbmxpbmVUZXh0Ojp1cGRhdGVTY2FsZWRGbwogICAgIGNvbXB1dGVOZXdTY2FsZWRG
b250Rm9yU3R5bGUoKnRoaXMsIHN0eWxlKCksIG1fc2NhbGluZ0ZhY3RvciwgbV9zY2FsZWRGb250
KTsKIH0KIAotdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2NhbGVkRm9udEZv
clN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQpCit2b2lkIFJlbmRl
clNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGlu
Z0ZhY3RvciwgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQpCiB7CiAgICAgLy8gQWx0ZXIgZm9udC1z
aXplIHRvIHRoZSByaWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGluZyB0aGUgZ2x5
cGhzIHRoZW1zZWx2ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBpcyBzcGVjaWZp
ZWQKICAgICBzY2FsaW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2Ny
ZWVuRm9udFNpemVTY2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKICAgICBpZiAoc2NhbGluZ0ZhY3Rv
ciA9PSAxIHx8ICFzY2FsaW5nRmFjdG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRS
ZW5kZXJpbmdNb2RlKCkgPT0gR2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAgICAgIHNjYWxpbmdG
YWN0b3IgPSAxOwotICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udCgpOworICAgICAgICBz
Y2FsZWRGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5l
d1NjYWwKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRoZSBjYXNlIHdo
ZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQpLgogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9t
U3BlY2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3RvciwgcmVu
ZGVyZXIuZG9jdW1lbnQoKSkpOwogCi0gICAgc2NhbGVkRm9udCA9IEZvbnQoZm9udERlc2NyaXB0
aW9uLCAwLCAwKTsKKyAgICBzY2FsZWRGb250ID0gRm9udENhc2NhZGUoZm9udERlc2NyaXB0aW9u
LCAwLCAwKTsKICAgICBzY2FsZWRGb250LnVwZGF0ZShyZW5kZXJlci5kb2N1bWVudCgpLmVuc3Vy
ZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBSZW5kZXJT
VkdJbmxpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCiAKLSNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0
LmgiCkBAIC00MSw5ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
cyogbGF5b3V0QXR0cmlidXRlcygpIHsgcmV0dXJuICZtX2xheW91dEF0dHJpYnV0ZXM7IH0KIAog
ICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxpbmdGYWN0b3I7
IH0KLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRG
b250OyB9CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVy
biBtX3NjYWxlZEZvbnQ7IH0KICAgICB2b2lkIHVwZGF0ZVNjYWxlZEZvbnQoKTsKLSAgICBzdGF0
aWMgdm9pZCBjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZv
bnQpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3Rvciwg
Rm9udENhc2NhZGUmIHNjYWxlZEZvbnQpOwogCiAgICAgLy8gUHJlc2VydmVzIGZsb2F0aW5nIHBv
aW50IHByZWNpc2lvbiBmb3IgdGhlIHVzZSBpbiBEUlQuIEl0IGtub3dzIGhvdyB0byByb3VuZCBh
bmQgZG9lcyBhIGJldHRlciBqb2IgdGhhbiBlbmNsb3NpbmdJbnRSZWN0LgogICAgIEZsb2F0UmVj
dCBmbG9hdExpbmVzQm91bmRpbmdCb3goKSBjb25zdDsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBjcmVhdGVUZXh0
Qm94KCkgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX3NjYWxpbmdGYWN0b3I7Ci0gICAgRm9udCBt
X3NjYWxlZEZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9zY2FsZWRGb250OwogICAgIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzIG1fbGF5b3V0QXR0cmlidXRlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIEZsb2F0UmVjdCBTVkdJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWMKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVu
ZGVyZXIoKS5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0g
ICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7
CiAgICAgY29uc3QgRm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5m
b250TWV0cmljcygpOwogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFn
bWVudC55KTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKQpAQCAtMTcyLDcgKzE3Miw3IEBA
IExheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKIAogc3RhdGljIGlubGlu
ZSBib29sIHRleHRTaG91bGRCZVBhaW50ZWQoY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4
dFJlbmRlcmVyKQogewotICAgIC8vIEZvbnQ6OnBpeGVsU2l6ZSgpLCByZXR1cm5zIEZvbnREZXNj
cmlwdGlvbjo6Y29tcHV0ZWRQaXhlbFNpemUoKSwgd2hpY2ggcmV0dXJucyAiaW50KHggKyAwLjUp
Ii4KKyAgICAvLyBGb250Q2FzY2FkZTo6cGl4ZWxTaXplKCksIHJldHVybnMgRm9udERlc2NyaXB0
aW9uOjpjb21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5zICJpbnQoeCArIDAuNSkiLgog
ICAgIC8vIElmIHRoZSBhYnNvbHV0ZSBmb250IHNpemUgb24gc2NyZWVuIGlzIGJlbG93IHg9MC41
LCBkb24ndCByZW5kZXIgYW55dGhpbmcuCiAgICAgcmV0dXJuIHRleHRSZW5kZXJlci5zY2FsZWRG
b250KCkucGl4ZWxTaXplKCk7CiB9CkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxp
bmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkK
ICAgICAgICAgICAgICAgICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkg
PT0gVmlzdWFsT3JkZXIgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5
bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1
bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUo
cmVuZGVyZXIoKSkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC00NzUs
NyArNDc1LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBwb3NpdGlvbk9mZnNldEZvckRlYwogICAg
IHJldHVybiAwLjBmOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IHRoaWNrbmVzc0ZvckRlY29y
YXRpb24oVGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMgaW5saW5lIGZs
b2F0IHRoaWNrbmVzc0ZvckRlY29yYXRpb24oVGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KQogewogICAgIC8vIEZJWE1FOiBGb3IgU1ZHIEZvbnRzIHdlIG5lZWQgdG8gdXNl
IHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIDxmb250LWZhY2U+IGlmIHNwZWNpZmllZC4K
ICAgICAvLyBDb21wYXRpYmxlIHdpdGggQmF0aWsvT3BlcmEKQEAgLTUzNSw3ICs1MzUsNyBAQCB2
b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgUmVuZGVyU3R5bGUm
IGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxv
YXQgc2NhbGluZ0ZhY3RvciA9IDE7Ci0gICAgRm9udCBzY2FsZWRGb250OworICAgIEZvbnRDYXNj
YWRlIHNjYWxlZEZvbnQ7CiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxl
ZEZvbnRGb3JTdHlsZShkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSwgc2NhbGlu
Z0ZhY3Rvciwgc2NhbGVkRm9udCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkBAIC01
NzAsNyArNTcwLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZAog
ICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAg
ICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0g
cmVuZGVyZXIoKS5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZv
bnQgPSByZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3cgPSBzdHlsZS0+dGV4dFNoYWRvdygpOwogCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZy
YWdtZW50LngsIGZyYWdtZW50LnkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5l
OjpsYXlvdXRUZXh0T25MaQogCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHRleHQtPnRleHQoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlLT5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBz
dHlsZS0+Zm9udENhc2NhZGUoKTsKIAogICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIHNw
YWNpbmdMYXlvdXQoZm9udCk7CiAgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lIGJhc2Vs
aW5lTGF5b3V0KGZvbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgiCiAK
LSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlLmgiCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUoY29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6U1ZH
VGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIDog
bV9mb250KGZvbnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CkBAIC0z
NSw3ICszNSw3IEBAIGNsYXNzIFNWR1RleHRNZXRyaWNzOwogY2xhc3MgU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUpOwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZShj
b25zdCBGb250Jik7CisgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRD
YXNjYWRlJik7CiAKICAgICBmbG9hdCBjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KGNvbnN0IFNWR1Jl
bmRlclN0eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCkgY29uc3Q7CiAgICAgZmxvYXQg
Y2FsY3VsYXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25z
dCBSZW5kZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3Q7CkBAIC00NSw3ICs0NSw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVU
b0FsaWdubWVudEJhc2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogdGV4dFJlbmRlcmVyKSBjb25zdDsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBj
b25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNp
bmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nKGNvbnN0IEZvbnQmIGZvbnQpCitTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zzo6U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAg
ICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fbGFzdENoYXJhY3RlcigwKQogewpAQCAtOTgsNyAr
OTgsNyBAQCBmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsCiAKICAgICBm
bG9hdCBzcGFjaW5nID0gbV9mb250LmxldHRlclNwYWNpbmcoKSArIGtlcm5pbmc7CiAgICAgaWYg
KGN1cnJlbnRDaGFyYWN0ZXIgJiYgbGFzdENoYXJhY3RlciAmJiBtX2ZvbnQud29yZFNwYWNpbmco
KSkgewotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSAm
JiAhRm9udDo6dHJlYXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKEZvbnRD
YXNjYWRlOjp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYmICFGb250Q2FzY2FkZTo6
dHJlYXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKICAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9m
b250LndvcmRTcGFjaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRFbmdpbmVTcGFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFz
cyBTVkdSZW5kZXJTdHlsZTsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKQEAgLTMyLDEzICszMiwxMyBA
QCBjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKTsKIHB1
YmxpYzoKLSAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Jik7CisgICAg
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZs
b2F0IGNhbGN1bGF0ZVNWR0tlcm5pbmcoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHVGV4
dE1ldHJpY3M6OkdseXBoJiBjdXJyZW50R2x5cGgpOwogICAgIGZsb2F0IGNhbGN1bGF0ZUNTU0tl
cm5pbmdBbmRTcGFjaW5nKGNvbnN0IFNWR1JlbmRlclN0eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3Ro
Q29udGV4dCwgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiBwcml2YXRlOgotICAg
IGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAg
IGNvbnN0IFVDaGFyKiBtX2xhc3RDaGFyYWN0ZXI7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFNWR1RleHRN
ZXRyaWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkcKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9y
ID0gdGV4dFJlbmRlcmVyLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rv
cik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVyLnNjYWxlZEZv
bnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCA9IHRleHRSZW5kZXJlci5z
Y2FsZWRGb250KCk7CiAgICAgaW50IGxlbmd0aCA9IDA7CiAKICAgICAvLyBDYWxjdWxhdGUgd2lk
dGgvaGVpZ2h0IHVzaW5nIHRoZSBzY2FsZWQgZm9udCwgZGl2aWRlIHRoaXMgcmVzdWx0IGJ5IHRo
ZSBzY2FsaW5nRmFjdG9yIGFmdGVyd2FyZHMuCkBAIC03MCw3ICs3MCw3IEBAIFRleHRSdW4gU1ZH
VGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAgICAgICAgICAsIHN0eWxlLmRp
cmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRp
KCkpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmlu
Z0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAg
ICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkxLDcgKzkxLDcgQEAgU1ZHVGV4dE1l
dHJpY3MgU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBTVkdUZXh0TWV0cmljczo6U1ZHVGV4
dE1ldHJpY3MoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVu
c2lnbmVkIGxlbmd0aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lKQogewot
ICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERh
dGEoKS5pc1NWR0ZvbnQoKTsKKyAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOwogICAgIGZsb2F0IHNj
YWxpbmdGYWN0b3IgPSB0ZXh0LnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0Zh
Y3Rvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDkgKzEwMCw5IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjppbml0
aWFsaXplTWUKICAgICBtX2NvbXBsZXhTdGFydFRvQ3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0
cmljcygpOwogICAgIG1fdG90YWxXaWR0aCA9IDA7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRG
b250ID0gdGV4dC5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZv
bnQgPSB0ZXh0LnNjYWxlZEZvbnQoKTsKICAgICBtX3J1biA9IFNWR1RleHRNZXRyaWNzOjpjb25z
dHJ1Y3RUZXh0UnVuKHRleHQpOwotICAgIG1faXNDb21wbGV4VGV4dCA9IHNjYWxlZEZvbnQuY29k
ZVBhdGgobV9ydW4pID09IEZvbnQ6OkNvbXBsZXg7CisgICAgbV9pc0NvbXBsZXhUZXh0ID0gc2Nh
bGVkRm9udC5jb2RlUGF0aChtX3J1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAKICAgICBp
ZiAobV9pc0NvbXBsZXhUZXh0KQogICAgICAgICBtX3NpbXBsZVdpZHRoSXRlcmF0b3IgPSBudWxs
cHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZH
Rm9udERhdGEqIHN2Z0ZvbnQKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKLWZsb2F0IFNW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcm
IGdseXBoTmFtZSkgY29uc3QKK2Zsb2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9h
dFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAg
ICAgV2lkdGhJdGVyYXRvciBpdCgmZm9udCwgcnVuKTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1
ZmZlcjsKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpkcmF3U1ZHCiAgICAgfQogfQogCi1zdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZv
bnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9u
dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYg
cHJpbWFyeUZvbnREYXRhID0gZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAoIXByaW1h
cnlGb250RGF0YS5pc1NWR0ZvbnQoKSkKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgR2x5cGhE
YXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29uCiAgICAgcmV0dXJuIEdseXBoRGF0YShmb250RWxl
bWVudC0+bWlzc2luZ0dseXBoKCksICZwcmltYXJ5Rm9udERhdGEpOwogfQogCi1HbHlwaERhdGEg
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBG
b250JiBmb250LCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJv
b2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgs
IFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKQorR2x5cGhEYXRhIFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9v
bCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwg
U3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCiB7CiAgICAgR2x5cGhEYXRhIGds
eXBoRGF0YSA9IGZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBB
dXRvVmFyaWFudCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCkBAIC0zNDIsNyArMzQyLDcg
QEAgR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogICAgIC8vIFRoZSBi
ZWhhdmlvciBkb2VzIG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZC4gRm9yIHNpbXBsaWNpdHkgd2Ug
ZG9uJ3QgdHJ5IHRvIHJlc29sdmUgZm9udCBmYWxsYmFja3MgY29udGV4dC1zZW5zaXRpdmVseS4K
ICAgICBGb250RGVzY3JpcHRpb24gZmFsbGJhY2tEZXNjcmlwdGlvbiA9IGZvbnQuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgZmFsbGJhY2tEZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhWZWN0b3I8QXRv
bWljU3RyaW5nPiB7IHNhbnNTZXJpZkZhbWlseSB9KTsKLSAgICBGb250IGZhbGxiYWNrRm9udChm
YWxsYmFja0Rlc2NyaXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2lu
ZygpKTsKKyAgICBGb250Q2FzY2FkZSBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlvbiwg
Zm9udC5sZXR0ZXJTcGFjaW5nKCksIGZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgZmFsbGJhY2tG
b250LnVwZGF0ZShmb250LmZvbnRTZWxlY3RvcigpKTsKIAogICAgIHJldHVybiBmYWxsYmFja0Zv
bnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRvVmFyaWFudCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHRfaAogI2RlZmluZSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dF9oCiAKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDkgKzQyLDkgQEAgcHVibGljOgogICAgIFJlbmRl
clNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVQYWludGluZ1Jlc291cmNlOyB9CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291
cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNl
ID0gb2JqZWN0OyB9CiAKLSAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY29uc3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3Ry
aW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRo
SXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hh
cmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2Vz
U3RyaW5nQ2FjaGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25z
dCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5n
JiBnbHlwaE5hbWUpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tl
cm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIq
LCBpbnQgZnJvbSkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveFN0eWxlLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJv
eC5oIgogCkBAIC04OSw3ICs4OSw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JE
ZWNvcmF0aW8KICAgICBmbG9hdCB3YXZ5T2Zmc2V0OwogICAgICAgICAKICAgICBUZXh0RGVjb3Jh
dGlvblN0eWxlIGRlY29yYXRpb25TdHlsZSA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxl
KCk7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmZs
b2F0SGVpZ2h0KCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOwogICAgIEdseXBoT3ZlcmZsb3cgb3ZlcmZsb3dS
ZXN1bHQ7CiAgICAgCiAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0
eWxlV2F2eSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxl
LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRC
b3hTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIElubGlu
ZVRleHRCb3hTdHlsZV9oCiAjZGVmaW5lIElubGluZVRleHRCb3hTdHlsZV9oCiAKLSNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1
bWVudChjb25zCiAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKIAogICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gZG9j
dW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCkgPyBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZF
eGlzdHMoKS0+Zm9udFNlbGVjdG9yKCkgOiBudWxscHRyOwotICAgIGRvY3VtZW50U3R5bGUuZ2V0
KCkuZm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgIGRvY3VtZW50U3R5bGUuZ2V0KCku
Zm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKIAogICAgIHJldHVybiBkb2N1bWVu
dFN0eWxlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2
ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCByZXNvbHZl
VHJlZShEb2N1bWVudCYgZG9jdW1lbnQsIENoYQogICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnQuc2V0dGluZ3MoKSkgewogICAgICAgICAgICAgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwogICAgICAg
ICAgICAgaWYgKHNldHRpbmdzLT5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSAmJiBz
dHlsZVJlc29sdmVyKQotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udCgp
LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAg
ZG9jdW1lbnRTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5m
b250U2VsZWN0b3IoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3Vt
ZW50Q2hhbmdlID0gZGV0ZXJtaW5lQ2hhbmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50
LnJlbmRlclZpZXcoKS0+c3R5bGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw5ICsyODAsOSBAQCB2b2lkIGNvbXB1dGVOb3JtYWxp
emVkU3BhY2VzKGNvbnN0IFRleHRSCiAgICAgaWYgKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNo
ZS5sZW5ndGgoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocnVuLmNoYXJhY3RlcnNMZW5ndGgo
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAocnVuLmlzOEJpdCgpKQotICAgICAgICBub3Jt
YWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJh
Y3RlcnM4KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3Bh
Y2VzU3RyaW5nQ2FjaGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0
ZXJzOCgpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBlbHNlCi0gICAgICAgIG5vcm1h
bGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFj
dGVyczE2KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3Bh
Y2VzU3RyaW5nQ2FjaGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0
ZXJzMTYoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CiAgICAgaWYgKG1pcnJvcikKICAgICAg
ICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gY3JlYXRlU3RyaW5nV2l0aE1pcnJvcmVk
Q2hhcmFjdGVycyhub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRv
ci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlNWR0dseXBoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hLZXJuRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAj
aW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZVNyY0VsZW1l
bnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
b250Q2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgpAQCAtNDYzLDEyICs0NjMsMTIgQEAgdm9pZCBX
ZWJQcm9jZXNzOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdQogCiB2b2lkIFdlYlByb2Nlc3M6OnNl
dEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxleFRleHQp
CiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQg
PyBXZWJDb3JlOjpGb250OjpDb21wbGV4IDogV2ViQ29yZTo6Rm9udDo6QXV0byk7CisgICAgV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OnNldENvZGVQYXRoKGFsd2F5c1VzZUNvbXBsZXhUZXh0ID8gV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250Q2FzY2FkZTo6QXV0byk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6c2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVz
ZUZvbnRTbW9vdGhpbmcpCiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6c2V0U2hvdWxkVXNlU21vb3Ro
aW5nKHVzZUZvbnRTbW9vdGhpbmcpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRTaG91
bGRVc2VTbW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6
dXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1
YWdlcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDcgKzgwMiw3IEBA
IEVkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKICAgICBpZiAoIXNlbGVj
dGlvbi5pc05vbmUoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIGlm
IChSZW5kZXJTdHlsZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZy
YW1lLCBub2RlVG9SZW1vdmUpKSB7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxl
LT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgICAgICAgICBDVEZv
bnRSZWYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENU
Rm9udCgpOwogICAgICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gZm9udCA/
IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29j
b2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
QVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0
cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgogICAgIG1fY29tcG9zaXRpbmdSZW5kZXJT
ZXJ2ZXJQb3J0ID0gV1RGOjptb3ZlKHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Bv
cnQpOwogICAgIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBwYXJhbWV0ZXJzLnByZXNlbnRl
ckFwcGxpY2F0aW9uUGlkOwogICAgIG1fc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9u
ID0gcGFyYW1ldGVycy5zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb247Ci0gICAgRm9u
dDo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFibGVL
ZXJuaW5nQW5kTGlnYXR1cmVzQnlEZWZhdWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOwor
ICAgIEZvbnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGln
YXR1cmVzIDogMCk7CiAKICAgICBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OlJlbGllZkxvZ2dlcjo6
c2V0TG9nZ2luZ0VuYWJsZWQocGFyYW1ldGVycy5zaG91bGRFbmFibGVNZW1vcnlQcmVzc3VyZVJl
bGllZkxvZ2dpbmcpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3Ry
aW5nRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0
TlNTdHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAKICNpbXBvcnQgPFdlYkNv
cmUvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29y
ZU5TU3RyaW5nRXh0cmFzLmg+CkBAIC05Miw3ICs5Miw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQ
b2ludDooTlNQb2ludClwb2ludCAKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAgICAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAKLSAgICAgICAgRm9udCB3ZWJD
b3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29u
dGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21v
b3RoaW5nIDogQW50aWFsaWFzZWQpOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChG
b250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0Ry
YXdpbmdUb1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3RoaW5nIDog
QW50aWFsaWFzZWQpOwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgp
OwogICAgICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApAQCAtMTM4LDcgKzEzOCw3
IEBAIC0gKGZsb2F0KV93ZWJfd2lkdGhXaXRoRm9udDooTlNGb250ICopZm8KICAgICBbc2VsZiBn
ZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJl
cihidWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9u
dFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgICAgIEZvbnRDYXNj
YWRlIHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSks
ICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0p
OwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBy
dW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICAgICAgcmV0dXJuIHdlYkNvcmVGb250Lndp
ZHRoKHJ1bik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRv
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5j
YXRvci5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJT
dHJpbmdUcnVuY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDIxICsyOSwyMSBAQAogI2lt
cG9ydCAiV2ViU3RyaW5nVHJ1bmNhdG9yLmgiCiAKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFj
ZS5oIgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNj
YWRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRQbGF0Zm9ybURhdGEuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU3RyaW5nVHJ1bmNhdG9yLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAotc3RhdGljIFdlYkNvcmU6OkZvbnQmIGZvbnRGcm9tTlNGb250KE5TRm9u
dCAqZm9udCkKK3N0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQoTlNG
b250ICpmb250KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNGb250
Pj4gY3VycmVudE5TRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29yZTo6Rm9u
dD4gY3VycmVudEZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OkZvbnRD
YXNjYWRlPiBjdXJyZW50Rm9udDsKICAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50TlNGb250
LmdldCgpLmdldCgpXSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRGb250OwogICAgIGN1cnJlbnRO
U0ZvbnQuZ2V0KCkgPSBmb250OwotICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9u
dChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAg
ICBjdXJyZW50Rm9udC5nZXQoKSA9IFdlYkNvcmU6OkZvbnRDYXNjYWRlKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0
IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50
Rm9udDsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBN
ZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw3IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAKICAgICAgICAgUG9wdXBNZW51
U3R5bGUgc3R5bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udCgp
KSB7CisgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewogICAgICAg
ICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5T
Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9h
dCBzaXplID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNp
emUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTQ5MCw3ICsxNDkwLDcgQEAgLSAoQk9PTClfdmlld0NsYXNzOihDbGFzcyAqKXZD
bGFzcyBhbmRSZQogCiArICh2b2lkKV9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDoo
Qk9PTClmCiB7Ci0gICAgRm9udDo6c2V0Q29kZVBhdGgoZiA/IEZvbnQ6OkNvbXBsZXggOiBGb250
OjpBdXRvKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoZiA/IEZvbnRDYXNjYWRlOjpD
b21wbGV4IDogRm9udENhc2NhZGU6OkF1dG8pOwogfQogCiArICh2b2lkKV9zZXRBbGxvd3NSb3Vu
ZGluZ0hhY2tzOihCT09MKWFsbG93c1JvdW5kaW5nSGFja3MKQEAgLTMxNjgsMTIgKzMxNjgsMTIg
QEAgLSAoQk9PTClfZGFzaGJvYXJkQmVoYXZpb3I6KFdlYkRhc2hib2FyZAogCiArICh2b2lkKV9z
ZXRTaG91bGRVc2VGb250U21vb3RoaW5nOihCT09MKWYKIHsKLSAgICBGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcoZik7CisgICAgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhm
KTsKIH0KIAogKyAoQk9PTClfc2hvdWxkVXNlRm9udFNtb290aGluZwogewotICAgIHJldHVybiBG
b250OjpzaG91bGRVc2VTbW9vdGhpbmcoKTsKKyAgICByZXR1cm4gRm9udENhc2NhZGU6OnNob3Vs
ZFVzZVNtb290aGluZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQ3MTAsNyArNDcx
MCw3IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBb
ZGVmYXVsdHMgYm9vbEZvcktleTpXZWJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXTsKICNlbmRpZgog
Ci0gICAgRm9udDo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xG
b3JLZXk6V2ViS2l0S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tl
eV0gPyBLZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdB
bmRMaWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0
dXJlcyA6IDApOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBhdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQgPSBbc2VsZiBfc2hvdWxkQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25C
ZUVuYWJsZWRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244686</attachid>
            <date>2015-01-15 03:31:23 -0800</date>
            <delta_ts>2015-01-15 04:03:01 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-7.patch</filename>
            <type>text/plain</type>
            <size>415421</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZv
bnQoKS5maXJzdEZhbWlseSgpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQo
OCkgPT0gIi13ZWJraXQtIikKICAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFt
ZS5zdWJzdHJpbmcoOCk7CiAKICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1F
KSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpbnQgZm9udFdlaWdodCA9
IC0xOwotICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIHN3aXRjaCAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6
CiAgICAgICAgIGZvbnRXZWlnaHQgPSAxMDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKIAogICAgIHJl
c3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfVU5ERVJMSU5FKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
ICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpID8gInNpbmdsZSIgOiAibm9uZSIpOwogCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAi
aXRhbGljIiA6ICJub3JtYWwiKTsKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwg
c3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3JtYWwiKTsKIAog
ICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmli
dXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERl
Y29yYXRpb24oKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpID8gInRydWUiIDogImZhbHNl
Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgogI2ltcG9ydCAiQ2hyb21l
LmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpAQCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8K
LSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3Ig
PSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4
dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1w
b3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgi
CiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRN
TEFuY2hvckVsZW1lbnQuaCIKQEAgLTg0OCw3ICs4NDgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCBy
YW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNz
aWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNvbG9y
cwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRyYWdJbWFnZS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAi
SFRNTE5hbWVzLmgiCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBh
dXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAj
ZWxzZQogLSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVm
KV9mb250CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
cmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJGbG9hdFBvaW50Lmgi
Ci0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKQEAgLTcxLDcgKzcxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiB1c2luZyBXZWJDb3JlOjpGbG9hdFBvaW50OwotdXNpbmcgV2ViQ29yZTo6Rm9udDsKK3VzaW5n
IFdlYkNvcmU6OkZvbnRDYXNjYWRlOwogdXNpbmcgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Owog
dXNpbmcgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTA0LDggKzE1MDQsOCBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChD
CiBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNl
cGFyYXRlZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+Zm9udCgpLmZh
bWlseUNvdW50KCk7ICsraSkKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQodmFsdWVGb3JGYW1p
bHkoc3R5bGUtPmZvbnQoKS5mYW1pbHlBdChpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+Zm9udENhc2NhZGUoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWls
eUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKQEAgLTI1NDUsNyArMjU0NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWMKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdvcmRCcmVhazoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29y
ZFNwYWNpbmc6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHls
ZS0+Zm9udCgpLndvcmRTcGFjaW5nKCksIHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5n
KCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgogICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1dyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
aXIuaCIKICNpbmNsdWRlICJSR0JDb2xvci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVy
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZjxMb2FkRm9udENhbGxiYWNrPihuZXcgTG9hZEZvbnRDYWxsYmFjayhu
dW1Mb2FkaW5nLCBmb250TG9hZGVyLCBsb2FkQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNrPiBjcmVhdGVGcm9t
UGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYgZm9udExvYWRlciwg
Y29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNr
PiBjcmVhdGVGcm9tUGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYg
Zm9udExvYWRlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBvbnN1Y2Nlc3M7CiAgICAgICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+
IG9uZXJyb3I7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBGb250TG9hZGVyOjpsb2FkRm9udChj
b25zdCBEaWN0aW9uYQogICAgIFN0cmluZyBmb250U3RyaW5nOwogICAgIGlmICghcGFyYW1zLmdl
dCgiZm9udCIsIGZvbnRTdHJpbmcpKQogICAgICAgICByZXR1cm47Ci0gICAgRm9udCBmb250Owor
ICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJp
bmcsIGZvbnQpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+
IGNhbGxiYWNrID0gTG9hZEZvbnRDYWxsYmFjazo6Y3JlYXRlRnJvbVBhcmFtcyhwYXJhbXMsICp0
aGlzLCBmb250KTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250
KGNvbnN0IERpY3Rpb25hCiBib29sIEZvbnRMb2FkZXI6OmNoZWNrRm9udChjb25zdCBTdHJpbmcm
IGZvbnRTdHJpbmcsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzZWNvbmQg
cGFyYW1ldGVyICh0ZXh0KSBpcyBpZ25vcmVkLgotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZvbnRTdHlsZShmb250U3RyaW5nLCBmb250KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250
LmZhbWlseUNvdW50KCk7IGkrKykgewpAQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSgKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShpZCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoaWQp
LmdldCgpKTsKIH0KIAotYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0
cmluZyYgZm9udFN0cmluZywgRm9udCYgZm9udCkKK2Jvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZv
bnRTdHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnRDYXNjYWRlJiBmb250KQogewog
ICAgIC8vIEludGVycHJldCBmb250U3RyaW5nIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2ZvbnQn
IGF0dHJpYnV0ZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuCiAgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9u
dFN0eWxlKGNvbnN0IAogCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZWZhdWx0Rm9u
dERlc2NyaXB0aW9uKTsKIAotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlLT5mb250KCku
Zm9udFNlbGVjdG9yKCkpOworICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250
IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMzE5
LDcgKzMxOSw3IEBAIGJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKICAg
ICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoc3R5bGVSZXNvbHZlciwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZSk7
CiAKLSAgICBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmb250ID0gc3R5bGUtPmZvbnRDYXNj
YWRlKCk7CiAgICAgZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2U7CiBjbGFzcyBEaWN0
aW9uYXJ5OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZvbnQ7CitjbGFz
cyBGb250Q2FzY2FkZTsKIGNsYXNzIExvYWRGb250Q2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBl
bmRpbmdFdmVudHNUaW1lckZpcmVkKCkgeyBmaXJlUGVuZGluZ0V2ZW50cygpOyB9CiAgICAgdm9p
ZCBzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2b2lkIGZpcmVQZW5kaW5n
RXZlbnRzKCk7Ci0gICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYsIEZvbnQm
KTsKKyAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udENhc2NhZGUm
KTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVTaGUKIHsKICAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgdGhpcyk7CiAgICAgaWYgKGF1dG8gcmVuZGVyVmlldyA9IGRvY3VtZW50KCku
cmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnQoKS51cGRhdGUo
Zm9udFNlbGVjdG9yKCkpOworICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIAogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdmlld3BvcnRTdHlsZVJlc29sdmVyKCktPnJlc29sdmUoKTsKQEAgLTc0OCw3
ICs3NDgsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAg
ICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewogICAgICAgICAgICAgc19zdHlsZU5v
dFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwogICAgICAg
ICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3Ip
OworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwogICAgICAgICByZXR1cm4gKnNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC0xMDMxLDkgKzEwMzEsOSBAQCBSZWY8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTCiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBh
cmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBz
dHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7
CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBt
X3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgcmV0
dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvclpvb21DaGFuZ2Uo
c3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNo
YW5nZShzdHlsZSk7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwor
ICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgaWYg
KG1fc3RhdGUuZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKCkpCiAgICAgICAgIHN0eWxlLT5zZXRI
YXNWaWV3cG9ydFVuaXRzKHRydWUpOwogICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0yMTg1LDcgKzIxODUsNyBAQCBp
bmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAKICAgICAvLyBDaGluZXNl
IGFuZCBKYXBhbmVzZSBsYWNrIHdvcmQgYm91bmRhcnkgbWFya3MsIGFuZCB0aGVyZSBpcyBubyBj
bGVhciBhZ3JlZW1lbnQgb24gd2hhdCBjb25zdGl0dXRlcwogICAgIC8vIGEgd29yZCwgc28gdHJl
YXQgdGhlIHBvc2l0aW9uIGJlZm9yZSBhbnkgQ0pLIGNoYXJhY3RlciBhcyBhIHdvcmQgc3RhcnQu
Ci0gICAgaWYgKEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woZmlyc3RDaGFyYWN0ZXIpKQor
ICAgIGlmIChGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJjaFN0
YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFbGVtZW50Lmgi
CiAjaW1wb3J0ICJFbGVtZW50VHJhdmVyc2FsLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVy
LmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgpAQCAtMTExNCw3ICsxMTE0LDcgQEAgc3RhdGlj
IFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0YXRpYyBQbGF0Zm9y
bUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdGF0
aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250
ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEwIEBAIE5TQXR0cmlidXRl
ZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5n
bGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChz
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3Vn
aCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
ICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpXSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKICAgICAgICAgICAgIFthdHRy
cy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSFRNTENvbnZlcnRlci5oIgpAQCAtMjEzLDcgKzIxMyw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVz
dWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkgewogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTIz
NSw3ICsyMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAg
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVu
ZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJp
bWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJp
bWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpA
QCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0Zv
clMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAgIGlm
IChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50
LmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAi
RnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKQEAgLTExNSw3ICsxMTUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpm
b250Rm9yU2VsCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9u
dCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUp
CiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9y
U2VsCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhh
dmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQg
PSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9u
dCkgewpAQCAtMTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclMKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0Zv
bnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAo
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkg
JiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xv
cjo6YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDUsNyArMjEwNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihkZWZhdWx0Rm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dCgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBuZXdTdHls
ZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKQEAgLTIxMjIsNyArMjEyMiw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBzdHlsZVJlc29s
dmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogCi0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9yKCkpOwogICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKICAgICBzdHlsZVJlc29sdmVyLmZvbnRT
ZWxlY3RvcigpLT5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcygmbW9kaWZpYWJsZVN0
YXRlKCkpOwpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdUZXh0SQogICAgIGlmIChmaWxsICYmIGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1pl
cm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBhY2Nl
c3NGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBhY2Nlc3NGb250KCk7CiAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwog
CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gdGV4dDsKQEAgLTIzNzIsMTAgKzIzNzIsMTAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKGxvY2F0aW9uLngoKSAtIG1hc2tSZWN0LngoKSwg
bG9jYXRpb24ueSgpIC0gbWFza1JlY3QueSgpKTsKICAgICAgICAgICAgIC8vIFdlIGRyYXcgd2hl
biBmb250V2lkdGggaXMgMCBzbyBjb21wb3NpdGluZyBvcGVyYXRpb25zIChlZywgYSAiY29weSIg
b3ApIHN0aWxsIHdvcmsuCiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoKGZvbnRXaWR0aCA+IDAgPyAod2lkdGggLyBmb250V2lkdGgpIDogMCksIDEpKTsKLSAg
ICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBG
bG9hdFBvaW50KDAsIDApLCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAg
ICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBGbG9h
dFBvaW50KDAsIDApLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUo
LW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250
ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwpAQCAtMjM5OCwxNSArMjM5OCwxNSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAgICBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNv
bXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBs
b2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAg
ICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250OjpVc2VG
YWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRl
eHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7
CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgewotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhdyh0ZXh0UmVjdCk7CiAgICAgfQogfQpAQCAtMjQyNiw3ICsyNDI2LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmluZmxhdGVTdAogICAgIHJlY3QuaW5mbGF0ZShk
ZWx0YSk7CiB9CiAKLWNvbnN0IEZvbnQmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YWNjZXNz
Rm9udCgpCitjb25zdCBGb250Q2FzY2FkZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nl
c3NGb250KCkKIHsKICAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAKICAgICAgICAgU3RyaW5nIG1f
dW5wYXJzZWRGb250OwotICAgICAgICBGb250IG1fZm9udDsKKyAgICAgICAgRm9udENhc2NhZGUg
bV9mb250OwogICAgICAgICBib29sIG1fcmVhbGl6ZWRGb250OwogICAgIH07CiAKQEAgLTMwOCw3
ICszMDgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0
cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCA9
IDAsIGJvb2wgdXNlTWF4V2lkdGggPSBmYWxzZSk7CiAKLSAgICBjb25zdCBGb250JiBhY2Nlc3NG
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGFjY2Vzc0ZvbnQoKTsKIAogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxNZW5jbG9zZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIFN0cmluZyBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OmxvbmdEaXZM
ZWYKICAgICBUZXh0UnVuIHJ1bihjbG9zaW5nQnJhY2UuaW1wbCgpLCBjbG9zaW5nQnJhY2UubGVu
Z3RoKCkpOwogICAgIE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKG5vZGUgJiYg
bm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBwYWRk
aW5nLmFwcGVuZE51bWJlcihmb250LndpZHRoKHJ1bikpOwogICAgICAgICBwYWRkaW5nLmFwcGVu
ZExpdGVyYWwoInB4Iik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEdlbmVyaWNGYW1pbGll
cy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudVN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51U3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBQb3B1cE1lbnVTdHlsZV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBvcHVwTWVudVNpemVNaW5pCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udCYg
Zm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFw
cGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24s
IGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tn
cm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1l
bnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVT
aXplTm9ybWFsKQorICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgdmlz
aWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5n
dGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHRE
aXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBl
ID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVj
dFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKICAg
ICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAgICAsIG1fYmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQpCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2ZvcmVncm91bmRDb2xvcjsgfQogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIGNvbnN0
IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQogICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25lKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25lOyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0QXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7IH0KQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2xvciBtX2ZvcmVncm91bmRDb2xv
cjsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBGb250IG1fZm9udDsKKyAgICBG
b250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgYm9vbCBtX2lzRGlz
cGxheU5vbmU7CiAgICAgYm9vbCBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRy
b2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CkBAIC00Miw3ICs0Miw3IEBAIExlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250
cm9sUGEKICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ1NTIHN5c3RlbSBjb2xvcnMg
YW5kIGZvbnRzCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihUaGVtZUNvbG9yKSBjb25z
dCB7IHJldHVybiBDb2xvcigpOyB9Ci0gICAgdmlydHVhbCBGb250IHN5c3RlbUZvbnQoVGhlbWVG
b250LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCB7IHJldHVybiBGb250KCk7IH0KKyAgICB2aXJ0
dWFsIEZvbnRDYXNjYWRlIHN5c3RlbUZvbnQoVGhlbWVGb250LCBGb250RGVzY3JpcHRpb24mKSBj
b25zdCB7IHJldHVybiBGb250Q2FzY2FkZSgpOyB9CiAgICAgCiAgICAgLy8gSG93IGZhc3QgdGhl
IGNhcmV0IGJsaW5rcyBpbiB0ZXh0IGZpZWxkcy4KICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiAwLjU7IH0KQEAgLTgyLDE3ICs4MiwxNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5bGVzIG9m
IGNvbnRyb2xzLgogICAgIAogICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3VsdCBzaG91
bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IC8qem9vbUZh
Y3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdmly
dHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5m
b250RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9v
bWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBh
bHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIExlbmd0
aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9v
bWVkU2l6ZTsgfQorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9vbWVkU2l6ZTsgfQogICAgIAogICAg
IC8vIFJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29y
ZGluYXRlcy4gIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KICAgICAKICAgICAv
LyBBbGxvd3MgdGhlIHRoZW1lIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIu
Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29u
c3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAgICAgCiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hp
dGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGcmFtZVZp
ZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIGFsbG93IGNvbXBp
bGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBo
YXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBjbGFzcyBkZWZpbml0aW9uCi10ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRM
YXlvdXQqIHB0cikKLXsKLSAgICBXZWJDb3JlOjpGb250OjpkZWxldGVMYXlvdXQocHRyKTsKLX0K
LQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLQotY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFj
a0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLAotICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAg
IDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotfTsKLQotc3RhdGljIGJvb2wgaXNEcmF3
bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gcnVuLnJlbmRl
cmluZ0NvbnRleHQoKTsKLX0KLQotc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiogc2V0OwotICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHNldCA9IG5ldyBIYXNoU2V0
PEF0b21pY1N0cmluZz47Ci0gICAgICAgIHNldC0+YWRkKCJNUyBQR290aGljIik7Ci0gICAgICAg
IFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwg
MHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBzZXQtPmFk
ZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5p
Y29kZU5hbWVNU1BHb3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsK
LSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywg
MHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWlj
U3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1l
TVNQTWluY2hvKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBHb3RoaWMiKTsKLSAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4
MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0
cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNH
b3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIE1pbmNobyIpOwotICAgICAgICBVQ2hh
ciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBF
LCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TTWluY2hvKSkpOwotCi0gICAgICAg
IHNldC0+YWRkKCJNZWlyeW8iKTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9
IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUF9OwotICAgICAgICBzZXQtPmFkZChBdG9t
aWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVN
ZWlyeW8pKSk7Ci0gICAgfQotICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0K
LUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOwotCi1UeXBlc2V0dGluZ0Zl
YXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAo
Q3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLUZvbnQ6OkZvbnQoKQotICAgIDogbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBt
X3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQot
ICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDApCi17Ci19Ci0KLUZvbnQ6OkZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNp
bmcpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKLSAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZk
LmZpcnN0RmFtaWx5KCkpKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlz
IGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0
ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCi0gICAgLCBtX2xldHRlclNwYWNpbmcoMCkKLSAg
ICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFs
c2UpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSkKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50
ZXJGb250KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9v
dGhpbmdNb2RlKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQo
KSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKLSNlbmRpZgotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9y
UGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwg
bV93b3JkU3BhY2luZygwKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERh
dGEuZm9udCgpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250
R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9u
dFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdl
dFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdl
aWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50ZXJGb250KCkpOwotICAgIG1fZ2x5cGhzID0g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxl
Y3Rvci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikK
LSAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQotICAgICwg
bV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCi0gICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9s
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQot
ICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0Zl
YXR1cmVzKCkpCi17Ci19Ci0KLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhl
cikKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwot
ICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7Ci0gICAgbV9sZXR0ZXJTcGFjaW5nID0gb3Ro
ZXIubV9sZXR0ZXJTcGFjaW5nOwotICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNl
dHRpbmdGZWF0dXJlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgRm9udDo6b3BlcmF0
b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3Jp
cHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dv
cmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVyLm1fZ2x5cGhzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDYW4gdGhl
c2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lw
ZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVj
dG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBv
dGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewotICAgIC8vIFRo
aXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2Fj
aGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCi0gICAgRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCAzPiBmYW1pbGllczsKLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKLSAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdz
OwotfTsKLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhz
Q2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQotICAgICAgICA6IGtleShXVEY6Om1v
dmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShnKSkKLSAgICB7IH0KLSAgICBGb250
R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7Ci19OwotCi10
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVF
bnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHNDYWNoZTsKLQotc3RhdGljIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNo
ZUtleSYgYikKLXsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnRE
ZXNjcmlwdGlvbkNhY2hlS2V5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZm9u
dFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24g
IT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250
U2VsZWN0b3JGbGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmZhbWlsaWVz
LnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxp
ZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgp
Ci17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwg
Y2FjaGUsICgpKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgaW52YWxpZGF0ZUZvbnRH
bHlwaHNDYWNoZSgpCi17Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsKLX0KLQotdm9p
ZCBjbGVhcldpZHRoQ2FjaGVzKCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2Fj
aGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIo
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlRm9udEdseXBo
c0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBrZXkuZm9u
dERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRl
c2NyaXB0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKQotICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpKTsKLSAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwotICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwotICAgIGtleS5m
b250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVz
RmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlv
bikgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2go
Y29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA3
PiBoYXNoQ29kZXM7Ci0gICAgaGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtl
eS5mYW1pbGllcy5zaXplKCkpOwotCi0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgaGFzaENvZGVzLnVu
Y2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9ySWQpOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytpKQotICAgICAgICBoYXNoQ29kZXMudW5jaGVj
a2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2go
a2V5LmZhbWlsaWVzW2ldKSA6IDApOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVk
KSk7Ci19Ci0KLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNo
ZSgpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7Ci0gICAgRm9udEdseXBo
c0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsKLSAgICBmb3Ig
KEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgp
Lmhhc09uZVJlZigpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci19Ci0KLXN0YXRp
YyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi17Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9u
dEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkp
OwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7
Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0Nh
Y2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7
Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVu
dHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIG5ld0VudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSks
IEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBSZWY8Rm9udEdseXBocz4g
Z2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVy
OwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1
bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVuZUNvdW50ZXIg
JSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRF
bnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2Fs
IGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJp
ZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5i
ZWdpbigpKTsKLSAgICByZXR1cm4gZ2x5cGhzOwotfQotCi12b2lkIEZvbnQ6OnVwZGF0ZShQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAotewotICAgIG1fZ2x5cGhz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7Ci0gICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tz
bGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKLSAgICBtX3R5cGVzZXR0aW5n
RmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi1mbG9hdCBGb250
OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Ci17Ci0gICAgLy8gRG9u
J3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJl
IGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCi0gICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2Un
IGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFs
bGJhY2sKLSAgICAvLyBmb250KS4KLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8p
OwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8g
RklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVu
cyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAw
MDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3Ro
KCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9
IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICBy
ZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotCi0g
ICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYgKGlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0byA8IDAp
Ci0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
Y29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIGVsc2UKLSAgICAgICAg
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50
LCBmcm9tLCB0byk7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVy
bmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBl
eHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgotICAgICAgICBpZiAo
IWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQotICAgICAgICAgICAgZmFs
bGJhY2tGb250cyA9IDA7Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUg
dGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCi0gICAgICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92
ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKLSAgICAgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVz
ID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgIGJv
b2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRl
clNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hl
KCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBpZiAoY2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkp
Ci0gICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKLQotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Ci0gICAgaWYgKCFmYWxsYmFja0ZvbnRzKQot
ICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKLQotICAgIGZsb2F0
IHJlc3VsdDsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQotICAgICAgICByZXN1
bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBpZiAoY2FjaGVF
bnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICpjYWNoZUVudHJ5ID0g
cmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkKLSAgICAgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSNlbmRp
ZgotCi0gICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5sZW5ndGgoKTsKLSAgICBnbHlwaE5hbWUgPSAi
IjsKLSAgICByZXR1cm4gd2lkdGgocnVuKTsKLX0KLQotR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkgY29uc3QKLXsKLSAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgp
LmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihj
KTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAgICAgIGMgPSB1
cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKLSAg
ICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gdV9jaGFyTWlycm9yKGMpOwotCi0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3Jp
cHRpb24sIHZhcmlhbnQpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxU
ZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBj
b25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KikKLXsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7
Ci0gICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAotICAgICJBcmlhbCBIZWJyZXciLAotICAgICJD
aGFsa2JvYXJkIiwKLSAgICAiQ29jaGluIiwKLSAgICAiQ29yc2l2YSBIZWJyZXciLAotICAgICJD
b3VyaWVyIiwKLSAgICAiRXVwaGVtaWEgVUNBUyIsCi0gICAgIkdlbmV2YSIsCi0gICAgIkdpbGwg
U2FucyIsCi0gICAgIkhlaSIsCi0gICAgIkhlbHZldGljYSIsCi0gICAgIkhvZWZsZXIgVGV4dCIs
Ci0gICAgIkluYWlNYXRoaSIsCi0gICAgIkthaSIsCi0gICAgIkx1Y2lkYSBHcmFuZGUiLAotICAg
ICJNYXJrZXIgRmVsdCIsCi0gICAgIk1vbmFjbyIsCi0gICAgIk1zaHRha2FuIiwKLSAgICAiTmV3
IFBlbmluaW0gTVQiLAotICAgICJPc2FrYSIsCi0gICAgIlJhYW5hbmEiLAotICAgICJTVEhlaXRp
IiwKLSAgICAiU3ltYm9sIiwKLSAgICAiVGltZXMiLAotICAgICJBcHBsZSBCcmFpbGxlIiwKLSAg
ICAiQXBwbGUgTGlHb3RoaWMiLAotICAgICJBcHBsZSBMaVN1bmciLAotICAgICJBcHBsZSBTeW1i
b2xzIiwKLSAgICAiQXBwbGVHb3RoaWMiLAotICAgICJBcHBsZU15dW5nam8iLAotICAgICIjR3Vu
Z1NlbyIsCi0gICAgIiNIZWFkTGluZUEiLAotICAgICIjUENNeXVuZ2pvIiwKLSAgICAiI1BpbEdp
IiwKLX07Ci0KLS8vIEZvciBmb250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9u
J3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBPUy8yIHRhYmxlCi0vLyBmb3IgYXZnQ2hhcldp
ZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRo
ZSBhdmdDaGFyV2lkdGgKLS8vIGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2Vl
bXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAotLy8gYnV0LCBpbiBv
cmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhp
cyBjaGVjayBmb3IKLS8vIGFsbCBwbGF0Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFt
aWx5KCk7Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotICAgIC8vIEludGVybmFsIGZv
bnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFi
bGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOwot
Ci0gICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgewotICAgICAg
ICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21p
Y1N0cmluZz47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQotICAgICAgICAgICAg
Zm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbaV0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOwot
fQotCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdp
ZHRoKSBjb25zdAotewotICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9u
dERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdo
dCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
LXsKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0g
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgcmV0dXJuIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOwot
Ci0gICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVj
dGlvblJlY3QsIGZyb20sIHRvKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKLQotICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0lu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7Ci0gICAgbm9ybWFsaXplZC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3RlcnNbaV0pKTsKLQotICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKLQotdm9pZCBGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3Ro
aW5nOwotfQotCi1ib29sIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCi17Ci0gICAgcmV0dXJu
IHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci19Ci0KLXZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29k
ZVBhdGggcCkKLXsKLSAgICBzX2NvZGVQYXRoID0gcDsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9u
dDo6Y29kZVBhdGgoKQotewotICAgIHJldHVybiBzX2NvZGVQYXRoOwotfQotCi12b2lkIEZvbnQ6
OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcykKLXsKLSAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlw
ZXNldHRpbmdGZWF0dXJlczsKLX0KLQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlcygpCi17Ci0gICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXM7Ci19Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRS
dW4mIHJ1bikgY29uc3QKLXsKLSAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQotICAgICAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICByZXR1cm4gU2ltcGxlOwotI2VuZGlmCi0KLSAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3Jp
cHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBDb21w
bGV4OwotICAgIAotICAgIGlmIChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMpKQotICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQotICAgICAgICBy
ZXR1cm4gU2ltcGxlOwotCi0gICAgaWYgKHJ1bi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFNp
bXBsZTsKLQotICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRp
bmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCi0gICAgcmV0
dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3Ro
KCkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRo
YXQgd2UgCi0gICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5
L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIG5vdCAnY29tYmluaW5n
JywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KLSAgICAvLyBBbHRl
cm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBz
b3J0ZWQKLSAgICAvLyBsaXN0IG9mIHJhbmdlcy4KLSAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1w
bGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBV
KzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxldHRlcnMpICAK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDJFOSkgCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAg
dGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzNkYpCi0gICAgICAgICAgICByZXR1cm4gQ29t
cGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkx
IHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywg
SGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1a2hhCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJp
YywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAotICAgICAgICAvLyBE
ZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVs
dWd1LCBLYW5uYWRhLCAKLSAgICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8s
IFRpYmV0YW4sIE15YW5tYXIKLSAgICAgICAgaWYgKGMgPCAweDA2MDApIAotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTA5RikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAo
b25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3Nl
OwotICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1
bHQgb2Ygc3RlcCBBKQotICAgICAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDExRkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICBpZiAoYyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0
aGlvcGljIGNvbWJpbmluZyBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChjIDw9IDB4MTM1RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlm
IChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywg
QnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xpYW4KLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE4QUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChV
bmljb2RlIDQuMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDE5
NEYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTk4
MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5ldyBUYWkgTHVlCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOURGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBC
dWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRpYwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MUNGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3Vn
aCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxREZGKQotICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMg
d2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKLSAgICAgICAgaWYgKGMgPD0g
MHgyMDAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAweDIw
RDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDIwRkYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VG
IHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgyQ0YxKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAy
RiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDMwMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJp
bmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHhBNjdEKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFy
ayBmb3IgQmFtdW0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEE2
RjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgIC8vIFUrQTgwMCB0aHJv
dWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5k
ZWQsCi0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRl
bmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAotICAgICAgICBpZiAoYyA8IDB4QTgwMCkg
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQotICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdC
MCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBFeHQuIEIKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9n
YXRlCi0KLSAgICAgICAgICAgIGlmIChpID09IGxlbiAtIDEpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysraV07Ci0gICAg
ICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgVUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFs
IEluZGljYXRvciBTeW1ib2xzCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweDFGMUZGKQotICAgICAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3Rl
ciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9u
IHNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAxRUYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzEx
MDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3Jp
cHRzCi0gICAgICAgICAgICAvLyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KLQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAw
IHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4RkUwRikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZF
MkYgQ29tYmluaW5nIGhhbGYgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoYyA8PSAweEZFMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMp
Ci17Ci0gICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCi0gICAg
aWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgotICAgIGlmIChj
ID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRTgwICYmIGMg
PD0gMHgyRUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBLYW5neGkgUmFk
aWNhbHMuCi0gICAgaWYgKGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgU3Ryb2tlcy4KLSAgICBpZiAoYyA+PSAweDMxQzAg
JiYgYyA8PSAweDMxRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCi0gICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhG
QUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVv
Z3JhcGhzIEV4dGVuc2lvbiBCLgotICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRl
b2dyYXBocyBFeHRlbnNpb24gQy4KLSAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjcz
RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dy
YXBocyBFeHRlbnNpb24gRC4KLSAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRl
b2dyYXBocyBTdXBwbGVtZW50LgotICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKLXsKLSAgICAvLyAweDJDNyBD
YXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQotICAgIC8vIDB4MkNBIE1vZGlmaWVyIExl
dHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKLSAgICAvLyAweDJD
QiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25l
IAotICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKLSAg
ICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMg
PT0gMHgyRDkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIwMjAp
IHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChj
ID09IDB4MjAzQykKLSAgICAgICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8
IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEpCi0gICAgICAg
IHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChj
ID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQotICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8
IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09
IDB4MjEyMSkKLSAgICAgICAgfHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChj
ID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1QSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdC
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09
IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNC
RSkgfHwgKGMgPT0gMHgyM0JGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+
PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAweDI0OTIpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgyNDlDICYmIGMgPD0gMHgyNEZGKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0g
MHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChjID09IDB4MjVBQikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9
PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1
QkMpIHx8IChjID09IDB4MjVCRCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlm
ICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9
PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1
Q0MpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9
IDB4MjVEMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI1RTIgJiYg
YyA8PSAweDI1RTYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyNUVG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4
MjYwMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAo
YyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAw
eDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkg
fHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMg
PT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID09IDB4MkIxQSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgotICAgIGlm
IChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgot
ICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgzMDMwKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0gMHgzMDNGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhpcmFnYW5hCi0gICAgaWYgKGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEthdGFrYW5hIAotICAgIGlmIChjID49
IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBC
b3BvbW9mbwotICAgIGlmIChjID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKLSAgICBpZiAoYyA+PSAw
eDMxQTAgJiYgYyA8PSAweDMxQkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotIAotICAgIC8vIEVu
Y2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCi0gICAgaWYgKGMgPj0gMHgzMjAwICYmIGMg
PD0gMHgzMkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0
aWJpbGl0eS4KLSAgICBpZiAoYyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLgotICAgIGlm
IChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwg
KGMgPT0gMHhGRTE5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHhG
RjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGgg
Rm9ybXMKLSAgICAvLyBVc3VhbGx5IG9ubHkgdXNlZCBpbiBDSksKLSAgICBpZiAoYyA+PSAweEZG
MDAgJiYgYyA8PSAweEZGRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW1vamku
Ci0gICAgaWYgKGMgPT0gMHgxRjEwMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgxRjE0OSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7Ci19Ci0K
LXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAg
IGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
XSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bikKLXsKLSAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7
Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0
ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4
cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAt
IDFdOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFy
YWN0ZXJzW2kgLSAyXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9n
cmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIGlmIChzdHJpbmdWaWV3LmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0
cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBp
c0FmdGVyRXhwYW5zaW9uKTsKLSAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRp
cmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9H
Q19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9y
IGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBO
b3ZlbWJlciAyMDEwLgotICAgIGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVn
ZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90Ci0gICAg
ICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJz
eWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGb250Ojpp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1f
Z2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwotfQotICAgIAotR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgp
Ci17Ci0gICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2
ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNp
cmFibGUgcmVuZGVyaW5ncywKLSAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksg
Y2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KLSAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7Ci0KLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0g
R2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGlj
aCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgotICAgICAgICByZXR1cm4gR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7Ci0g
ICAgfQotICAgIAotICAgIGlmICh0ZXh0UnVuLmlzOEJpdCgpKQotICAgICAgICBiYXNlQ2hhcmFj
dGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKLSAgICBlbHNlCi0g
ICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0
ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAKLSAgICAvLyB1X2dldEludFBy
b3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZv
ciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4g
dXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KLSAg
ICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOwot
ICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NV
UFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgot
ICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURf
SURFT0dSQVBIU19FWFRFTlNJT05fQToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVP
R1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM6Ci0g
ICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM6Ci0gICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQjoKLSAgICBjYXNlIFVCTE9DS19DSktf
Q09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1NUUk9LRVM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9E
OgotICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6Ci0g
ICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TOgotICAgIGNhc2UgVUJMT0NLX0VOQ0xP
U0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6Ci0g
ICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01PRk86Ci0gICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pB
TU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoKLSAgICBjYXNl
IFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VY
VEVOREVEX0E6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQjoKLSAgICAg
ICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3
T3ZlckdseXBoOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5z
bGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7Ci0gICAgfQotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udF9oCi0j
ZGVmaW5lIEZvbnRfaAotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIlBhdGguaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0KLS8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8gMCBhbmQgY29u
ZmxpY3RzCi0vLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4KLSNpZmRlZiBD
b21wbGV4Ci0jdW5kZWYgQ29tcGxleAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnREYXRhOwotY2xh
c3MgRm9udE1ldHJpY3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgRm9udFNlbGVj
dG9yOwotY2xhc3MgR2x5cGhCdWZmZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBM
YXlvdXRSZWN0OwotY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFRleHRMYXlvdXQ7Ci1jbGFzcyBU
ZXh0UnVuOwotCi1zdHJ1Y3QgR2x5cGhEYXRhOwotCi1zdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7Ci0g
ICAgR2x5cGhPdmVyZmxvdygpCi0gICAgICAgIDogbGVmdCgwKQotICAgICAgICAsIHJpZ2h0KDAp
Ci0gICAgICAgICwgdG9wKDApCi0gICAgICAgICwgYm90dG9tKDApCi0gICAgICAgICwgY29tcHV0
ZUJvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNFbXB0eSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRv
bTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlwaE92ZXJmbG93
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0
KTsKLSAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQpOwotICAgICAg
ICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7Ci0gICAgICAgIGJvdHRvbSA9IHN0ZDo6
bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbGVmdCAh
PSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBvdGhlci50b3Ag
fHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbnQgbGVmdDsKLSAgICBp
bnQgcmlnaHQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgYm90dG9tOwotICAgIGJvb2wgY29tcHV0
ZUJvdW5kczsKLX07Ci0KLWNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5
cGgsIERyYXdPdmVyR2x5cGh9OwotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygp
ID0gMDsKLSAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Ci0gICAgdmlydHVhbCBHbHlwaFVuZGVybGlu
ZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0g
MDsKLSAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KLX07Ci1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwotCi1jbGFzcyBG
b250IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBm
bG9hdCB3b3JkU3BhY2luZyk7Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQg
aWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRp
bmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLSNlbmRpZgotICAgIH5Gb250KCk7Ci0KLSAgICBGb250KGNv
bnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9u
dCYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90
aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9
Ci0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRQaXhlbFNpemUoKTsgfQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotCi0gICAgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKLQotICAgIGVudW0gQ3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKLQotICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
Ci0gICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0
TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9Ci0KLSAgICBmbG9hdCB3b3JkU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KLSAgICBmbG9hdCBsZXR0ZXJTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgdm9pZCBzZXRXb3JkU3Bh
Y2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9Ci0gICAgdm9pZCBzZXRMZXR0ZXJT
cGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQotICAgIAotICAgIEZvbnRSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCk7IH0KLQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0aW5nRmVhdHVy
ZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpOyB9Ci0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsgfQotCi0gICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lkdGhWYXJpYW50
IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFy
aWFudCgpOyB9Ci0KLSAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9n
bHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KLQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNz
KCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lk
dGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9z
aXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXpl
LCBwb3NpdGlvbik7IH0KLSAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0
OwotICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgp
IGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwotCi0gICAgaW50IGVtcGhhc2lzTWFy
a0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
RGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
SGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZh
bGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9W
YXJpYW50KSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOwotICAgIHN0YXRpYyBib29s
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7Ci0KLSAgICAvLyBCRVdBUkU6IElmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhl
IHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkKLSAgICAvLyB3
aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29tcGVuc2F0ZXMK
LSAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZhbHVlIGlmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiwgVGV4
dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7Ci0KLSAgICBlbnVtIENvZGVQ
YXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB9Owot
ICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAgICBzdGF0aWMg
Q29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVuc2lnbmVkKSB7
IHJldHVybiBTaW1wbGU7IH0KLSAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2Rl
UGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7Ci0KLSAgICBib29sIHByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gRm9yVGV4dEVt
cGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0
RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBo
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBmbG9hdCBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAgICBib29sIGdl
dEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBj
b25zdDsKLQotICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4
VGV4dCgpOwotICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNl
LgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JO
b3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7Ci0KLXB1
YmxpYzoKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9y
VGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbikKLSAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhlci5t
X2xldHRlclNwYWNpbmcKLSAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0gb3RoZXIubV93
b3JkU3BhY2luZzsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5n
IHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7Ci0gICAgc3RhdGljIENvZGVQ
YXRoIGNvZGVQYXRoKCk7Ci0gICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhU
eXBlc2V0dGluZ0ZlYXR1cmVzKTsKLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBkZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19y
b3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwotICAgIHN0YXRpYyBib29sIGlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGMgJiB+
MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKLSAgICB9Ci0KLSAgICBG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIHRyZWF0
QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAn
XG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9X
aWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVy
biBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4g
fHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8
IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3Bh
Y2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQotICAgIHN0YXRpYyBib29s
IGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
VUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLQot
ICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBG
b250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKLQotICAgIFR5
cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnRE
ZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1
cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgICAgICBz
d2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXV0b1RleHRSZW5kZXJp
bmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcHRpbWl6ZVNwZWVkOgotICAg
ICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKLSAgICAgICAgY2FzZSBP
cHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGln
YXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9u
LmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1
cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpF
bmFibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVy
ZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBt
X2ZvbnREZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBo
czsKLSAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Ci0gICAgZmxvYXQgbV93b3JkU3BhY2luZzsK
LSAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1
cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRpb24uCi19Owot
Ci12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
Ci0KLWlubGluZSBGb250Ojp+Rm9udCgpCi17Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVGb250
RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlw
aHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERl
c2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNr
UmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsK
LSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2Ny
aXB0aW9uLCBpbmRleCk7Ci19Ci0KLWlubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4
ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBGb250U2VsZWN0b3IqIEZv
bnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlw
aHMtPmZvbnRTZWxlY3RvcigpIDogMDsKLX0KLQotaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRo
KGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCF0YWJTaXplKQotICAgICAgICByZXR1cm4gbGV0
dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNw
YWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJEZWx0YVdpZHRoID0g
dGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOwotICAgIHJldHVybiAodGFiRGVs
dGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0
YVdpZHRoOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
bGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250U2Vs
ZWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNz
IEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBPcGVuVHlwZVZl
cnRpY2FsRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExh
eW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRM
YXlvdXQgY2xhc3MgZGVmaW5pdGlvbgordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxX
ZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCit7CisgICAgV2Vi
Q29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7Cit9CisKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisK
K2NvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
eworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKKyAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMSAvKj8qLywKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKK307CisKK3N0YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0
UnVuJiBydW4pCit7CisgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Cit9CisKK3N0
YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKKyAgICBpZiAo
IXNldCkgeworICAgICAgICBzZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAg
ICBzZXQtPmFkZCgiTVMgUEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdv
dGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcs
IDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVO
YW1lTVNQR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwor
CisgICAgICAgIHNldC0+YWRkKCJNUyBQTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNQTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUs
IDB4NjcxRH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKKworICAgICAg
ICBzZXQtPmFkZCgiTVMgR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3Ro
aWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAw
eDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhp
YywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TR290aGljKSkpOworCisgICAgICAgIHNl
dC0+YWRkKCJNUyBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1td
ID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKKyAgICAgICAgc2V0
LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgo
dW5pY29kZU5hbWVNU01pbmNobykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Cisg
ICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBF
QSwgMHgzMEFBfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVp
cnlvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOworICAgIH0KKyAgICBy
ZXR1cm4gc2V0LT5jb250YWlucyhmYW1pbHkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250Ojpz
X2NvZGVQYXRoID0gQXV0bzsKKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIEZvbnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24p
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb250OjpGb250KCkK
KyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcygwKQoreworfQorCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZs
b2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorICAgIDogbV9mb250RGVzY3Jp
cHRpb24oZmQpCisgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcod29yZFNwYWNpbmcpCisgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
fQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1p
bmRlcGVuZGVudC4KK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEs
IGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
CisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisg
ICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGlu
Z0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0
U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBl
bmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkp
CisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
ICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmlt
YXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5
bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5
Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5v
cm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEu
aXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlm
CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhz
KQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKKyAgICAsIG1fdHlwZXNl
dHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQoreworfQorCitGb250
JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250RGVzY3Jp
cHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtX2dseXBocyA9IG90aGVyLm1f
Z2x5cGhzOworICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKKyAg
ICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKKyAgICBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgPSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZm9u
dERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2lu
ZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dv
cmRTcGFjaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzID09IG90
aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fZ2x5cGhzIHx8
ICFvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVo
b3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJl
Y2FsYy4KKyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5t
X2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fZ2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdHJ1
Y3QgRm9udEdseXBoc0NhY2hlS2V5IHsKKyAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBz
aGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9i
amVjdHMpLgorICAgIEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
dW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lv
bjsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKK307CisKK3N0cnVjdCBGb250R2x5
cGhzQ2FjaGVFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRH
bHlwaHM+JiYgZykKKyAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQorICAgICAgICAsIGdseXBo
cyhXVEY6Om1vdmUoZykpCisgICAgeyB9CisgICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKKyAg
ICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBG
b250R2x5cGhzQ2FjaGU7CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBo
c0NhY2hlS2V5JiBhLCBjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCit7CisgICAgaWYgKGEu
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNl
bGVjdG9ySWQgfHwgYS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lv
biB8fCBhLmZvbnRTZWxlY3RvckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYS5mYW1pbGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGEuZmFtaWxpZXNbaV0uaW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Rm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgcmV0dXJu
IGNhY2hlOworfQorCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQoreworICAgIGZv
bnRHbHlwaHNDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3ZvaWQgY2xlYXJXaWR0aENhY2hlcygpCit7
CisgICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9u
dEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVl
LT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlw
dCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
KTsKK30KKworc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2Fj
aGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCit7CisgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0g
Rm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAg
ICAga2V5LmZhbWlsaWVzLmFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAga2V5
LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgp
IDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRT
ZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250
U2VsZWN0b3IgJiYgZm9udFNlbGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikg
PyBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKK30KKworc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtl
eSYga2V5KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOworICAgIGhhc2hD
b2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKKwor
ICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5
LmNvbXB1dGVIYXNoKCkpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvcklkKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JWZXJzaW9uKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JGbGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNb
aV0uaW1wbCgpID8gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsK
KworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwg
aGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworfQorCit2b2lkIHBydW5lVW5y
ZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQoreworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgNTA+IHRvUmVtb3ZlOworICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0g
Zm9udEdseXBoc0NhY2hlKCkuZW5kKCk7CisgICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBmb250R2x5cGhzQ2FjaGUo
KS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQoreworICAgIEZv
bnRHbHlwaHNDYWNoZUtleSBrZXk7CisgICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOworICAgIEZvbnRHbHlwaHNDYWNoZTo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkgJiYgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKKyAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9u
dEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9u
dFNlbGVjdG9yKSk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlw
aHMuZ2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJ
bnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7
CisgICAgc3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAvLyBSZWZlcmVuY2VkIEZv
bnRHbHlwaHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUg
bWVtb3J5LgorICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRl
cnZhbCkpCisgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2Fj
aGUoKTsKKyAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCisgICAgaWYgKGZvbnRH
bHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQorICAgICAgICBmb250R2x5cGhz
Q2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAgcmV0dXJuIGds
eXBoczsKK30KKwordm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKK3sKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Zmlyc3RGYW1pbHkoKSk7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVz
ZXR0aW5nRmVhdHVyZXMoKTsKK30KKworZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAoreworICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAorICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCisgICAgLy8gZm9udCkuCisg
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0
byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29k
ZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRv
VXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdG
b250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNv
bnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBkcmF3Q29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5n
dGgoKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAg
IC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFs
IHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdG
ZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxl
bmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9V
c2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAg
ICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9p
bnQsIGZyb20sIHRvKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworfQorCitmbG9h
dCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK3sKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKKyAgICBp
ZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CisgICAgICAgIC8vIFRoZSBjb21wbGV4IHBh
dGggaXMgbW9yZSByZXN0cmljdGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhh
biB0aGUgc2ltcGxlIHBhdGgsIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRo
ZWlyIGJlaGF2aW9ycyBtYXRjaC4KKyAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOworICAgICAg
ICAvLyBUaGUgc2ltcGxlIHBhdGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92
ZXJmbG93IGlzIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBT
aW1wbGVXaXRoR2x5cGhPdmVyZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxv
dy0+Y29tcHV0ZUJvdW5kcykpCisgICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKKyAgICB9
CisKKyAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMo
KSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0
ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQq
IGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGNhY2hl
RW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1cm4gKmNhY2hl
RW50cnk7CisKKyAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFj
a0ZvbnRzOworICAgIGlmICghZmFsbGJhY2tGb250cykKKyAgICAgICAgZmFsbGJhY2tGb250cyA9
ICZsb2NhbEZhbGxiYWNrRm9udHM7CisKKyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKGNvZGVQ
YXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMs
IGdseXBoT3ZlcmZsb3cpOworCisgICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+
aXNFbXB0eSgpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hh
cnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIHJldHVybiBy
dW4ucmVuZGVyaW5nQ29udGV4dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4s
IGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisjZW5kaWYKKworICAgIGNoYXJzQ29uc3VtZWQg
PSBydW4ubGVuZ3RoKCk7CisgICAgZ2x5cGhOYW1lID0gIiI7CisgICAgcmV0dXJuIHdpZHRoKHJ1
bik7Cit9CisKK0dseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7CisgICAgaWYg
KHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgICAgICBpZiAodXBw
ZXJDICE9IGMpIHsKKyAgICAgICAgICAgICAgICBjID0gdXBwZXJDOworICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgfQorCisgICAgaWYgKG1pcnJvcikK
KyAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKKworICAgIHJldHVybiBtX2dseXBocy0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKwor
I2lmICFQTEFURk9STShDT0NPQSkKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRl
TGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit7Cit9CisK
K2Zsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250
RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3Jp
dGVyIiwKKyAgICAiQXJpYWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hp
biIsCisgICAgIkNvcnNpdmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlh
IFVDQVMiLAorICAgICJHZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAg
ICJIZWx2ZXRpY2EiLAorICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAg
ICJLYWkiLAorICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJN
b25hY28iLAorICAgICJNc2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nh
a2EiLAorICAgICJSYWFuYW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAg
IlRpbWVzIiwKKyAgICAiQXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAg
ICAiQXBwbGUgTGlTdW5nIiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGlj
IiwKKyAgICAiQXBwbGVNeXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVB
IiwKKyAgICAiI1BDTXl1bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBm
YW1pbGllcyB3aGVyZSBhbnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBp
biB0aGUgT1MvMiB0YWJsZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxl
Z2FjeSB3ZWJraXQgYmVoYXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9t
IHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQg
bnVtYmVyIG9mIE1hYyBmb250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVu
ZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxh
dGZvcm1zLgorYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorewor
ICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOworICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKElPUykKKyAgICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxz
byBoYXZlIGFuIGludmFsaWQgZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCisg
ICAgaWYgKHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1p
bGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gMDsKKworICAgIGlmICghZm9udEZhbWlsaWVz
V2l0aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFs
aWRDaGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aCk7ICsraSkKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlk
Q2hhcldpZHRoTWFwLT5hZGQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoW2ldKSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworYm9vbCBGb250OjpmYXN0QXZl
cmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKKyAgICBpZiAoc3VjY2VzcykK
KyAgICAgICAgd2lkdGggPSByb3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkp
OyAvLyBGSVhNRTogcHJpbWFyeUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmly
c3RGYW1pbHkoKS4KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBGb250OjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgdG8gPSAodG8gPT0gLTEg
PyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCisgICAgICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBhZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Cit9
CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFVz
ZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtl
cm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAg
aWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8
fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkpCisgICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3Np
dGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CisKKyAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBu
b3JtYWxpemVkOworICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIG5vcm1hbGl6
ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisKKyAgICBy
ZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOworfQorCitTdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisK
K1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IHRydWU7CisKK3ZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxk
VXNlU21vb3RoaW5nKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKK30KKworYm9vbCBGb250Ojpz
aG91bGRVc2VTbW9vdGhpbmcoKQoreworICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OworfQorCit2b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit7CisgICAgc19jb2Rl
UGF0aCA9IHA7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKK3sKKyAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKK30KKwordm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCit7CisgICAg
c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisK
K1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQor
eworICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworfQorCitGb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAg
aWYgKHNfY29kZVBhdGggIT0gQXV0bykKKyAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7CisKKyNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAg
ICAgICAgcmV0dXJuIFNpbXBsZTsKKyNlbmRpZgorCisgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygp
LT5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICAKKyAgICBpZiAocnVu
Lmxlbmd0aCgpID4gMSAmJiAhV2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1
cmVzKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICBpZiAoIXJ1bi5jaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIGlm
IChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisKKyAgICAvLyBTdGFydCBm
cm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hh
cmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgorICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQ
YXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKworRm9udDo6Q29kZVBh
dGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBp
biBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90ZSB0aGF0IHdlIAorICAgIC8vIGNhbid0IHNp
bXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hh
cmFjdGVycworICAgIC8vIGFyZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdv
IHRvIHRoZSBjb21wbGV4IHBhdGguCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdl
bGwgY29uc2lkZXIgYmluYXJ5IHNlYXJjaCBvdmVyIGEgc29ydGVkCisgICAgLy8gbGlzdCBvZiBy
YW5nZXMuCisgICAgQ29kZVBhdGggcmVzdWx0ID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVy
c1tpXTsKKyAgICAgICAgaWYgKGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChN
b2RpZmllciBMZXR0ZXJzIDogVG9uZSBsZXR0ZXJzKSAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyRTkpIAorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmlu
ZyBkaWFjcml0aWNhbCBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MzZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMg
PCAweDA1OTEgfHwgYyA9PSAweDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRp
bmcgVSswNUJFIEhlYnJldyBjb21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNl
cSwgU29mIFBhc3VxIGFuZCBOdW4gSGFmdWtoYQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MDVDRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIC8vIFUrMDYwMCB0aHJvdWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28s
IFNhbWFyaXRhbiwgTWFuZGFpYywKKyAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3Vy
bXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCisgICAgICAg
IC8vIE1hbGF5YWxhbSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCisgICAg
ICAgIGlmIChjIDwgMHgwNjAwKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweDEwOUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICAvLyBV
KzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hv
dWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJlY29tcG9zZTsKKyAgICAgICAgLy8gTW9kZXJuIEtv
cmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKKyAgICAgICAg
aWYgKGMgPCAweDExMDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxMUZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAw
eDEzNUQpIC8vIFUrMTM1RCB0aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEzNUYpCisgICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgw
IHRocm91Z2ggVSsxOEFGIFRhZ2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwg
TW9uZ29saWFuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOEFG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5MDAp
IC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOTRGKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUr
MTlERiBOZXcgVGFpIEx1ZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9
IDB4MTlERikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwg
MHgxQTAwKSAvLyBVKzFBMDAgdGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxp
bmVzZSwgQmF0YWssIExlcGNoYSwgVmVkaWMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDFDRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MURDMCkgLy8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNy
aXRpY2FsIG1hcmsgc3VwcGxlbWVudAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChjIDw9IDB4MURGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8v
IFUrMUUwMCB0aHJvdWdoIFUrMjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3Rh
Y2tlZCBkaWFjcml0aWNzCisgICAgICAgIGlmIChjIDw9IDB4MjAwMCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3c7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBV
KzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5p
bmcgbWFya3MgZm9yIENvcHRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MkNGMSkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgzMDJBKSAvLyBVKzMwMkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1
bCBUb25lIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
MDJGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2
N0MpIC8vIFUrQTY3QyB0aHJvdWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJp
bGxpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QTY3RCkKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBV
K0E2RjAgdGhyb3VnaCBVK0E2RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNkYxKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdz
LXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgIC8vIEhhbmd1bCBK
YW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRl
aSBNYXllaywKKyAgICAgICAgaWYgKGMgPCAweEE4MDApIAorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjIDw9IDB4QUJGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgIGlmIChjIDwgMHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3Vs
IEphbW8gRXh0LiBCCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhE
N0ZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPD0gMHhE
QkZGKSB7CisgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZQorCisgICAgICAgICAgICBpZiAo
aSA9PSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBV
Q2hhciBuZXh0ID0gY2hhcmFjdGVyc1srK2ldOworICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJB
SUwobmV4dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFy
MzIgc3VwcGxlbWVudGFyeUNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0
KTsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAv
LyBVKzFGMUU2IHRocm91Z2ggVSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFy
YWN0ZXIgPD0gMHgxRjFGRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAw
IHRocm91Z2ggVStFMDFFRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweEUwMUVGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICAvLyBGSVhNRTogQ2hlY2sgZm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsx
MTA4MCBibG9jaykgYW5kIG90aGVyIGNvbXBsZXggc2NyaXB0cworICAgICAgICAgICAgLy8gaW4g
cGxhbmUgMSBvciBoaWdoZXIuCisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGMgPCAweEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2Rl
IHZhcmlhdGlvbiBzZWxlY3RvcnMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEZFMEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4RkUyMCkgLy8gVStGRTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtz
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQorICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jv
b2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQoreworICAgIC8vIFRoZSBiYXNpYyBD
SksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgorICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9
IDB4OUZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQg
SWRlb2dyYXBocyBFeHRlbnNpb24gQS4KKyAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDRE
QkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBSYWRpY2FscyBTdXBw
bGVtZW50LgorICAgIGlmIChjID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gS2FuZ3hpIFJhZGljYWxzLgorICAgIGlmIChjID49IDB4
MkYwMCAmJiBjIDw9IDB4MkZERikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
Q0pLIFN0cm9rZXMuCisgICAgaWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
LgorICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KKyAg
ICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCisg
ICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCisgICAg
aWYgKGMgPj0gMHgyQjc0MCAmJiBjIDw9IDB4MkI4MUYpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KKyAg
ICBpZiAoYyA+PSAweDJGODAwICYmIGMgPD0gMHgyRkExRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMyIGMpCit7CisgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2Ug
M3JkIFRvbmUKKyAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5k
YXJpbiBDaGluZXNlIDJuZCBUb25lCisgICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZl
IEFjY2VzcywgTWFuZGFyaW4gQ2hpbmVzZSA0dGggVG9uZSAKKyAgICAvLyAweDJEOSBEb3QgQWJv
dmUsIE1hbmRhcmluIENoaW5lc2UgNXRoIFRvbmUgCisgICAgaWYgKChjID09IDB4MkM3KSB8fCAo
YyA9PSAweDJDQSkgfHwgKGMgPT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChj
ID09IDB4MjAzMCkgfHwgKGMgPT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCisgICAgICAgIHx8
IChjID09IDB4MjA0MikgfHwgKGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09
IDB4MjA0OSkgfHwgKGMgPT0gMHgyMDUxKQorICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChj
ID09IDB4MjBERSkgfHwgKGMgPT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4
MjEwNSkKKyAgICAgICAgfHwgKGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09
IDB4MjExMykgfHwgKGMgPT0gMHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCisgICAgICAgIHx8IChj
ID09IDB4MjEyQikgfHwgKGMgPT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4
MjE1MSkgfHwgKGMgPT0gMHgyMTUyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDIxNTYgJiYgYyA8PSAweDIxNUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyMTYwICYmIGMgPD0gMHgyMTZCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjE3MCAmJiBjIDw9IDB4MjE3QikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMw
NykgfHwgKGMgPT0gMHgyMzEyKSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0ND
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09
IDB4MjQyMykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDYwICYm
IGMgPD0gMHgyNDkyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjQ5
QyAmJiBjIDw9IDB4MjRGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0g
MHgyNUEwKSB8fCAoYyA9PSAweDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFB
KSB8fCAoYyA9PSAweDI1QUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI1QjEpIHx8IChjID09IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1
QjYpIHx8IChjID09IDB4MjVCNykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9
PSAweDI1QzEpIHx8IChjID09IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1
QzkpIHx8IChjID09IDB4MjVDQikgfHwgKGMgPT0gMHgyNUNDKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09IDB4MjVFRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI2MDAgJiYgYyA8PSAweDI2MDMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKChjID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAw
eDI2MEUpIHx8IChjID09IDB4MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDAp
IHx8IChjID09IDB4MjY0MikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNjYwICYmIGMgPD0gMHgyNjZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MjY3MiAmJiBjIDw9IDB4MjY3RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoKGMgPT0gMHgyNkEwKSB8fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMg
PT0gMHgyNzEzKSB8fCAoYyA9PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgy
NzQwKSB8fCAoYyA9PSAweDI3NTYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Mjc3NiAmJiBjIDw9IDB4Mjc3RikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoYyA9PSAweDJCMUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWRlb2dyYXBo
aWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycy4KKyAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAw
eDJGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBTeW1ib2xzIGFu
ZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KKyAgICBpZiAoYyA+PSAweDMwMDAgJiYg
YyA8IDB4MzAzMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+IDB4MzAzMCAm
JiBjIDw9IDB4MzAzRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIaXJhZ2FuYQor
ICAgIGlmIChjID49IDB4MzA0MCAmJiBjIDw9IDB4MzA5RikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBLYXRha2FuYSAKKyAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21vZm8KKyAgICBpZiAoYyA+PSAw
eDMxMDAgJiYgYyA8PSAweDMxMkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMg
Pj0gMHgzMTkwICYmIGMgPD0gMHgzMTlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEJvcG9tb2ZvIEV4dGVuZGVkCisgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQg
TW9udGhzLgorICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCisgICAgaWYgKGMgPj0g
MHgzMzAwICYmIGMgPD0gMHgzM0ZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Rjg2MCAmJiBjIDw9IDB4Rjg2MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcy4KKyAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAw
eEZFNEYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkUxMCkgfHwg
KGMgPT0gMHhGRTExKSB8fCAoYyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8
fCAoYyA9PSAweEZGMUMpIHx8IChjID09IDB4RkYxRSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCisgICAgLy8gVXN1YWxseSBv
bmx5IHVzZWQgaW4gQ0pLCisgICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtb2ppLgorICAgIGlmIChjID09IDB4MUYxMDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4
MUYxMjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBj
IDw9IDB4MUYxNDkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjE1
MCAmJiBjIDw9IDB4MUYxNjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgxRjE3MCAmJiBjIDw9IDB4MUYxODkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgxRjIwMCAmJiBjIDw9IDB4MUY2QzUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOworfQorCit1bnNpZ25lZCBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9u
KQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IExUUikg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
IC0gMV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgc3RhdGljIGJvb2wg
ZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
Y2hhcmFjdGVyKSAmJiBpICsgMSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tp
ICsgMV0pKSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGNoYXJhY3RlciwgY2hhcmFjdGVyc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYm
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlm
ICghaXNBZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJh
Y3RlcikgJiYgaSA+IDEgJiYgVTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7CisgICAg
ICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNb
aSAtIDJdLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFu
c2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KKwor
dW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKK3sKKyAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCks
IHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNp
b24pOworfQorCitib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQor
eworICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNL
IHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQWRkaXRpb25hbCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBD
U1MgVGV4dCBMZXZlbCAzIEVkaXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KKyAgICBpZiAo
YyA9PSBldGhpb3BpY1dvcmRzcGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8
IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckRvdAorICAgICAgICB8fCBjID09IHVnYXJpdGljV29y
ZERpdmlkZXIgfHwgYyA9PSB0aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRp
YmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKTsKK30KKyAgICAKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQoreworICAgIC8vIEluIGdlbmVyYWws
IHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJz
IG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCisgICAg
Ly8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFj
dGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5k
ZXgpOworCisgICAgaWYgKG9mZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkg
eworICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhp
cyBnbHlwaC4gQmFpbC4KKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIH0KKyAgICAKKyAgICBpZiAodGV4
dFJ1bi5pczhCaXQoKSkKKyAgICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVy
czgoKVtvZmZzZXRJblN0cmluZ107CisgICAgZWxzZQorICAgICAgICBVMTZfTkVYVCh0ZXh0UnVu
LmNoYXJhY3RlcnMxNigpLCBvZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNo
YXJhY3Rlcik7CisgICAgCisgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJf
SURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNv
ZGVwb2ludHMuCisgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2Nh
dGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgVUJsb2NrQ29kZSBibG9ja0NvZGUg
PSB1YmxvY2tfZ2V0Q29kZShiYXNlQ2hhcmFjdGVyKTsKKyAgICBzd2l0Y2ggKGJsb2NrQ29kZSkg
eworICAgIGNhc2UgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJM
T0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NF
RF9DSktfTEVUVEVSU19BTkRfTU9OVEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklM
SVRZOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6
CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUzoKKyAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01Q
QVRJQklMSVRZX0ZPUk1TOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNf
RVhURU5TSU9OX0I6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBI
U19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgorICAgIGNhc2UgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0M6CisgICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRDoKKyAgICBjYXNlIFVCTE9DS19JREVP
R1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTOgorICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9C
X0lERU9HUkFNUzoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVN
RU5UOgorICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgorICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5B
OgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPOgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VY
VEVOREVEOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1POgorICAgIGNhc2UgVUJMT0NLX0hB
TkdVTF9DT01QQVRJQklMSVRZX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxF
UzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgorICAgIGNhc2UgVUJM
T0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0I6CisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5
cGU6OlNraXBEZXNjZW5kZXJzOworICAgIH0KK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRleHRMYXlvdXQ+
IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBUZXh0TGF5b3V0
IGNsYXNzIGRlZmluaXRpb24KIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogewotICAgIFdlYkNvcmU6
OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkZWxl
dGVMYXlvdXQocHRyKTsKIH0KIAogfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAot
Y29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7
Citjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAxIC8qPyovLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsCkBAIC05OCwxNSArOTgsMTUgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5T
aWduRm9yRmFtaQogICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7CiB9CiAKLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOworRm9udENhc2NhZGU6OkNvZGVQYXRo
IEZvbnRDYXNjYWRlOjpzX2NvZGVQYXRoID0gQXV0bzsKIAotVHlwZXNldHRpbmdGZWF0dXJlcyBG
b250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKK1R5cGVzZXR0aW5nRmVhdHVy
ZXMgRm9udENhc2NhZGU6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwogCiAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlv
biAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vIEZvbnRDYXNjYWRlIEltcGxlbWVudGF0aW9u
IChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIAotRm9udDo6Rm9udCgpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogICAg
IDogbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTE0LDcgKzExNCw3IEBAIEZvbnQ6OkZv
bnQoKQogewogfQogCi1Gb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorRm9udENhc2NhZGU6OkZvbnRDYXNj
YWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0
IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRl
clNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcp
CkBAIC0xMjQsNyArMTI0LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZk
LCBmbAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udERhdGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFj
aW5nKDApCkBAIC0xNDMsNyArMTQzLDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9u
dFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
ICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udEQKIH0K
ICNlbmRpZgogCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGU6OkZv
bnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0
aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlw
aHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQpAQCAtMTY5
LDcgKzE2OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiB7CiB9CiAKLUZvbnQm
IEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK0ZvbnRDYXNjYWRlJiBGb250Q2Fz
Y2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKIHsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwogICAgIG1fZ2x5cGhzID0gb3Ro
ZXIubV9nbHlwaHM7CkBAIC0xODAsNyArMTgwLDcgQEAgRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBGb250OjpvcGVy
YXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0
b3I9PShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAgc3RhdGljIFJlZjxGb250R2x5cGhz
PiByZXRyaWV2ZU9yQWRkQ2FjaAogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKLXZvaWQgRm9udDo6
dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3Rv
cikgY29uc3QKIHsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhz
KG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1p
bHkoKSk7CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVh
dHVyZXMoKTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzUxLDcgKzM1MSw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY28KICAgICByZXR1cm4gZHJhd0Nv
bXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAg
ICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbgogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNv
bnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQgRm9udDo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAg
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIGZs
b2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKGlzRHJhd25XaXRo
U1ZHRm9udChydW4pKQpAQCAtNDE1LDcgKzQxNSw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAotR2x5cGhEYXRh
IEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK0dseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7CiAgICAg
ICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCkpIHsKQEAgLTQzNiwxNiArNDM2LDE2IEBAIEdseXBoRGF0YSBGb250Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUMKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwg
Ym9vbCkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxh
eW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQordm9pZCBGb250
Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQogewogfQogCi1mbG9hdCBGb250Ojp3
aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC00OTYsNyArNDk2LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbAogLy8gZnJvbSB0aGUgd2lk
dGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBv
ZiBNYWMgZm9udHMsCiAvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBh
Y3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgogLy8gYWxsIHBsYXRmb3Jtcy4K
LWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgQXRvbWljU3Ry
aW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCkBA
IC01MjAsNyArNTIwLDcgQEAgYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
bwogICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRh
aW5zKGZhbWlseSk7CiB9CiAKLWJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKIHsKICAgICBib29sIHN1Y2Nl
c3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKICAgICBpZiAoc3VjY2VzcykKQEAgLTUy
OCw3ICs1MjgsNyBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFiCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0
aCgpIDogdG8pOwogCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChjbwogICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CiB9CiAKLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKQEAgLTU1
OSw1NSArNTU5LDU1IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGUK
ICAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBub3JtYWxpemVkLmFwcGVuZChG
b250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICBub3JtYWxpemVk
LmFwcGVuZChGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAog
ICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0
cmluZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFs
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZyBGb250Q2Fz
Y2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVl
OwogCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3VsZFVzZVNtb290
aGluZykKK3ZvaWQgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3Vs
ZFVzZVNtb290aGluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7CiB9CiAKLWJvb2wgRm9udDo6
c2hvdWxkVXNlU21vb3RoaW5nKCkKK2Jvb2wgRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGlu
ZygpCiB7CiAgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAKLXZvaWQgRm9u
dDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3ZvaWQgRm9udENhc2NhZGU6OnNldENvZGVQYXRo
KENvZGVQYXRoIHApCiB7CiAgICAgc19jb2RlUGF0aCA9IHA7CiB9CiAKLUZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKCkKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29k
ZVBhdGgoKQogewogICAgIHJldHVybiBzX2NvZGVQYXRoOwogfQogCi12b2lkIEZvbnQ6OnNldERl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykKK3ZvaWQgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKIHsKICAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCitUeXBlc2V0
dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCiB7
CiAgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAKLUZvbnQ6OkNv
ZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK0ZvbnRDYXNj
YWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBj
b25zdAogewogICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCiAgICAgICAgIHJldHVybiBzX2Nv
ZGVQYXRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRo
KGNvbnN0IFRleHQKICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFj
dGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiB9CiAKLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikK
K0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQogewogICAgIC8vIEZJWE1F
OiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90
ZSB0aGF0IHdlIAogICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9w
ZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwpAQCAtNzM0LDggKzczNCw4IEBAIEZv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAKICAgICAgICAgaWYgKGMgPD0g
MHhBNkYxKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAKLSAgICAgICAvLyBVK0E4MDAg
dGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4
dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIg
RXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgLy8gVStBODAwIHRo
cm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRl
bmRlZCwKKyAgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBF
eHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAogICAgICAgICBpZiAoYyA8IDB4QTgw
MCkgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQpAQCAt
Nzg3LDcgKzc4Nyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFy
MzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKIHsKICAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KICAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCkBAIC04MTIsMTEgKzgxMiwxMSBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVv
Z3JhcGhzLgogICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lv
biBCLgogICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVu
c2lvbiBDLgogICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
KFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTkxNCw3ICs5MTQsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gSWRlb2dyYXBoaWMgRGVzY3Jp
cHRpb24gQ2hhcmFjdGVycy4KICAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgogICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0MCw3ICs5NDAsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQK
ICAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCiAgICAgICAgIHJldHVybiB0cnVl
OwotIAorCiAgICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocy4KICAgICBpZiAo
YyA+PSAweDMyMDAgJiYgYyA8PSAweDMyRkYpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTg5
LDcgKzk4OSw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAg
ICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
Cit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHVu
c2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CkBAIC0xMDYyLDE0ICsxMDYyLDE0IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikK
IHsKICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmlu
Z1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgcmV0dXJu
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMx
NigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwog
fQogCi1ib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiB7CiAgICAgaWYg
KFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0ND
X01BU0sgfCBVX0dDX0NGX01BU0spKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDgyLDcg
KzEwODIsNyBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAorYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewogICAg
IHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCisKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
KyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250R2x5cGhzLmgiCisj
aW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29t
cGxleCB0byAwIGFuZCBjb25mbGljdHMKKy8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0
aCBlbnVtLgorI2lmZGVmIENvbXBsZXgKKyN1bmRlZiBDb21wbGV4CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgRm9udERhdGE7CitjbGFzcyBGb250TWV0cmljczsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CitjbGFzcyBGb250U2VsZWN0b3I7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIExheW91dFJlY3Q7CitjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgVGV4
dExheW91dDsKK2NsYXNzIFRleHRSdW47CisKK3N0cnVjdCBHbHlwaERhdGE7CisKK3N0cnVjdCBH
bHlwaE92ZXJmbG93IHsKKyAgICBHbHlwaE92ZXJmbG93KCkKKyAgICAgICAgOiBsZWZ0KDApCisg
ICAgICAgICwgcmlnaHQoMCkKKyAgICAgICAgLCB0b3AoMCkKKyAgICAgICAgLCBib3R0b20oMCkK
KyAgICAgICAgLCBjb21wdXRlQm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQg
JiYgIXRvcCAmJiAhYm90dG9tOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNv
bnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4
KGxlZnQsIG90aGVyLmxlZnQpOworICAgICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhl
ci5yaWdodCk7CisgICAgICAgIHRvcCA9IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKKyAgICAg
ICAgYm90dG9tID0gc3RkOjptYXgoYm90dG9tLCBvdGhlci5ib3R0b20pOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBsZWZ0ICE9IG90aGVyLmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwg
dG9wICE9IG90aGVyLnRvcCB8fCBib3R0b20gIT0gb3RoZXIuYm90dG9tOworICAgIH0KKworICAg
IGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGludCBib3R0b207
CisgICAgYm9vbCBjb21wdXRlQm91bmRzOworfTsKKworY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xh
dG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERl
c2NlbmRlcnMsIFNraXBHbHlwaCwgRHJhd092ZXJHbHlwaH07CisgICAgdmlydHVhbCBib29sIGNv
bnRhaW5zTW9yZVBhdGhzKCkgPSAwOworICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOworICAg
IHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKKyAgICB2aXJ0
dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1bmRlcmxpbmVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhZHZhbmNlKCkgPSAwOworICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigp
IHsgfQorfTsKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBp
bmRleCk7CisKK2NsYXNzIEZvbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworI2VuZGlmCisgICAgfkZvbnQo
KTsKKworICAgIEZvbnQoY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9w
ZXJhdG9yPShjb25zdCBGb250Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb247IH0KKworICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CisgICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OworCisgICAgZW51
bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVz
ZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworCisgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBm
bG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91
dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7CisgICAgc3RhdGlj
IGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworCisgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisKKyAgICBib29sIGlzU21hbGxDYXBzKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0KKworICAgIGZs
b2F0IHdvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQorICAgIGZs
b2F0IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KKyAg
ICB2b2lkIHNldFdvcmRTcGFjaW5nKGZsb2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KKyAg
ICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9
CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzUHJpbnRlckZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Cisg
ICAgCisgICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKTsgfQorCisgICAgVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZXNldHRpbmdGZWF0dXJlcz4obV90eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQorCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0KKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CisKKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CisgICAgRm9udFdlaWdodCB3
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQorICAg
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KKworICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQorCisgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuZm9udE1ldHJpY3MoKTsgfQorICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5Rm9udERhdGEoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0K
KyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0
YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZv
bnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQorICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdl
Q2hhcldpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCisKKyAg
ICBpbnQgZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisKKyAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7CisgICAgY29u
c3QgRm9udFJhbmdlcyYgZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OworICAgIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBj
b25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7
CisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKKworICAg
IC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rp
b24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBv
cnR1bml0eQorICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQu
IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21l
bnQoKSBjb21wZW5zYXRlcworICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0
dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBs
aW5lLgorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29s
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsK
KworICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhH
bHlwaE92ZXJmbG93IH07CisgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNv
bnN0OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQorICAgIHN0YXRpYyBDb2RlUGF0aCBj
aGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKKworICAg
IGJvb2wgcHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4
dEVtcGhhc2lzIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZh
bmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Cisg
ICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKworICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEdseXBoRGF0YSYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJh
Y2tGb250c0ZvckNvbXBsZXhUZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwg
aW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgZnJpZW5k
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDsKKworcHVibGljOgorI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQor
ICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgJiYgbV9sZXR0ZXJT
cGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZworICAgICAgICAgICAgJiYgbV93b3JkU3Bh
Y2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVXNl
ZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRpZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhz
LgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsK
KyAgICBzdGF0aWMgQ29kZVBhdGggY29kZVBhdGgoKTsKKyAgICBzdGF0aWMgQ29kZVBhdGggc19j
b2RlUGF0aDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgIHN0YXRpYyBUeXBlc2V0
dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdWludDhfdCBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl07CisgICAgc3Rh
dGljIGJvb2wgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoYyAmIH4weEZGKSAmJiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2Nd
OworICAgIH0KKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMg
PT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KKyAgICBzdGF0aWMg
Ym9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9X
aWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBk
OyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8
IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAm
JiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHpl
cm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9
CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworCisg
ICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHNwYWNlOworCisgICAgICAgIGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFj
dGVyKSkKKyAgICAgICAgICAgIHJldHVybiB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAgICByZXR1
cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2Vz
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1h
bGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBib29sIHVz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbDsgfQorICAgIEZvbnRHbHlwaHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0OworCisgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0
dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVy
aW5nTW9kZSA9IG1fZm9udERlc2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7CisgICAgICAg
IFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVhdHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzOworCisgICAgICAgIHN3aXRjaCAodGV4dFJlbmRlcmluZ01vZGUpIHsKKyAgICAgICAgY2Fz
ZSBBdXRvVGV4dFJlbmRlcmluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9w
dGltaXplU3BlZWQ6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVy
ZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9u
OgorICAgICAgICBjYXNlIE9wdGltaXplTGVnaWJpbGl0eToKKyAgICAgICAgICAgIGZlYXR1cmVz
IHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVz
ICY9IH5LZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tl
cm5pbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
bV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZlYXR1
cmVzIHw9IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworCisgICAg
Rm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIG11dGFibGUgUmVmUHRyPEZv
bnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKKyAgICBmbG9h
dCBtX3dvcmRTcGFjaW5nOworICAgIG11dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sOworICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8g
KFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnRE
ZXNjcmlwdGlvbi4KK307CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwordm9p
ZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKKworaW5saW5lIEZvbnQ6On5Gb250KCkKK3sKK30KKworaW5saW5l
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxl
Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgY29uc3QgRm9udFJhbmdl
cyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGJvb2wgRm9udDo6
aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVy
biBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5l
IEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCitpbmxpbmUgZmxv
YXQgRm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25l
ZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXRhYlNpemUpCisg
ICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJT
aXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0
IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Cisg
ICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0
YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7Cit9CisKK30KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29y
ZTo6VGV4dExheW91dCopOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udF9oCi0jZGVmaW5lIEZv
bnRfaAorI2lmbmRlZiBGb250Q2FzY2FkZV9oCisjZGVmaW5lIEZvbnRDYXNjYWRlX2gKIAogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTA2
LDI0ICsxMDYsMjQgQEAgcHVibGljOgogfTsKIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CiAKLWNsYXNzIEZvbnQgeworY2xhc3MgRm9udENhc2Nh
ZGUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZs
b2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAjZW5kaWYKLSAg
ICB+Rm9udCgpOworICAgIH5Gb250Q2FzY2FkZSgpOwogCi0gICAgRm9udChjb25zdCBGb250Jik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQmKTsKKyAgICBG
b250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRD
YXNjYWRlJiBvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBlcXVhbEZvclRleHRB
dXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIGJvb2wgZXF1YWxGb3JUZXh0
QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhl
ci5tX2xldHRlclNwYWNpbmcKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0
JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNw
YWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9CiAg
ICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFy
IGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0g
c29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9
IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0
aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAg
c3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworICAgIHN0YXRp
YyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMik7CiAKICAgICBzdGF0aWMgaW5s
aW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCiAgICAgewpAQCAtMzQ3
LDM0ICszNDcsMzQgQEAgdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CiB2b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgY2xlYXJX
aWR0aENhY2hlcygpOwogCi1pbmxpbmUgRm9udDo6fkZvbnQoKQoraW5saW5lIEZvbnRDYXNjYWRl
Ojp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZv
bnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEm
IEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAogewogICAgIEFTU0VSVChtX2ds
eXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250
RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJh
Y2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAotaW5saW5lIGJvb2wg
Rm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0Zp
eGVkUGl0Y2goKSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1f
Z2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoraW5saW5lIEZvbnRTZWxlY3Rv
ciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ2x5
cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAotaW5saW5lIGZsb2F0IEZv
bnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCF0YWJTaXplKQogICAgICAgICByZXR1
cm4gbGV0dGVyU3BhY2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29yayBpZiB0aGUg
ZW1waGFzaXMgbWFyayB1c2VzIGEgY29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9mIHRoZQogLy8g
c3RhbmRhcmQgZW1waGFzaXMgbWFya3MgZG8gc28uCi1ib29sIEZvbnQ6OmdldEVtcGhhc2lzTWFy
a0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRh
KSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0CiB7CiAgICAg
aWYgKG1hcmsuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Niw3ICs2Niw3
IEBAIGJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERh
dGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0
YSkpCkBAIC04MCw3ICs4MCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3Qg
QXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpOwog
fQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwog
ICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpA
QCAtOTQsNyArOTQsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9t
CiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CiB9CiAK
LWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBj
b25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlm
ICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtMTA4
LDcgKzEwOCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWkKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsK
IApAQCAtMTM4LDcgKzEzOCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZh
bmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CkBAIC0xNTQsNyArMTU0LDcgQEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZQogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleAogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVuKTsKQEAgLTIz
MSw3ICsyMzEsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAg
ICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkp
LCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0
YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRh
KSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29uCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwgc3Rh
cnRQb2ludCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxs
YmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTI3Niw3ICsyNzYsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChj
b25zCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotdm9pZCBGb250OjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBy
dW4pOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVQKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVX
aWR0aCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
ewogICAgIGZsb2F0IGRlbHRhID0geDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTI2NCw3ICsyNjQsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtCiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhKQogICAgICAg
ICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJh
Y2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKGMpKQorICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5o
YXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEds
eXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBHbHlwaERhdGEg
Rm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YSkgewotICAgICAgICBp
ZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEu
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZh
bGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFs
bGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZv
ck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNK
S0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0KIApAQCAtMzIy
LDcgKzMyMiw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWwKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAg
ICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0
MzAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAvLyB0aGUg
d2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBub3RpY2Vh
YmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KICNpZiAhUExBVEZPUk0oSU9TKQogI2lmICFVU0Uo
V0lOR0RJKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb24KIH0KICNlbmRpZgogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAgZmxvYXQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1Niw3ICs0NTYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGCiAgICAgZm9udC5k
cmF3R2x5cGhzKHRoaXMsICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKIH0KIAogLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUg
aU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0
aG9kIHVzZSB0aGUKLS8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Ojpk
cmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8v
IHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Q2FzY2FkZTo6ZHJhd1RleHQo
KSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCiAvLyBhcmVuJ3Qg
bm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hhbmdlLgogI2lm
ICFQTEFURk9STShJT1MpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikK
ICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3Rh
dHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50IGxlbmd0aCkK
ICNlbmRpZgogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC01MTUsNyArNTE1LDcg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29ucwogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwotICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgorICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250Q2FzY2FkZTo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBv
ZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4K
ICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250Lndp
ZHRoKHN1YnJ1biksIDApOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtMzU2LDE2
ICszNTYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2Vsc2UKLSAg
ICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIGZsb2F0IGRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhC
dWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAg
ICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKICNlbHNlCi0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50
IGxlbmd0aCA9IC0xKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOwog
I2VuZGlmCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxs
U2lkZXMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDggQEAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogI2luY2x1ZGUgIkNvcmVUZXh0U1BJ
LmgiCiAjZW5kaWYKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQxOSw3ICs0MTksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzCiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50IGNvZGVVbml0
c0xlbmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IGNvZGVVbml0c1swXSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKIAotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxlZnRUcnVuY2F0
ZVRvQnVmZmVyKGNvbgogICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXg7CiB9
CiAKLXN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJlciwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdI
YWNrcykKK3N0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgcmVuZGVy
ZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgZGlzYWJs
ZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBpZiAoZGlzYWJsZVJvdW5kaW5nSGFja3MpCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGlj
IGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbgogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVl
LCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1
bmNhdGUgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgVHJ1bmNh
dGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTI5NSw0MiArMjk1LDQyIEBAIHN0YXRpYyBTdHJpbmcgdHJ1
bmNhdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZlciwg
dHJ1bmNhdGVkTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1
bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBm
b250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmlu
ZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmluZyBT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0
cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MpOwogfQogCi1mbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcykKK2Zsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gc3RyaW5nV2lkdGgoZm9u
dCwgU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwg
IWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMs
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6
OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hh
Y2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjps
ZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVT
dHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFy
YWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZElu
c2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCiB7CiAgICAgcmV0dXJuIHRy
dW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZl
ciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMgKzMzLDIzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBGb250OwotICAgIAotICAg
IGNsYXNzIFN0cmluZ1RydW5jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFibGVSb3VuZGlu
Z0hhY2tzIH07Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlz
YWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRy
dW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxl
Um91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0
IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNr
c09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0
cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFs
c2UpOworY2xhc3MgRm9udENhc2NhZGU7CisKK2NsYXNzIFN0cmluZ1RydW5jYXRvciB7CitwdWJs
aWM6CisgICAgZW51bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxlUm91bmRpbmdI
YWNrcywgRW5hYmxlUm91bmRpbmdIYWNrcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRp
bmdIYWNrcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRl
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBy
aWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJv
b2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKIAotICAgICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAg
ICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcm
LCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVS
b3VuZGluZ0hhY2tzKTsKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENh
c2NhZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNz
IEdseXBoVG9QYXRoVHJhbnNsYXRvcjsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25z
dCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgPSAwOworICAgICAgICB2aXJ0dWFsIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRy
YW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0
YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRF
bXBoYXNpcykKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0
RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
Y3VycmVudENoYXJhY3RlcigwKQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
PSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2lzQWZ0
ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRy
KCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFp
bGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0t
OwogCkBAIC0yMjksOSArMjI5LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbgogICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVyU3BhY2luZygp
KQogICAgICAgICAgICAgICAgIHdpZHRoICs9IG1fZm9udC0+bGV0dGVyU3BhY2luZygpOwogCi0g
ICAgICAgICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udDo6Y2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICAgICAgICAgIGJvb2wg
dHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBpZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBi
b29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgewogICAgICAgICAgICAgICAgIC8v
IERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhw
YW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICBpZiAobV9l
eHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24g
PSBtX2V4cGFuc2lvbjsKQEAgLTI2OCw5ICsyNjgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1faXNBZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9y
bXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhCdWZmZXItPnNp
emUoKSwKICAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/IGdseXBoQnVm
ZmVyLT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3aWR0
aCkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykg
ewogICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsK
QEAgLTI3OCw3ICsyNzksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUluCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoYXJhY3RlcikpCisgICAg
ICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAhRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0
RW1waGFzaXMoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIGdseXBoID0gMDsKIAogICAgICAgICAv
LyBBZHZhbmNlIHBhc3QgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IGRlYWx0IHdpdGguCkBAIC0yODgs
NyArMjg5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogCiAg
ICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd29y
ZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgICAgICAvLyB0byBiZSBpbnRl
Z2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2VyIGJv
dW5kYXJ5LgotICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojpp
c1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGlmIChtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3Rl
cihjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKIAogICAg
ICAgICAgICAgLy8gU2luY2Ugd2lkdGhTaW5jZUxhc3RSb3VuZGluZyBjYW4gbG9zZSBwcmVjaXNp
b24gaWYgd2UgaW5jbHVkZSBtZWFzdXJlbWVudHMgZm9yCkBAIC0zMDEsNyArMzAyLDcgQEAgaW5s
aW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICJy
b3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QKICAgICAgICAgICAgIC8vIHdp
ZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91
bmRhcnkuCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpIDwgbV9y
dW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpKSkpCisgICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hh
cmFjdGVyKCoodGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQogICAgICAgICAgICAgICAgIHx8
IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpID49IG1fcnVuLmxlbmd0aCgpKSkgewogICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICsgd2lk
dGg7CiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyA9IGNlaWxmKHRvdGFs
V2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3JfaAogI2RlZmluZSBXaWR0aEl0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNW
R0dseXBoLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsK
K2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBTaW1wbGVGb250
RGF0YTsKIGNsYXNzIFRleHRSdW47CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBHbHlwaERhdGE7
CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNj
b3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2Up
OworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBi
b29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiYg
YXJhYmljRm9ybXMoKSB7IHJldHVybiBtX2FyYWJpY0Zvcm1zOyB9CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250JiBmb250KQor
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICAgICAgICAgaWYgKCFm
b250LmlzUHJpbnRlckZvbnQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBt
X2ZvbnQ7CiAKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXMuaCIKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjphZHZhbmNlCiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9p
bmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitE
YXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZs
b2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAg
IGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0
YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3Ro
KCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6
ek5HLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVy
LmgiCkBAIC0zOSw3ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50LCBpbnQs
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4
dEVtcGhhc2lzICovKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOwogICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKQEAgLTUwLDcgKzUw
LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIC8vIEZJ
WE1FOiBNYWMgcmV0dXJucyBhbiBpbml0aWFsIGFkdmFuY2UgaGVyZS4KICAgICByZXR1cm4gMDsK
IH0KLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZl
ciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGgu
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC02OCwyMiArNjgsMjIgQEAgZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50
LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiti
b29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0
IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QK
IHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVy
LnNoYXBlKCkpCkBAIC05Miw3ICs5Miw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb24KICAgICByZXR1cm4gMDsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCkgY29uc3QKIHsKICAgICBIYXJmQnV6elNoYXBl
ciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0
aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9u
dENhY2hlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbXBvcnQg
IkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKLSNpbXBvcnQgIkZv
bnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJSZW5kZXJUaGVtZUlPUy5o
IgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9u
dERhdGFJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgi
CiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQg
IkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNj
cmlwdGlvbi5oIgogI2ltcG9ydCAiRm9udFNlcnZpY2VzSU9TLmgiCiAjaW1wb3J0IDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIK
LSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0QnJl
YWtJdGVyYXRvci5oIgpAQCAtNDMsMTMgKzQzLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgVGV4dExheW91dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgaXNOZWVkZWQoUmVu
ZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgYm9vbCBpc05lZWRl
ZChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKICAgICB7CiAgICAg
ICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9u
dCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7Ci0gICAgICAgIHJldHVybiBmb250LmNvZGVQYXRoKHJ1
bikgPT0gRm9udDo6Q29tcGxleDsKKyAgICAgICAgcmV0dXJuIGZvbnQuY29kZVBhdGgocnVuKSA9
PSBGb250Q2FzY2FkZTo6Q29tcGxleDsKICAgICB9CiAKLSAgICBUZXh0TGF5b3V0KFJlbmRlclRl
eHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgVGV4dExheW91dChS
ZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvcykKICAg
ICAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAgICAgLCBtX3J1bihjb25zdHJ1Y3RUZXh0UnVuKHRl
eHQsIGZvbnQsIHhQb3MpKQogICAgICAgICAsIG1fY29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVl
PENvbXBsZXhUZXh0Q29udHJvbGxlcj4oJm1fZm9udCwgbV9ydW4sIHRydWUpKQpAQCAtNjAsNyAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJv
bSwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGJlZm9y
ZVdpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAgIGlmIChtX2Zv
bnQud29yZFNwYWNpbmcoKSAmJiBmcm9tICYmIEZvbnQ6OnRyZWF0QXNTcGFjZShtX3J1bltmcm9t
XSkpCisgICAgICAgIGlmIChtX2ZvbnQud29yZFNwYWNpbmcoKSAmJiBmcm9tICYmIEZvbnRDYXNj
YWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQogICAgICAgICAgICAgYmVmb3JlV2lkdGgg
Kz0gbV9mb250LndvcmRTcGFjaW5nKCk7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShm
cm9tICsgbGVuLCAwLCBCeVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxv
YXQgYWZ0ZXJXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhTb0ZhcigpOwpAQCAtNjgsNyAr
NjgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQg
eFBvcykKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQqIHRl
eHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zKQogICAgIHsKICAgICAgICAg
VGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0
ZXh0LCB0ZXh0LT5zdHlsZSgpKTsKICAgICAgICAgcnVuLnNldENoYXJhY3RlcnNMZW5ndGgodGV4
dC0+dGV4dExlbmd0aCgpKTsKQEAgLTc4LDI1ICs3OCwyNSBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gcnVuOwogICAgIH0KIAotICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlciBoYXMgb25s
eSByZWZlcmVuY2VzIHRvIGl0cyBGb250IGFuZCBUZXh0UnVuIHNvIHRoZXkgbXVzdCBiZSBrZXB0
IGFsaXZlIGhlcmUuCi0gICAgRm9udCBtX2ZvbnQ7CisgICAgLy8gQ29tcGxleFRleHRDb250cm9s
bGVyIGhhcyBvbmx5IHJlZmVyZW5jZXMgdG8gaXRzIEZvbnRDYXNjYWRlIGFuZCBUZXh0UnVuIHNv
IHRoZXkgbXVzdCBiZSBrZXB0IGFsaXZlIGhlcmUuCisgICAgRm9udENhc2NhZGUgbV9mb250Owog
ICAgIFRleHRSdW4gbV9ydW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBsZXhUZXh0Q29udHJv
bGxlcj4gbV9jb250cm9sbGVyOwogfTsKIAotUGFzc093blB0cjxUZXh0TGF5b3V0PiBGb250Ojpj
cmVhdGVMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UpIGNvbnN0CitQYXNzT3duUHRyPFRleHRMYXlvdXQ+IEZvbnRDYXNjYWRlOjpjcmVh
dGVMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRl
U3BhY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlU3BhY2UgfHwgIVRleHRMYXlv
dXQ6OmlzTmVlZGVkKHRleHQsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0TGF5b3V0KHRleHQsICp0aGlzLCB4UG9zKSk7CiB9CiAK
LXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqIGxheW91dCkKK3ZvaWQgRm9udENh
c2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3V0KiBsYXlvdXQpCiB7CiAgICAgZGVsZXRlIGxh
eW91dDsKIH0KIAotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cykKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzKQogewogICAgIHJldHVybiBsYXlvdXQud2lkdGgoZnJvbSwgbGVu
LCBmYWxsYmFja0ZvbnRzKTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW5saW5lIENH
RmxvYXQgY2VpbENHRmxvYXQoQ0dGbG9hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENHRmxvYXQ+
KGNlaWwoZikpOwogfQogCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNlTmF0
dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6
OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
KQogICAgIDogbV9mb250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9pc0xUUk9u
bHkodHJ1ZSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0Q29udHJvCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwogICAg
IGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2FmdGVyRXhwYW5zaW9u
OwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udDo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDog
UlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVu
LnRleHQoKSwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAg
ICAgICBpZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAhbV9ydW4uYWxsb3dzVHJhaWxpbmdFeHBhbnNp
b24oKSkKICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQtLTsKIApAQCAtNjE1
LDcgKzYxNSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuZXh0Q2ggPSAqKG1fY29tcGxleFRleHRS
dW5zW3IgKyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbciArIDFdLT5pbmRl
eEF0KDApKTsKIAotICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Ojp0cmVhdEFz
U3BhY2UoY2gpOworICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6
dHJlYXRBc1NwYWNlKGNoKTsKICAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3Bh
Y2UgPyBmb250RGF0YS5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CiAgICAgICAgICAgICBDR1Np
emUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IENHU2l6ZU1ha2Uoc3BhY2VXaWR0aCwgYWR2YW5j
ZXNbaV0uaGVpZ2h0KSA6IGFkdmFuY2VzW2ldOwogI2lmIFBMQVRGT1JNKElPUykKQEAgLTYyNSw3
ICs2MjUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAKICAg
ICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQogICAgICAgICAg
ICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udERhdGEsIG1fcnVuLnRh
YlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21t
aXQpOwotICAgICAgICAgICAgZWxzZSBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNo
KSAmJiAhdHJlYXRBc1NwYWNlKSB7CisgICAgICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6
dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CiAgICAgICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CiAgICAgICAgICAgICAgICAgZ2x5cGggPSBmb250RGF0
YS5zcGFjZUdseXBoKCk7CiAgICAgICAgICAgICB9CkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoICs9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCk7CiAKICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAg
ICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnRDYXNjYWRlOjppc0NK
S0lkZW9ncmFwaE9yU3ltYm9sKGNoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBEaXN0cmli
dXRlIHRoZSBydW4ncyB0b3RhbCBleHBhbnNpb24gZXZlbmx5IG92ZXIgYWxsIGV4cGFuc2lvbiBv
cHBvcnR1bml0aWVzIGluIHRoZSBydW4uCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4cGFu
c2lvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24g
PSBtX2V4cGFuc2lvbjsKQEAgLTY4NSwxMiArNjg1LDEzIEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgIC8vIFdlIGFkanVzdCB0aGUgd2lkdGgg
b2YgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEgIndvcmQiIHRvIGVuc3VyZSBhbiBpbnRlZ2VyIHdp
ZHRoLiAKICAgICAgICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBk
ZXRlcm1pbmUgd29yZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjayAKICAgICAgICAg
ICAgIC8vIHRvIGJlIGludGVnZXIgd2lkdGgsIHNvIHRoZSBmb2xsb3dpbmcgd29yZHMgd2lsbCBz
dGFydCBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LiAKLSAgICAgICAgICAgIGlmIChtX3J1bi5hcHBs
eVdvcmRSb3VuZGluZygpICYmIEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoKSkgCisg
ICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Q2FzY2FkZTo6
aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoY2gpKSAKICAgICAgICAgICAgICAgICBhZHZhbmNlLndp
ZHRoID0gY2VpbENHRmxvYXQoYWR2YW5jZS53aWR0aCk7IAogCiAgICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgInJvdW5kaW5nIGhhY2sgY2hhcmFj
dGVyIiwgaWYgc28sIGFkanVzdCB0aGUgCi0gICAgICAgICAgICAvLyB3aWR0aCBzbyB0aGF0IHRo
ZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LiAKLSAgICAg
ICAgICAgIGlmICgobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEdseXBoICYmIEZv
bnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKG5leHRDaCkpIHx8IChtX3J1bi5hcHBseVJ1blJv
dW5kaW5nKCkgJiYgbGFzdEdseXBoKSkgeyAKKyAgICAgICAgICAgIC8vIHdpZHRoIHNvIHRoYXQg
dGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91bmRhcnkuCisgICAg
ICAgICAgICBib29sIG5lZWRzUm91bmRpbmdGb3JDaGFyYWN0ZXIgPSBtX3J1bi5hcHBseVdvcmRS
b3VuZGluZygpICYmICFsYXN0R2x5cGggJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hh
cmFjdGVyKG5leHRDaCk7CisgICAgICAgICAgICBpZiAobmVlZHNSb3VuZGluZ0ZvckNoYXJhY3Rl
ciB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkpIHsKICAgICAgICAg
ICAgICAgICBDR0Zsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1pdCArIGFkdmFu
Y2Uud2lkdGg7IAogICAgICAgICAgICAgICAgIHdpZHRoU2luY2VMYXN0Q29tbWl0ID0gY2VpbENH
RmxvYXQodG90YWxXaWR0aCk7IAogICAgICAgICAgICAgICAgIENHRmxvYXQgZXh0cmFXaWR0aCA9
IHdpZHRoU2luY2VMYXN0Q29tbWl0IC0gdG90YWxXaWR0aDsgCkBAIC03MDksNyArNzEwLDcgQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgICAg
IHdpZHRoU2luY2VMYXN0Q29tbWl0ICs9IGFkdmFuY2Uud2lkdGg7IAogCiAgICAgICAgICAgICAv
LyBGSVhNRTogQ29tYmluaW5nIG1hcmtzIHNob3VsZCByZWNlaXZlIGEgdGV4dCBlbXBoYXNpcyBt
YXJrIGlmIHRoZXkgYXJlIGNvbWJpbmUgd2l0aCBhIHNwYWNlLgotICAgICAgICAgICAgaWYgKG1f
Zm9yVGV4dEVtcGhhc2lzICYmICghRm9udDo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaCkgfHwg
KFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19NX01BU0spKSkKKyAgICAgICAgICAgIGlmIChtX2Zv
clRleHRFbXBoYXNpcyAmJiAoIUZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNo
KSB8fCAoVV9HRVRfR0NfTUFTSyhjaCkgJiBVX0dDX01fTUFTSykpKQogICAgICAgICAgICAgICAg
IGdseXBoID0gMDsKIAogICAgICAgICAgICAgYWR2YW5jZS5oZWlnaHQgKj0gLTE7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVExpbmUgKiBD
VExpbmVSZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250
Q2FzY2FkZTsKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogY2xhc3MgVGV4dFJ1bjsKIApAQCAtNTAs
NyArNTAsNyBAQCBlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhCiAvLyBj
b21wbGV4IHNjcmlwdHMgb24gT1MgWC4KIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7CiBw
dWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0
UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRF
bXBoYXNpcyA9IGZhbHNlKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENh
c2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlv
biA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMg
PSAwLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFkdmFuY2UgYW5k
IGVtaXQgZ2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgogICAgIHZvaWQgYWR2
YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRpb25TdHlsZSA9
IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjx1bnNpZ25lZCwgMTY+IG1fcnVuSW5kaWNlczsKICAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBt
X2dseXBoQ291bnRGcm9tU3RhcnRUb0luZGV4OwogCi0gICAgY29uc3QgRm9udCYgbV9mb250Owor
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47
CiAgICAgYm9vbCBtX2lzTFRST25seTsKICAgICBib29sIG1fbWF5VXNlTmF0dXJhbFdyaXRpbmdE
aXJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3
LDggKzI3LDggQEAKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAogI2luY2x1
ZGUgIkNvcmVUZXh0U1BJLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIApAQCAtNDAsMTkgKzQwLDE5IEBACiAK
IEBpbnRlcmZhY2UgV2ViQ2FzY2FkZUxpc3QgOiBOU0FycmF5IHsKICAgICBAcHJpdmF0ZQotICAg
IGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250OworICAgIGNvbnN0IFdlYkNvcmU6OkZvbnRDYXNj
YWRlKiBfZm9udDsKICAgICBVQ2hhcjMyIF9jaGFyYWN0ZXI7CiAgICAgTlNVSW50ZWdlciBfY291
bnQ7CiAgICAgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiwgMTY+IF9mb250
RGVzY3JpcHRvcnM7CiB9CiAKLS0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9u
dCopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hhcmFjdGVyOworLSAoaWQpaW5pdFdpdGhGb250
Oihjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZSopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hh
cmFjdGVyOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDYXNjYWRlTGlzdAogCi0tIChp
ZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqKWZvbnQgY2hhcmFjdGVyOihVQ2hh
cjMyKWNoYXJhY3RlcgorLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250Q2Fz
Y2FkZSopZm9udCBjaGFyYWN0ZXI6KFVDaGFyMzIpY2hhcmFjdGVyCiB7CiAgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC02MCw3ICs2MCw3IEBA
IC0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udCoKICAgICBfZm9udCA9IGZv
bnQ7CiAgICAgX2NoYXJhY3RlciA9IGNoYXJhY3RlcjsKIAotICAgIC8vIEJ5IHRoZSB0aW1lIGEg
V2ViQ2FzY2FkZUxpc3QgaXMgdXNlZCwgdGhlIEZvbnQgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0
byByZWFsaXplIGFsbCBvZiBpdHMKKyAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0
IGlzIHVzZWQsIHRoZSBGb250Q2FzY2FkZSBoYXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxp
emUgYWxsIG9mIGl0cwogICAgIC8vIEZvbnREYXRhLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0
IHRoZSBGb250Q2FjaGUuCiAgICAgd2hpbGUgKCFfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChfY291
bnQpLmlzTnVsbCgpKQogICAgICAgICBfY291bnQrKzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2lmICFQTEFURk9STShJ
T1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0
ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW1wb3J0ICJOU0ZvbnRTUEkuaCIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29t
cGxleFRleHRNYWMuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKQEAgLTM3LDcgKzM3LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CiAgICAgY29udHJvbGxlci5hZHZhbmNl
KGZyb20pOwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RG
b3JDb21wbGV4CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0Citm
bG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZs
b2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC03NSw3ICs3NSw3IEBAIGZsb2F0IEZvbnQ6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAK
LWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBo
b2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC05Myw3ICs5Myw3IEBAIGZsb2F0IEZvbnQ6
OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnQKICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkg
LSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5p
dGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJv
bSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTA0LDcgKzEwNCw3IEBA
IHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBkcmF3RW1waGFz
aXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50
LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJm
bG93KSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21w
bGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9u
dHMpOwogICAgIGlmIChnbHlwaE92ZXJmbG93KSB7CkBAIC0xMTYsMTMgKzExNiwxMyBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uCiAgICAgcmV0dXJuIGNvbnRyb2xs
ZXIudG90YWxXaWR0aCgpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMs
IHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udDo6Zm9udERh
dGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Citjb25zdCBTaW1w
bGVGb250RGF0YSogRm9udENhc2NhZGU6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAogewogICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKICAgICBz
aXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKICNpbXBvcnQgIkNvcmVHcmFw
aGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKQEAgLTU4LDEyICs1OCwxMiBAQCBT
T0ZUX0xJTksoVUlLaXQsIF9VSUtpdEdldFRleHRFZmZlY3RzQ2F0CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQo
KQorYm9vbCBGb250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0
KCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91
bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0x
OTUsNyArMTk1LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShDR0Nvbgog
fQogI2VuZGlmCiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQ
b2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6
ZSgpKQpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjph
ZHZhbmNlKCkKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4
IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCi1EYXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9y
SW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3QKK0Rhc2hB
cnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0
JiBsaW5lRXh0ZW50cykgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
ICAgICAgICAgcmV0dXJuIERhc2hBcnJheSgpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIERhc2hBcnJh
eSBGb250OjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2kKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1
ZmZlcjsKICAgICBnbHlwaEJ1ZmZlci5zYXZlT2Zmc2V0c0luU3RyaW5nKCk7CiAgICAgZmxvYXQg
ZGVsdGFYOwotICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnQ6OkNvbXBsZXgpCisgICAgaWYg
KGNvZGVQYXRoKHJ1bikgIT0gRm9udENhc2NhZGU6OkNvbXBsZXgpCiAgICAgICAgIGRlbHRhWCA9
IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIDAsIHJ1bi5sZW5ndGgoKSwg
Z2x5cGhCdWZmZXIpOwogICAgIGVsc2UKICAgICAgICAgZGVsdGFYID0gZ2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIDAsIHJ1bi5sZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwpA
QCAtNTkwLDcgKzU5MCw3IEBAIERhc2hBcnJheSBGb250OjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25z
V2kKIH0KICNlbmRpZgogCi1ib29sIEZvbnQ6OnByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgp
IGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBj
b25zdAogewogI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+IDEwOTAKICAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250RGF0YSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1h
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dseXBoUGFnZU1hYy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbmNsdWRlICJD
b3JlVGV4dFNQSS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgogI2lmICFQTEFURk9STShJT1MpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBi
b29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGEKICAgICBpZiAoZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLndpZHRoVmFyaWFudCgpICE9IFJlZ3VsYXJXaWR0aCB8fCBmb250RGF0YS0+aGFz
VmVydGljYWxHbHlwaHMoKSkgewogICAgICAgICAvLyBJZGVvZ3JhcGhzIGRvbid0IGhhdmUgYSB2
ZXJ0aWNhbCB2YXJpYW50IG9yIHdpZHRoIHZhcmlhbnRzLgogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghRm9udDo6
aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6
OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltpXSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbXBvcnQgIkNvcmVH
cmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKICNpbXBvcnQgIkZsb2F0UmVj
dC5oIgotI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJG
b250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJTaGFy
ZWRCdWZmZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBDR1BhdGhSZWYgY3JlYXRl
UGF0aEZvckdseXBoKEhEQyAKICAgICByZXR1cm4gcGF0aDsKIH0KIAotdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKK3ZvaWQgRm9udENh
c2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCiAg
ICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3
ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCkBAIC00MSwxNyArNDEsMTcgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxi
YWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxs
YmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9u
dENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJv
bGxlciBpdCh0aGlzLCBydW4pOwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBAIC02Nyw3ICs2Nyw3
IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXgKICAgICBzZWxlY3Rp
b25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7CiB9CiAKLWZsb2F0IEZv
bnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBo
YXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRH
bHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZy
b20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5v
dCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgaWYgKGZvclRleHRFbXBoYXNpcykgewog
ICAgICAgICAvLyBGSVhNRTogQWRkIGZvclRleHRFbXBoYXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2Ny
aWJlQ29udHJvbGxlciBhbmQgdXNlIGl0LgpAQCAtOTIsNyArOTIsNyBAQCBmbG9hdCBGb250Ojpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQog
Ci1mbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIg
aG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgog
ICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMTA5LDcgKzEwOSw3IEBAIGZsb2F0IEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnQKICAgICByZXR1cm4gc3RhcnRQb2ludC54
KCkgLSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQg
aW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwg
ZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTIwLDcgKzEyMCw3
IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBkcmF3RW1w
aGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBv
aW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udDo6
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBV
bmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsK
ICAgICBjb250cm9sbGVyLmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKQEAgLTEzMywxMCArMTMzLDEw
IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb24KICAgICByZXR1cm4g
Y29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3Np
dGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIHRy
dW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0IG9ubHkgYWZmZWN0cyBTVkcs
IHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2ludCBudW1iZXJzCi0gICAgLy8gdG8gRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZp
eGluZyB0aGlzIHByb2JsZW0uCisgICAgLy8gdG8gRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0
aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBw
cm9ibGVtLgogICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwogCiAgICAgVW5p
c2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlVuaXNjcmli
ZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Ly8gdGhhdCBkb2VzIHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZlcnl0
aGluZyBpbiB0aGUgY29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQogLy8gdGFrZSB0aGUgR2x5
cGhCdWZmZXIgYXMgYW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0aGUg
Z2x5cGggYnVmZmVyIHdoZW4KIC8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6OlVu
aXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitVbmlzY3JpYmVD
b250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cykKICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
ZmFsbGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKQpAQCAtNjMsNyArNjMsNyBAQCBVbmlzY3JpYmVD
b250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyCiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0
IG51bVNwYWNlcyA9IDA7CiAgICAgICAgIGZvciAoaW50IHMgPSAwOyBzIDwgbV9ydW4ubGVuZ3Ro
KCk7IHMrKykgewotICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShtX3J1bltzXSkp
CisgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShtX3J1bltzXSkpCiAg
ICAgICAgICAgICAgICAgbnVtU3BhY2VzKys7CiAgICAgICAgIH0KIApAQCAtMzUxLDcgKzM1MSw3
IEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUkKICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2UgPSAq
KG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEpKTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIUZvbnQ6OnRyZWF0QXNTcGFjZShjYW5kaWRhdGVTcGFjZSkpCisgICAgICAgICAgICAg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjYW5kaWRhdGVTcGFjZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC53b3JkU3BhY2luZygpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKIAogI2luY2x1ZGUgPHVzcDEwLmg+Ci0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTM1LDcgKzM1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKIHB1Ymxp
YzoKLSAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CisgICAg
VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAg
IC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0
ZXIuCiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsKQEAg
LTYwLDcgKzYwLDcgQEAgcHJpdmF0ZTogICAgCiAgICAgICAgICAgICAgICBWZWN0b3I8V09SRD4m
IGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKICAgICAgICAgICAgICAgIFZlY3RvcjxT
Q1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwogCi0gICAgY29uc3QgRm9udCYgbV9m
b250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1biYg
bV9ydW47CiAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBtX2ZhbGxiYWNrRm9u
dHM7CiAgICAgRmxvYXRQb2ludCBtX2dseXBoT3JpZ2luOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkN1cnNvci5oIgog
I2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW1wb3J0ICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dL
R3JhcGhpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dh
ay9XS0dyYXBoaWNzLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2lt
cG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKICNpbXBvcnQgPElt
YWdlSU8vSW1hZ2VJTy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJ
bWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJh
Z0ltYWdlTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAjaW1wb3J0
ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rv
ci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xNTcsMTAgKzE1NywxMCBAQCBj
b25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CiAKIC8vIEZJWE1FIC0gd2Ugc2hv
dWxkIG1vdmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5nIGV4dHJhcyB0byBXZWJD
b3JlCiAgICAgCi1zdGF0aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250KQorc3Rh
dGljIEZvbnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCiB7CiAgICAgc3Rh
dGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChGb250Q2FzY2FkZSwgY3VycmVudFJlbmRlcmVyLCAoKSk7CiAgICAgCiAgICAg
aWYgKFtmb250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQogICAgICAgICByZXR1cm4gY3VycmVudFJl
bmRlcmVyOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBGb250JiBmb250RnJvbU5TRm9udChO
U0ZvbnQgKmZvbnQKICAgICBjdXJyZW50Rm9udCA9IGZvbnQ7CiAgICAgQ0ZSZXRhaW4oY3VycmVu
dEZvbnQpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgZihmb250LCBbZm9udCBwb2ludFNpemVdKTsK
LSAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250KGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJl
bnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgIGN1cnJlbnRSZW5kZXJlciA9IEZv
bnRDYXNjYWRlKGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdp
bmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CiB9CiAKQEAgLTE5Miw3
ICsxOTIsNyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhXaXRoRm9udChOU1N0cmluZyAqc3RyCiAgICAg
W3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogICAgIAogICAgIGlmIChjYW5V
c2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBGb250IHdl
YkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAg
ICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250
IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3
aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3Ro
KTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJldHVybiB3
ZWJDb3JlRm9udC53aWR0aChydW4pOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGRy
YXdBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAg
ICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBv
aW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0sIEFudGlhbGlhc2VkKTsK
KyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBb
Zm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBBbnRpYWxp
YXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAg
ICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1l
bnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24gY29u
dHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAKLSAgICB2
aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBj
b25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVhbCBM
ZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6
ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250
cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQ
YXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJv
bFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xC
b3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGNv
bnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3QgeyByZXR1
cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBA
QCBUaGVtZSogcGxhdGZvcm1UaGVtZSgpCiAKIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBh
IGJ1bmNoIG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgogCi1zdGF0aWMgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBp
bnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikK
QEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbU5TQ29udHJvbFNp
emUoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgc2l6ZUZyb21G
b250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0
IHpvb21GYWN0b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQorc3RhdGlj
IExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBM
ZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6OmFycmF5
PEludFNpemUsIDM+JiBzaXplcykKIHsKICAgICByZXR1cm4gc2l6ZUZyb21OU0NvbnRyb2xTaXpl
KGNvbnRyb2xTaXplRm9yRm9udChmb250KSwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvciwgc2l6ZXMp
OwogfQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIGNoZWNrYm94TWFyZ2lu
cyhOU0NvbnQKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBM
ZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXpl
JiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUgY2hlY2ti
b3hTaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRT
aXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYg
KCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5o
ZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtMzIzLDcgKzMyMyw3IEBAIHN0YXRpYyBj
b25zdCBpbnQqIHJhZGlvTWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2luc1tjb250
cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250JiBm
b250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3Rh
dGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBM
ZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtNTkzLDcg
KzU5Myw3IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PEludFNpemUsIDM+JiBzdGUKIAogLy8g
V2UgZG9uJ3QgdXNlIGNvbnRyb2xTaXplRm9yRm9udCgpIGZvciBzdGVwcGVycyBiZWNhdXNlIHRo
ZSBzdGVwcGVyIGhlaWdodAogLy8gc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0aGUg
Y29ycmVzcG9uZGluZyB0ZXh0IGZpZWxkIGhlaWdodCwKLXN0YXRpYyBOU0NvbnRyb2xTaXplIHN0
ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0NvbnRy
b2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQp
CiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKICAgICBpZiAoZm9udFNp
emUgPj0gMTgpCkBAIC02NzMsNyArNjczLDcgQEAgaW50IFRoZW1lTWFjOjpiYXNlbGluZVBvc2l0
aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1l
bnQocGFydCk7CiB9CiAKLUZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QK
K0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKQEAgLTY5MSw3
ICs2OTEsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvCiAgICAg
fQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0
LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpv
b21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7
CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgpAQCAtNzEwLDcgKzcxMCw3IEBAIExlbmd0aFNp
emUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2wKICAgICB9CiB9CiAKLUxlbmd0aFNpemUg
VGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250
JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6bWlu
aW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAg
ICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MjcsNyArNzI3LDcgQEAgTGVuZ3RoU2l6ZSBU
aGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKAogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1l
TWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3Ro
Qm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3Rv
cikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0
b25QYXJ0OgpAQCAtNzM5LDcgKzczOSw3IEBAIExlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJv
cmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBhZGRp
bmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVNYWM6OmNv
bnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQgIkN1cnNv
ci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZv
bnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUGxhdGZvcm1Mb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oSU9TKQot
Y2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogI2VuZGlmCiAKIGNsYXNzIExvY2FsZSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2Fj
aGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2Nh
bGl6ZWREYXRlQ2FjaGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKIAogI2luY2x1ZGUgIkRh
dGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKIGNsYXNzIExvY2FsaXplZERhdGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgTlNEYXRlRm9ybWF0
dGVyICpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7Ci0gICAgZmxv
YXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZv
bnQmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOworICAgIGZsb2F0IG1heGltdW1XaWR0aEZv
ckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IE1lYXN1cmVUZXh0Q2xpZW50Jik7CiAgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7CiAKIHByaXZh
dGU6CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
ZmxvYXQ+IERhdGVUeXBlTWF4V2lkdGhNYXA7CiAgICAgRGF0ZVR5cGVGb3JtYXR0ZXJNYXAgbV9m
b3JtYXR0ZXJNYXA7CiAgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdpZHRoTWFwOwotICAg
IEZvbnQgbV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKIAogICAgIGZyaWVuZCBMb2Nh
bGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOwogICAgIGZyaWVuZCBOZXZlckRl
c3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0
ZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCi0jaW1wb3J0ICJGb250Lmgi
CisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiVGV4dFJ1bi5oIgogI2ltcG9ydCA8
bWF0aC5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTUyLDcgKzUyLDYgQEAgc3Rh
dGljIHZvaWQgX2xvY2FsZUNoYW5nZWQoQ0ZOb3RpZmljYXRpbwogfQogCiBMb2NhbGl6ZWREYXRl
Q2FjaGU6OkxvY2FsaXplZERhdGVDYWNoZSgpCi0gICAgOiBtX2ZvbnQoRm9udCgpKQogewogICAg
IC8vIExpc3RlbiB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBhbmQgY2xl
YXIgdGhlIGNhY2hlIHdoZW4gaXQgZG9lcy4KICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9i
c2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQqKXRoaXMs
IF9sb2NhbGVDaGFuZ2VkLApAQCAtODQsMTQgKzgzLDE0IEBAIE5TRGF0ZUZvcm1hdHRlciAqTG9j
YWxpemVkRGF0ZUNhY2hlOjpmb3IKICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKIH0KIAotZmxv
YXQgTG9jYWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9u
ZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBNZWFzdXJlVGV4dENsaWVu
dCYgbWVhc3VyZXIpCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZvckRh
dGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYgbWVhc3VyZXIpCiB7CiAgICAgaW50IGtleSA9IHN0
YXRpY19jYXN0PGludD4odHlwZSk7CiAgICAgaWYgKG1fZm9udCA9PSBmb250KSB7CiAgICAgICAg
IGlmIChtX21heFdpZHRoTWFwLmNvbnRhaW5zKGtleSkpCiAgICAgICAgICAgICByZXR1cm4gbV9t
YXhXaWR0aE1hcC5nZXQoa2V5KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnQgPSBGb250
KGZvbnQpOworICAgICAgICBtX2ZvbnQgPSBGb250Q2FzY2FkZShmb250KTsKICAgICAgICAgbV9t
YXhXaWR0aE1hcC5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludAogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRl
KCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgIHBhaW50U2VsZWN0
aW9uKGNvbnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCkBAIC0xMTAsNyAr
MTEwLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRNYXJrdXBCb3goUGFpbnRJbgogSW50UmVj
dCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBs
aW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0eWxl
LmZvbnRDYXNjYWRlKCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJvb3Qo
KTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3Npbmcg
Y29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3QgPSBMYXlvdXRSZWN0KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3RlZEZv
clByZWNlZGluZ0Jsb2NrKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQ
cmVjZWRpbmdCbG9jaygpKTsKQEAgLTExOSw3ICsxMTksNyBAQCBJbnRSZWN0IEVsbGlwc2lzQm94
OjpzZWxlY3Rpb25SZWN0KCkKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25S
ZWN0KTsKIH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxsaXBzaXNCb3g6OnBhaW50
U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KQogewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjID0gYmxvY2tGbG93KCkuc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNC
b3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIGNvbnN0IFJl
bmRlclN0eWxlJik7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9
CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRl
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQotICAgIHZvaWQgcGFpbnRT
ZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBG
b250Q2FzY2FkZSYpOwogICAgIElubGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAKICAgICBi
b29sIG1fc2hvdWxkUGFpbnRNYXJrdXBCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIz
LDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMjIsNyAr
MTIyLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KgogICAgICAg
ICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5l
ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmJlaGF2ZXNMaWtlVGV4dCgpKSB7CiAg
ICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSB8fCBjaGlsZC0+
cmVuZGVyZXIoKS5wYXJlbnQoKSAhPSAmcmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVz
Y2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJ
ZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUubGluZUhl
aWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAgICAgIHx8
IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGlu
ZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFu
ZEJhc2VsaW5lID0gdHJ1ZTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6
OmFkZFRvTGluZShJbmxpbmVCb3gqCiAgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRGbG93Qm94
ID0gZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgICAgICAgICAvLyBD
aGVjayB0aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZlcmVuY2Vz
IGluIGZvbnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgogICAgICAgICAgICAgICAgIGlm
ICghY2hpbGRGbG93Qm94LmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUo
KQotICAgICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNz
KCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCku
Zm9udE1ldHJpY3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnRD
YXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdh
cChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAg
ICAgICAgfHwgcGFyZW50U3R5bGUubGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdo
dCgpCiAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkg
IT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2Fs
QWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgICAgICAgICB8fCBjaGlsZFN0eWxlLmhh
c0JvcmRlcigpIHx8IGNoaWxkU3R5bGUuaGFzUGFkZGluZygpIHx8IGNoaWxkU3R5bGUuaGFzVGV4
dENvbWJpbmUoKSkKQEAgLTM4OCw3ICszODgsNyBAQCBmbG9hdCBJbmxpbmVGbG93Qm94OjpwbGFj
ZUJveFJhbmdlSW5JbmxpCiAgICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gdGV4
dEJveC5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlclRleHQudGV4dExlbmd0aCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3
bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3guc3RhcnQoKSkpKQotICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS53b3Jk
U3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94Lmxp
bmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAgICBu
ZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJB
dCh0ZXh0Qm94LmVuZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXh0Qm94LnNl
dExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29sIElubGlu
ZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
bGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5mb250RGVz
Y3JpcHRpb24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRh
dGlvblVwcmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEo
KS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wg
SW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChkb3du
Y2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSh0
ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNoaWxkLT5s
aW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5
cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSBu
dWxscHRyOwpAQCAtODczLDcgKzg3Myw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFk
ZFRleHRCb3hWaXMKIAogICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICBpZiAobGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiB0ZXh0
Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNpc01hcmtJ
c0Fib3ZlKSkgewotICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxlLmZv
bnQoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmco
KSk7CisgICAgICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5lU3R5bGUuZm9udENhc2Nh
ZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmco
KSk7CiAgICAgICAgIGlmIChlbXBoYXNpc01hcmtJc0Fib3ZlID09ICFsaW5lU3R5bGUuaXNGbGlw
cGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxvdyA9IHN0
ZDo6bWluKHRvcEdseXBoT3ZlcmZsb3csIC1lbXBoYXNpc01hcmtIZWlnaHQpOwogICAgICAgICBl
bHNlCkBAIC04ODIsNyArODgyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4
dEJveFZpcwogCiAgICAgLy8gSWYgbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmUsIHdlIHNob3Vs
ZCBmYWN0b3IgdGhhdCBpbnRvIHJpZ2h0IGxheW91dCBvdmVyZmxvdy4gKEV2ZW4gaW4gUlRMLCBs
ZXR0ZXItc3BhY2luZyBpcwogICAgIC8vIGFwcGxpZWQgdG8gdGhlIHJpZ2h0LCBzbyB0aGlzIGlz
IG5vdCBhbiBpc3N1ZSB3aXRoIGxlZnQgb3ZlcmZsb3cuCi0gICAgcmlnaHRHbHlwaE92ZXJmbG93
IC09IHN0ZDo6bWluKDAsIChpbnQpbGluZVN0eWxlLmZvbnQoKS5sZXR0ZXJTcGFjaW5nKCkpOwor
ICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5mb250
Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSk7CiAKICAgICBMYXlvdXRVbml0IHRleHRTaGFkb3dM
b2dpY2FsVG9wOwogICAgIExheW91dFVuaXQgdGV4dFNoYWRvd0xvZ2ljYWxCb3R0b207CkBAIC0x
NTM0LDEwICsxNTM0LDEwIEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJB
bm4KICAgICAgICAgICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICAgICAgICAgIGlm
IChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05v
bmUgJiYgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlzdHNB
bmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKSAmJiBlbXBoYXNp
c01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHlsZS5pc0Zs
aXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9m
RW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnQo
KS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmlu
ZygpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQt
PmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJr
SGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0g
dG9wT2ZFbXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9t
KCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0
eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBi
b3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZExpbmVT
dHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0
RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6
Om1heChyZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBvc2l0aW9uKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTgzLDEwICsxNTgzLDEwIEBAIExh
eW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZVVuZGVyQW4KICAgICAgICAgICAgIGRvd25j
YXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShj
aGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSk7CiAgICAgICAgICAgICBpZiAoY2hp
bGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYm
ICFlbXBoYXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVT
dHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkg
KyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxl
LnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRM
aW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUu
dGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3NpdGlvbik7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHls
ZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01h
cmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZFbXBoYXNp
c01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUo
KS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmlu
ZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBhbGxv
d2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTQgKzI0NSwxNCBAQCBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAgICAgcmV0dXJuIHN0YXRlOwogfQog
Ci1zdGF0aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgRm9udENhc2NhZGUmIGZv
bnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRl
cmVyKQogewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJp
bmVUZXh0PihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJpbmVSZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAgICAgIGlm
ICh0ZXh0Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0
ZXh0Q29tYmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KLSAgICByZXR1cm4g
c3R5bGUuZm9udCgpOworICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQogCiBMYXlv
dXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpIGNvbnN0CkBAIC0yNjYsNyArMjY2LDcgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0
Qm94Ojpsb2NhbFNlbGVjdGlvbgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gdGhpcy0+
c2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5z
ZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhp
cy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5
bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRvVXNl
KGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0J1
ZmZlcjsKICAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhl
bigpOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWkKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHRleHRQYWludFN0eWxlOwog
CiAgICAgLy8gU2V0IG91ciBmb250LgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2Uo
bGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZv
bnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIC8vIDEuIFBhaW50IGJhY2tncm91
bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gRXhhbXBsZXMgb2Ygc3VjaCBiYWNrZ3JvdW5kcyBp
bmNsdWRlIHNlbGVjdGlvbgogICAgIC8vIGFuZCBjb21wb3NpdGlvbiB1bmRlcmxpbmVzLgogICAg
IGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZVRleHRDbGlwICYmICFpc1ByaW50aW5nKSB7CkBAIC02NzgsNyAr
Njc4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgogICAgIGVQ
b3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKIH0KIAotdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBGb250JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50
U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBDb2xvciB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQogICAgIGlm
IChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAjZW5kaWYKIH0KIAotdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
CiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBzdGQ6Om1heChz
dGFydFBvcyAtIG9mZnNldCwgMCk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBzdGF0aWMgR3JhcGhp
Y3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRC
b3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCit2
b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgYm9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1t
YXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50
aW5nKCkpCkBAIC0xMTI4LDcgKzExMjgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9j
dW1lbnRNYXJrZXIoCiAgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKEZsb2F0
UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zm
c2V0KSwgd2lkdGgsIGxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkpOwogfQog
Ci12b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50
TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKIHsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRoaXMtPnNl
bGVjdGlvbkhlaWdodCgpOwogCkBAIC0xMTU5LDcgKzExNTksNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6
OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYg
bWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lk
IElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWRE
b2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250KQogewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJlIG5vdCBh
Y3R1YWxseSBkcmF3biwgYnV0IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQgZm9yIGhp
dCB0ZXN0aW5nLgogICAgIExheW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CkBAIC0xMTc3
LDcgKzExNzcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjCiAg
ICAgbWFya2VyLnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKLXZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQordm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQogewogICAgIGlmICghcmVuZGVyZXIoKS50ZXh0
Tm9kZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbnQgSW5saW5l
VGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAgICAgIHJldHVybiBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyAwIDogbGVuKCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGlu
ZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRU
b1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIGZvbnQub2Zm
c2V0Rm9yUG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBsaW5lT2Zm
c2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCkBAIC0xMzQy
LDcgKzEzNDIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpCiAg
ICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxp
bmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250
VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIGludCBmcm9tID0gIWlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwogICAgIGludCB0
byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7
CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwpAQCAt
MTM1Miw3ICsxMzUyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQo
aQogICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24o
c2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCks
IHJ1bi5sdHIoKSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVj
dFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBTdHJp
bmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6
OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAogewogICAg
IEFTU0VSVChyZW5kZXJlcigpLnRleHQoKSk7CiAKQEAgLTEzNjYsNyArMTM2Niw3IEBAIFRleHRS
dW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKICAgICByZXR1cm4gY29uc3RydWN0
VGV4dFJ1bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAtIHN0
YXJ0UG9zLCBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKTsKIH0KIAotVGV4dFJ1biBJbmxpbmVUZXh0
Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3RyaW5nKiBo
eXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25z
dHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJp
bmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBAIHByaXZhdGU6CiAg
ICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKICAgICBMYXlvdXRVbml0IHNl
bGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1
ZmZlciA9IG51bGxwdHIpIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5n
dGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OworICAg
IFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7
CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
Rm9udENhc2NhZGUmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmly
dHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0
UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNDgsMTcgKzE0OCwxNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0
KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwotICAg
IHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQ
b2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29sIGJh
Y2tncm91bmQpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2b2lk
IHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJvb2wg
YmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25V
bmRlcmxpbmUmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFRleHREZWNvcmF0aW9uLCBU
ZXh0RGVjb3JhdGlvblN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwgVGV4dFBhaW50ZXImKTsKLSAg
ICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQ29sb3IgdGV4dENv
bG9yKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBhaW50
VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
Rm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgQ29sb3IgdGV4dENvbG9yKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJvb2wg
Z3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKLSAgICB2b2lkIGNvbXB1
dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0
IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBs
YWNlbWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyNSw3ICsy
MzI1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAgICAg
ICByZXR1cm4gbGVmdDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcgYXBw
bHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUgZWRn
ZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCkucHJp
bWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0g
bGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFy
V2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAK
QEAgLTIzNjUsNyArMjM2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2lj
YWxSaWcKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0
ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFw
cGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHls
ZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBt
YXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICBy
ZXR1cm4gcmlnaHQ7CiAKQEAgLTMwMDMsNyArMzAwMyw3IEBAIHN0YXRpYyBSZW5kZXJTdHlsZSYg
c3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIHBzZXVkb1N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcHNldWRvU3R5
bGUtPmZvbnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7Cisg
ICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9u
dENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQgZGVzaXJl
ZENhcEhlaWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBs
aW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7
CiAgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3Mo
KS5jYXBIZWlnaHQoKTsKQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyBSZW5kZXJTdHlsZSYg
c3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsKICAg
ICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5zZXRG
b250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHBzZXVkb1N0
eWxlLT5mb250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOwor
ICAgICAgICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHBzZXVkb1N0eWxl
LT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIGFjdHVhbENhcEhl
aWdodCA9IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMzY5Myw3ICszNjkzLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJl
bmRlck5hbWUoKSBjbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0
YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFu
c2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RU
ZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24p
CiB7CiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wgZGly
ZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBA
IC0zNzA4LDcgKzM3MDgsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bkluCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGlu
ZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0
bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBAIC0zNzI3LDI0ICszNzI3LDI0IEBAIHN0YXRp
YyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICByZXR1cm4gcnVuOwogfQog
Ci1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRS
dW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0eWxlLCBleHBh
bnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
ck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgs
IHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVu
ZGVyVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNp
b25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0
UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFJlbmRlclRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIGlmICh0ZXh0LT5pczhCaXQoKSkKICAg
ICAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCB0ZXh0
LT5jaGFyYWN0ZXJzOCgpLCB0ZXh0LT50ZXh0TGVuZ3RoKCksIHN0eWxlLCBleHBhbnNpb24pOwog
ICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+
Y2hhcmFjdGVyczE2KCksIHRleHQtPnRleHRMZW5ndGgoKSwgc3R5bGUsIGV4cGFuc2lvbik7CiB9
CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBj
b250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbikKIHsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHRleHQtPnRl
eHRMZW5ndGgoKSk7CiAgICAgaWYgKHRleHQtPmlzOEJpdCgpKQpAQCAtMzc1Miw3ICszNzUyLDcg
QEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZQogICAgIHJldHVybiBj
b25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFjdGVyczE2
KCkgKyBvZmZzZXQsIGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFn
cykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBj
b250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwyMiArMjAyLDIyIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmICFvYmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYgIW9iai0+
Y29udGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Jiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhw
YW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1
bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5G
bGFncyk7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJT
dHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3Qq
IGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIGNvbnN0IFJl
bmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lv
bik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9
IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5n
RXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVy
T2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAg
ICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhw
YW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9u
dCYsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHls
ZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNv
bnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlk
TGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxl
JiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAgICAg
CiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlwVHJh
aWxpbmdTcGFjZShmbAogICAgICAgICAvLyBDb2xsYXBzZSBhd2F5IHRoZSB0cmFpbGluZyBzcGFj
ZSBhdCB0aGUgZW5kIG9mIGEgYmxvY2suCiAgICAgICAgIFJlbmRlclRleHQmIHJlbmRlclRleHQg
PSBkb3duY2FzdDxSZW5kZXJUZXh0PigqdHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAgICAgY29u
c3QgVUNoYXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5kZXJU
ZXh0LnN0eWxlKCkuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisg
ICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgpLmZvbnRD
YXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgZmxv
YXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
JnJlbmRlclRleHQsIGZvbnQsICZzcGFjZSwgMSwgcmVuZGVyVGV4dC5zdHlsZSgpKSk7CiAgICAg
ICAgIGlubGluZU1heCAtPSBzcGFjZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOwogICAgICAg
ICBpZiAoaW5saW5lTWluID4gaW5saW5lTWF4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExv
Z2ljYWxXaWR0aEZvclRleAogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxs
YmFja0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAotICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8pLmZv
bnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXIt
PnBhcmVudCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKICAgICAvLyBBbHdheXMgY29tcHV0
ZSBnbHlwaCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJveC1jb250YWluIHZhbHVlIGlz
ICJnbHlwaHMiLgogICAgIGlmIChsaW5lQm94LT5maXRzVG9HbHlwaHMoKSkgewogICAgICAgICAv
LyBJZiB3ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdzIGZvbnQgYm94LCB0aGVu
IGRvbid0IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93LiBUaGlzIG9wdGltaXph
dGlvbgpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lk
dGhGb3JUZXgKICAgICAgICAgICAgICAgICAgICAgJndvcmRNZWFzdXJlbWVudC5mYWxsYmFja0Zv
bnRzLCAmb3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgIFVDaGFyIGMgPSByZW5kZXJlci0+Y2hh
cmFjdGVyQXQod29yZE1lYXN1cmVtZW50LnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBp
ZiAoaSA+IDAgJiYgd29yZExlbmd0aCA9PSAxICYmIChjID09ICcgJyB8fCBjID09ICdcdCcpKQot
ICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9
IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1lYXN1cmVt
ZW50LndpZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250
cy5pc0VtcHR5KCkpIHsKQEAgLTc0MywxNCArNzQzLDE0IEBAIEJpZGlSdW4qIFJlbmRlckJsb2Nr
Rmxvdzo6Y29tcHV0ZUlubGluZUQKICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT0gSlVTVElG
WSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1bikgewogICAgICAgICAgICAgICAgIGlmICghaXNB
ZnRlckV4cGFuc2lvbikKICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4dEJv
eD4oKnJ1bi0+Ym94KCkpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKHRydWUpOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFydCwgcnVuLT5t
X3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udENhc2NhZGU6OmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFy
dCwgcnVuLT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lv
bik7CiAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bwb3J0
dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KGludCBsZW5ndGggPSByZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgICAg
IGlmICghcnVuLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3bGlu
ZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+bV9zdGFydCkpKQotICAgICAgICAgICAgICAg
ICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFyZW50KCks
IGxpbmVJbmZvKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdG90
YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5lSW5m
bykuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIG5lZWRzV29y
ZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+
bV9zdG9wIC0gMSkpICYmIHJ1bi0+bV9zdG9wID09IGxlbmd0aDsKICAgICAgICAgICAgIH0KIApA
QCAtNzY4LDcgKzc2OCw3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGlu
ZUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pigq
bGVhZkNoaWxkKS5zZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4obGVh
ZkNoaWxkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9w
cG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVy
VGV4dC5zdHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNp
b24pOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVu
ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJp
bmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bwb3J0
dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgICAgICAgICB9CkBA
IC0xOTA3LDkgKzE5MDcsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tMaW5lc0ZvclRl
eHRPCiB7CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMgdXNpbmcg
dGhlIGN1cnJlbnQgZm9udC4KICAgICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29uZmln
dXJhYmxlLCBhbHNvIG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jpem9udGFs
IGVsbGlwc2lzIGlzICJub3QgcmVuZGVyYWJsZSIKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7Ci0gICAgY29uc3QgRm9u
dCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5mb250Q2FzY2FkZSgp
OwogICAgIGZsb2F0IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRo
KGNvbnN0cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNp
cywgMSwgZmlyc3RMaW5lU3R5bGUoKSkpOwogICAgIGZsb2F0IGVsbGlwc2lzV2lkdGggPSAoZm9u
dCA9PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250LndpZHRo
KGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgc3R5
bGUoKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAg
dm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6c2V0UmVuZGVyZWRUZXh0KAogICAgIG1fbmVlZHNGb250
VXBkYXRlID0gdHJ1ZTsKIH0KIAotZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBvc2l0
aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6
d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAg
aWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgcmV0dXJuIGZvbnQuc2l6ZSgpOwpAQCAtMTA4LDcg
KzEwOCw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBmbG9h
dCBjb21iaW5lZFRleHRXaWR0aCA9IHdpZHRoKDAsIHRleHRMZW5ndGgoKSwgb3JpZ2luYWxGb250
KCksIDAsIG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKICAgICBtX2lzQ29tYmluZWQgPSBjb21i
aW5lZFRleHRXaWR0aCA8PSBlbVdpZHRoOwogICAgIAotICAgIEZvbnRTZWxlY3RvciogZm9udFNl
bGVjdG9yID0gc3R5bGUoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CiAK
ICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICBzaG91bGRVcGRhdGVGb250ID0gbV9jb21i
aW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOyAvLyBOZWVkIHRv
IGNoYW5nZSBmb250IG9yaWVudGF0aW9uIHRvIGhvcml6b250YWwuCkBAIC0xMTcsNyArMTE3LDgg
QEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBzdGF0aWMg
Y29uc3QgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnRzW10gPSB7IEhhbGZXaWR0aCwgVGhp
cmRXaWR0aCwgUXVhcnRlcldpZHRoIH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgod2lkdGhWYXJpYW50cykgOyArK2kpIHsKICAgICAgICAgICAgIGRl
c2NyaXB0aW9uLnNldFdpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnRzW2ldKTsKLSAgICAgICAgICAg
IEZvbnQgY29tcHJlc3NlZEZvbnQgPSBGb250KGRlc2NyaXB0aW9uLCBzdHlsZSgpLmZvbnQoKS5s
ZXR0ZXJTcGFjaW5nKCksIHN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCkpOworCisgICAgICAg
ICAgICBGb250Q2FzY2FkZSBjb21wcmVzc2VkRm9udChkZXNjcmlwdGlvbiwgc3R5bGUoKS5mb250
Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFj
aW5nKCkpOwogICAgICAgICAgICAgY29tcHJlc3NlZEZvbnQudXBkYXRlKGZvbnRTZWxlY3Rvcik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZsb2F0IHJ1bldpZHRoID0gUmVuZGVyVGV4dDo6
d2lkdGgoMCwgdGV4dExlbmd0aCgpLCBjb21wcmVzc2VkRm9udCwgMCwgbnVsbHB0ciwgJmdseXBo
T3ZlcmZsb3cpOwpAQCAtMTM2LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNv
bWJpbmVUZXh0KCkKICAgICAgICAgc2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZvbnRTdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigpKTsK
IAogICAgIGlmIChzaG91bGRVcGRhdGVGb250KQotICAgICAgICBtX2NvbWJpbmVGb250U3R5bGUt
PmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKyAgICAgICAgbV9jb21iaW5lRm9udFN0eWxl
LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgaWYgKG1faXNDb21i
aW5lZCkgewogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBv
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlclN0cmluZywgKCZvYmplY3RSZXBsYWNlbWVudENoYXJh
Y3RlciwgMSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVU
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZu
ZGVmIFJlbmRlckNvbWJpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyQ29tYmluZVRleHRfaAogCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CkBAIC0zOCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihG
bG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0Owog
ICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmLCBpbnQmIGxlbmd0aCkgY29u
c3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVkOyB9
Ci0gICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9udCkgY29uc3QgeyBy
ZXR1cm4gZm9udC5zaXplKCk7IH0KLSAgICBjb25zdCBGb250JiBvcmlnaW5hbEZvbnQoKSBjb25z
dCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250KCk7IH0KLSAgICBjb25zdCBGb250JiB0
ZXh0Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnQo
KTsgfQorICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBv
cmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOyB9CisgICAgY29uc3QgRm9udENhc2NhZGUmIHRleHRDb21iaW5lRm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKTsgfQogCiBwcml2YXRlOgog
ICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29t
YmluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBm
bG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQmLCBm
bG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuICJSZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJS
ZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtOTk3LDcgKzk5
Nyw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUwKICAgICAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNBbmRT
cGFjZVN0ciwgKGVsbGlwc2lzQW5kU3BhY2UsIDIpKTsKICAgICAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVs
bGlwc2lzLCAxKSk7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBudW1W
aXNpYmxlTGluZXMgPT0gMSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgICAgICBj
b25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKIAogICAgICAgICAvLyBHZXQg
ZWxsaXBzaXMgd2lkdGgsIGFuZCBpZiB0aGUgbGFzdCBjaGlsZCBpcyBhbiBhbmNob3IsIGl0IHdp
bGwgZ28gYWZ0ZXIgdGhlIGVsbGlwc2lzLCBzbyBhZGQgaW4gYSBzcGFjZSBhbmQgdGhlIGFuY2hv
ciB3aWR0aCB0b28KICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVy
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnBhaW50UmVwbGFjZWQKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBGbG9h
dFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0OwotICAg
IEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIiKTsK
ICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRy
eShwYWludE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50VGV4
dFJlY3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtMzQ5LDcgKzM0OSw3
IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFVuYXZhaWxhYmwKICAgICByZXBhaW50
KCk7CiB9CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdl
b21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBj
b250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2Vt
ZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiBmb250LCBUZXh0UnVuJiBy
dW4sIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0Citib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpn
ZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwg
RmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9u
dENhc2NhZGUmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3QKIHsK
ICAgICBib29sIGluY2x1ZGVzQXJyb3cgPSBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VC
ZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKIApAQCAt
MzYxLDcgKzM2MSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW4K
ICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShmcmFtZSgpLnNldHRpbmdzKCkuZm9udFJlbmRl
cmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7Ci0g
ICAgZm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKKyAgICBmb250ID0gRm9udENh
c2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZSgwKTsKIAogICAg
IHJ1biA9IFRleHRSdW4obV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCk7CkBAIC0z
OTEsNyArMzkxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dW5hdmFpbAog
ICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRl
eHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAgIEZv
bnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIsIDApOwogICAgIGZsb2F0IHRleHRX
aWR0aDsKICAgICBpZiAoZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoYWNjdW11bGF0ZWRPZmZz
ZXQsIGNvbnRlbnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBhcnJv
d1JlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBib29sIFJl
bmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFiCiAgICAgRmxvYXRSZWN0IGluZGljYXRv
clJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRSZWN0
IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBU
ZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIHJldHVybiBnZXRSZXBs
YWNlbWVudFRleHRHZW9tZXRyeShJbnRQb2ludCgpLCBjb250ZW50UmVjdCwgaW5kaWNhdG9yUmVj
dCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCk7
CiAgICAgYm9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VFdmVu
dCYpIGNvbnN0OwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5
KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50
UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4
dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0
V2lkdGgpIGNvbnN0OworICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBG
bG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwg
RmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0
V2lkdGgpIGNvbnN0OwogICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JC
b3VuZHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5I
YXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9s
OjpwYWludE9iamVjCiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheWVkRmlsZW5hbWUgPSBmaWxl
VGV4dFZhbHVlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsK
KyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7
CiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwg
ZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNp
b24sIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwogICAgICAg
ICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2
b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlSW50CiAgICAgLy8gKHVzaW5nICIw
IiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgIGNvbnN0IFVDaGFyIGNoYXJhY3RlciA9
ICcwJzsKICAgICBjb25zdCBTdHJpbmcgY2hhcmFjdGVyQXNTdHJpbmcgPSBTdHJpbmcoJmNoYXJh
Y3RlciwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcgY29uc3Ry
dWN0VGV4dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KICAgICBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbCogcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250cm9s
Kj4odGhpcyk7CiAgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0V2lkdGhO
dW1DaGFycyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgY2hh
cmFjdGVyQXNTdHJpbmcsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24p
KTsKQEAgLTI3MSw5ICsyNzEsOSBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZp
bGVUZXh0CiAgICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLmZpbGVzKCkpOwogI2lmIFBMQVRGT1JN
KElPUykKICAgICBpZiAoaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50KCkuZGlz
cGxheVN0cmluZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udCgpLCBTdHJpbmdU
cnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICByZXR1cm4gU3RyaW5nVHJ1
bmNhdG9yOjpyaWdodFRydW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwgbWF4
RmlsZW5hbWVXaWR0aCgpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIFN0cmluZ1RydW5jYXRvcjo6
RW5hYmxlUm91bmRpbmdIYWNrcyk7CiAjZW5kaWYKLSAgICByZXR1cm4gdGhlbWUoKS5maWxlTGlz
dE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHlsZSgpLmZvbnQoKSwgbWF4
RmlsZW5hbWVXaWR0aCgpLCBpbnB1dEVsZW1lbnQoKS5tdWx0aXBsZSgpKTsKKyAgICByZXR1cm4g
dGhlbWUoKS5maWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHls
ZSgpLmZvbnRDYXNjYWRlKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCkubXVs
dGlwbGUoKSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBSZW5kZXJGbG93
VGhyZWFkOjpjcmVhdAogICAgIG5ld1N0eWxlLmdldCgpLnNldFRvcChMZW5ndGgoMCwgRml4ZWQp
KTsKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRXaWR0aChMZW5ndGgoMTAwLCBQZXJjZW50KSk7CiAg
ICAgbmV3U3R5bGUuZ2V0KCkuc2V0SGVpZ2h0KExlbmd0aCgxMDAsIFBlcmNlbnQpKTsKLSAgICBu
ZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIG5ld1N0eWxlLmdldCgpLmZvbnRD
YXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogICAgIHJldHVybiBuZXdTdHlsZTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3Jl
ZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBSZWY8UmVuZGVy
U3R5bGU+IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0Wklu
ZGV4KElOVF9NQVgpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEZvbnREZXNjcmlw
dGlvbihGb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnQo
KS51cGRhdGUoMCk7CisgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBk
YXRlKG51bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3BsYXkoRkxF
WCk7CiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEp1c3RpZnlDb250ZW50KEp1c3RpZnlD
ZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdlb21ldHJ5
VXRpbGl0aWVzLmgiCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6c2V0SW1h
Z2VTaXplRm9yQWx0VGV4dAogCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1l
YW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4dC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOwor
ICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsK
ICAgICAgICAgSW50U2l6ZSBwYWRkZWRUZXh0U2l6ZShwYWRkaW5nV2lkdGggKyBzdGQ6Om1pbihj
ZWlsZihmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQs
IG1fYWx0VGV4dCwgc3R5bGUoKSkpKSwgbWF4QWx0VGV4dFdpZHRoKSwgcGFkZGluZ0hlaWdodCAr
IHN0ZDo6bWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhlaWdodCkp
OwogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemUuZXhwYW5kZWRUbyhwYWRkZWRUZXh0U2l6
ZSk7CiAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVw
bGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5nTW9k
aWZpZWRCeUVuY29kaW5nKG1fYWx0VGV4dCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
LCBzdHlsZSgpLmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRN
ZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwogICAgICAgICAgICAg
ICAgIExheW91dFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVh
dGVMaW4KICAgICAgICAgfHwgKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRTdHlsZS0+dmVy
dGljYWxBbGlnbigpICE9IEJBU0VMSU5FKQogICAgICAgICB8fCBzdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKSAhPSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgpLnRleHRFbXBoYXNpc01hcmsoKSAh
PSBUZXh0RW1waGFzaXNNYXJrTm9uZQotICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAoIXBhcmVu
dFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5k
TGluZUdhcChzdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICB8fCAoY2hlY2tG
b250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRl
bnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRN
ZXRyaWNzKCkpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5bGUo
KS5saW5lSGVpZ2h0KCkpKQogICAgICAgICB8fCAoZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKTsgLy8gRklYTUU6IEVuYWJsZSB0aGUgb3B0aW1pemF0
aW9uIG9uY2Ugd2UgbWFrZSBvdmVyZmxvdyBjb21wdXRhdGlvbiBmb3IgY3VsbGVkIGlubGluZXMg
aW4gcmVnaW9ucy4KIApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRh
dGVBbHdheXNDcmVhdGVMaW4KICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGlu
ZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmlyc3RM
aW5lU3R5bGUoKTsKICAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExpbmVT
dHlsZSgpOwotICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5bGUtPmZv
bnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNo
aWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVC
b3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50
aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250
TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0g
QkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hp
bGRTdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgfQpAQCAtNTc0LDggKzU3NCw4IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgIGlmIChyZW5kZXJC
b3guaW5saW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGlu
ZUJveCYgcm9vdEJveCA9IHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKICAg
ICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94
LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXIt
PnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZv
bnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBy
b290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5hZGRSZWN0KEZsb2F0UmVjdChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT54KCkg
LSByZW5kZXJCb3gubWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCByZW5kZXJCb3gud2lkdGgoKSAr
IHJlbmRlckJveC5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGxvZ2ljYWxIZWlnaHQpKTsKICAg
ICAgICAgICAgICAgICBlbHNlCkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0Jv
eCogY2hpbGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNo
aWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgewogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJvb3RC
b3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5l
ci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94
LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OworICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRv
cCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJT
dHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNI
b3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxv
YXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLApA
QCAtNjEwLDggKzYxMCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVC
b3gKICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQu
Zmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5uZXh0VGV4
dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9
IGNoaWxkVGV4dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBj
b250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RM
aW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9n
aWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBj
b250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAg
ICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGlu
ZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVy
U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAg
ICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9u
dE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KGNoaWxkVGV4dC0+
eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0
KSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb3VsZCB1c2UgYSBoZWxwZXIgdG8gc2hhcmUgdGhlc2Ugd2l0aCB0ZXh0IHBhdGguCiAg
ICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGlubGluZUJveC0+
cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHls
ZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6
IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJv
b3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxU
b3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJTdHls
ZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250
YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QoaW5saW5l
Qm94LT54KCksIGxvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxI
ZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgdm9pZCBSZW5k
ZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJ
dGVtc1tpXTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwotICAgICAgICAgICAgRm9udCBpdGVt
Rm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgRm9udENhc2NhZGUgaXRlbUZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7
CiAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkp
IHsKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4o
KmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBkLnNl
dFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZv
bnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsK
KyAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250LmxldHRl
clNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICAgICAgaXRl
bUZvbnQudXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3Rv
cigpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRTaXpl
IGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRl
bVN0eWxlLCBGb250IGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3RhdGlj
IExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJlbmRl
clN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1C
b3VkaW5nQm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0eWxl
LT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3QgSlVT
VElGWS4gU2hvdWxkIHdlPwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBSZW5kZXJMaXN0Qm94
OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29s
b3IodGV4dENvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihpdGVtVGV4
dCwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgaXRlbVN0eWxlLT5kaXJl
Y3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUtPnVuaWNvZGVCaWRpKCkpLCB0cnVlLCBUZXh0
UnVuOjpOb1JvdW5kaW5nKTsKLSAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250KCk7Cisg
ICAgRm9udENhc2NhZGUgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgTGF5
b3V0UmVjdCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4KTsK
ICAgICByLm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVuLCBpdGVtU3R5bGUsIGl0
ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVt
RWxlbWVudCkpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAg
ICAgIGl0ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250
LndvcmRTcGFjaW5nKCkpOworICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1G
b250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgIGl0
ZW1Gb250LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0
b3IoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgpAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7Cisg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
VGV4dFJ1biB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9u
dCwgbV90ZXh0LCBzdHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgdm9pZCBSZW5k
ZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogCiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGggPSAwOwogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLmxpc3RT
dHlsZVR5cGUoKTsKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtl
cjo6Z2V0UmVsYXRpdmVNYXIKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBBc3Rl
cmlza3M6CiAgICAgICAgIGNhc2UgRm9vdG5vdGVzOiB7Ci0gICAgICAgICAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVuID0g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHlsZSgp
LCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGlu
Z0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICByZWxhdGl2ZVJl
Y3QgPSBJbnRSZWN0KDAsIDAsIGZvbnQud2lkdGgocnVuKSwgZm9udC5mb250TWV0cmljcygpLmhl
aWdodCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1MSw3ICsxODUxLDcgQEAgSW50UmVj
dCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICBjYXNlIFVyZHU6CiAg
ICAgICAgICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
SW50UmVjdCgpOwotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgp
OworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGlu
Z0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRUZXh0
UnVuRmxhZ3MpOwogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgocnVuKTsK
ICAgICAgICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5
cGUsIG1fbGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYsNyArMTk2LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bAog
ICAgIGlmIChtX2lubmVyQmxvY2spIC8vIFJlbmRlckJsb2NrIGhhbmRsZWQgdXBkYXRpbmcgdGhl
IGFub255bW91cyBibG9jaydzIHN0eWxlLgogICAgICAgICBhZGp1c3RJbm5lclN0eWxlKCk7CiAK
LSAgICBib29sIGZvbnRDaGFuZ2VkID0gIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5mb250KCkgIT0g
c3R5bGUoKS5mb250KCk7CisgICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8fCBvbGRT
dHlsZS0+Zm9udENhc2NhZGUoKSAhPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKGZv
bnRDaGFuZ2VkKSB7CiAgICAgICAgIHVwZGF0ZU9wdGlvbnNXaWR0aCgpOwogICAgICAgICBtX25l
ZWRzT3B0aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CkBAIC0yMjIsMTMgKzIyMiwxMyBAQCB2b2lk
IFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgICAgICBpZiAoUmVu
ZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAg
ICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHls
ZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCk7CiAgICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRleHRS
dW5GbGFncyk7CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gZm9udC53aWR0aChydW4p
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGggPSBzdGQ6Om1heCht
YXhPcHRpb25XaWR0aCwgb3B0aW9uV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKCF0ZXh0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgp
OworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdF
eHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1
bkZsYWdzKTsKICAgICAgICAgICAgIG1heE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0aW9u
V2lkdGgsIGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIH0KQEAgLTUyMyw3ICs1MjMsNyBAQCBQ
b3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgZ2V0SXRlbUJhY2tn
cm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXNDdXN0b21C
YWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5jb21wdXRlZFN0
eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwgc3R5
bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBz
dHlsZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250Q2FzY2FkZSgpLCBz
dHlsZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLT5kaXNwbGF5KCkg
PT0gTk9ORSwgdHJ1ZSwgc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlvbigpLCBp
c092ZXJyaWRlKHN0eWxlLT51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJh
Y2tncm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQ
b3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcikgOiBtZW51U3R5bGUoKTsKIH0K
QEAgLTU2NCw3ICs1NjQsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVudVN0
eWxlCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBtX2lubmVyQmxvY2sgPyBt
X2lubmVyQmxvY2stPnN0eWxlKCkgOiBzdHlsZSgpOwogICAgIEludFJlY3QgYWJzQm91bmRzID0g
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICByZXR1cm4g
UG9wdXBNZW51U3R5bGUoc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSwKLSAgICAgICAgc3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9Vc2Uudmlz
aWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsCisgICAg
ICAgIHN0eWxlVG9Vc2UuZm9udENhc2NhZGUoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwKICAgICAgICAgc3R5bGUoKS5o
YXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0LCBz
dHlsZVRvVXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5kaXJlY3Rpb24oKSwgaXNP
dmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJh
Y2tncm91bmRDb2xvciwKICAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0aGVt
ZSgpLnBvcHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFJlbmRlclJ1YnlSdW46OmxheW91dCgpCiAgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcnQtPnN0eWxlKCkucnVieVBvc2l0aW9u
KCkgPT0gUnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIpIHsKICAgICAgICAgLy8gQm9wb21vZm8u
IFdlIG5lZWQgdG8gbW92ZSB0aGUgUmVuZGVyUnVieVRleHQgb3ZlciB0byB0aGUgcmlnaHQgc2lk
ZSBhbmQgY2VudGVyIGl0CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgcmVsYXRpdmUgdG8gdGhlIGJh
c2UuCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKLSAgICAgICAg
ZmxvYXQgZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250LmxldHRlclNwYWNpbmcoKSwgMi4w
ZiAqIHJ0LT5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpKTsKKyAgICAgICAg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CisgICAgICAg
IGZsb2F0IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9udC5sZXR0ZXJTcGFjaW5nKCksIDIu
MGYgKiBydC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpOwog
ICAgICAgICBzZXRXaWR0aCh3aWR0aCgpICsgZGlzdGFuY2VCZXR3ZWVuQmFzZSAtIGZvbnQubGV0
dGVyU3BhY2luZygpKTsKICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiByYiA9IHJ1YnlCYXNl
KCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgZmlyc3RMaW5lVG9wID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIFBvcHVwTWVudVN0eWxlIFJl
bmRlclNlYXJjaEZpZWxkOjppdGVtU3QKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNoRmll
bGQ6Om1lbnVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCkuZm9u
dCgpLCBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBQb3B1cE1l
bnVTdHlsZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
LCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lCTEUs
CiAgICAgICAgIHN0eWxlKCkuZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlKCkudGV4dElu
ZGVudCgpLCBzdHlsZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJp
ZGkoKSksIFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyOSw4ICsyMjksOCBAQCBib29sIFJlbmRlclRleHQ6OmlzVGV4dEZyYWdtZW50KCkg
Y29uc3QKIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkg
Y29uc3QKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udCgp
LmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChzdHlsZS5mb250KCkudXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2woKSkKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKHN0eWxlLmZv
bnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIG1fdXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2wgPSBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKTsKICAg
ICAgICAgbmVlZHNSZXNldFRleHQgPSBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAgIH0g
ZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9IG5l
d1N0eWxlLmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKSB7CisgICAgfSBlbHNlIGlm
IChvbGRTdHlsZS0+Zm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9IG5l
d1N0eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkgewogICAgICAg
ICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC00NTEsNyAr
NDUxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAgIHJl
dHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3
aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQ
b3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAor
QUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250
Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUu
aGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CiAgICAg
ICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJlbmRl
ckNvbWJpbmVUZXh0PigqdGhpcyk7CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBSZW5kZXJUZXh0
Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0cmlu
Z0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcgfHwg
KHRleHRbMF0gPT0gJ1xuJyAmJiAhc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHx8IHRleHRbMF0g
PT0gJ1x0JykgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOyAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJz
dC1saW5lLgogICAgICAgICBpZiAoc3RyaXBGcm9udFNwYWNlcykgewogICAgICAgICAgICAgY29u
c3QgVUNoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9u
dC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmc3BhY2Us
IDEsIHN0eWxlKSk7CkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVk
UHJlZldpZHRocyhmbG9hdAogCiAgICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRocyBieSBzY2Fu
bmluZyB0aGUgc3RyaW5nIGZvciBuZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWspIHsKLSAgICAg
ICAgY29uc3QgRm9udCYgZiA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBm
aXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZiA9IHN0eWxlLmZvbnRDYXNj
YWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgYm9vbCBm
aXJzdExpbmUgPSB0cnVlOwogICAgICAgICBiZWdpbk1heFcgPSBtYXhXOwogICAgICAgICBlbmRN
YXhXID0gbWF4VzsKQEAgLTYzNywxMyArNjM3LDEzIEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0Zh
bGxiYWNrRm9udHMgPSB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldpZHRo
KFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQorc3RhdGljIGlubGluZSBm
bG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
cmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSkpOwog
fQogCi1zdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5nVmll
dyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExl
bmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0
IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGlu
dCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQm
IHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9u
dHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAgc3VmZml4U3RhcnQgPSAw
OwogICAgIGlmICh3b3JkLmxlbmd0aCgpIDw9IG1pbmltdW1TdWZmaXhMZW5ndGgpCkBAIC03MDEs
NyArNzAxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAg
IG1faGFzRW5kV1MgPSBmYWxzZTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRo
aXMtPnN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsgLy8gRklY
TUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5l
LgogICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gZm9udC53b3JkU3BhY2luZygpOwogICAgIGludCBs
ZW4gPSB0ZXh0TGVuZ3RoKCk7CiAgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRlcmF0
b3IobV90ZXh0LCBzdHlsZS5sb2NhbGUoKSwgbWFwTGluZUJyZWFrVG9JdGVyYXRvck1vZGUoc3R5
bGUubGluZUJyZWFrKCkpKTsKQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAgZmxvYXQgUmVuZGVyVGV4
dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgICAgICBsZW4gPSB0ZXh0TGVuZ3RoKCkgLSBm
cm9tOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IGZpcnN0TGluZSA/IGZp
cnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxp
bmVTdHlsZS5mb250KCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworICAg
IHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4UG9zLCBm
YWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lk
dGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmLCBmbG9hdCB4UG9z
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdCB4UG9z
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBsZW4gPD0g
dGV4dExlbmd0aCgpKTsKICAgICBpZiAoIXRleHRMZW5ndGgoKSkKQEAgLTEyMjYsNyArMTIyNiw3
IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKIAogICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgZmxvYXQgdzsKLSAgICBp
ZiAoJmYgPT0gJnN0eWxlLmZvbnQoKSkgeworICAgIGlmICgmZiA9PSAmc3R5bGUuZm9udENhc2Nh
ZGUoKSkgewogICAgICAgICBpZiAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSgpICYmICFmcm9tICYm
IGxlbiA9PSB0ZXh0TGVuZ3RoKCkgJiYgKCFnbHlwaE92ZXJmbG93IHx8ICFnbHlwaE92ZXJmbG93
LT5jb21wdXRlQm91bmRzKSkgewogICAgICAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoZ2x5cGhPdmVyZmxvdyk7CkBAIC0xNTU2LDcgKzE1NTYsNyBA
QCBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVDYW5Vc2VTaW1wbGVGb250CiB7CiAgICAgaWYgKGlz
QWxsQVNDSUkoKSB8fCBtX3RleHQuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigpLCBsZW5n
dGgoKSkgPT0gRm9udDo6U2ltcGxlOworICAgIHJldHVybiBGb250Q2FzY2FkZTo6Y2hhcmFjdGVy
UmFuZ2VDb2RlUGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnRDYXNjYWRlOjpT
aW1wbGU7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6bW9tZW50YXJpbHlSZXZlYWxMYXN0VHlwZWRD
aGFyYWN0ZXIodW5zaWduZWQgb2Zmc2V0QWZ0ZXJMYXN0VHlwZWRDaGFyYWN0ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRh
dGlvbiBvZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gm
KTsKIAotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVu
LCBjb25zdCBGb250JiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENh
c2NhZGUmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwgZmxv
YXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZp
cnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogCiAgICAgZmxvYXQgbWluTG9n
aWNhbFdpZHRoKCkgY29uc3Q7CkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0
aW9uKSBvdmVycmlkZSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4pIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmLCBp
bnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmLCBpbnQg
c3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikgY29u
c3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJOyB9
CiAgICAgYm9vbCBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sOjpoaXRJbm5lclRleHRFbGVtCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbDo6
Z2V0QXZlcmFnZUNoYXJXaWR0aCgpCiB7CiAgICAgZmxvYXQgd2lkdGg7Ci0gICAgaWYgKHN0eWxl
KCkuZm9udCgpLmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQorICAgIGlm
IChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZSh3
aWR0aCkpCiAgICAgICAgIHJldHVybiB3aWR0aDsKIAogICAgIGNvbnN0IFVDaGFyIGNoID0gJzAn
OwogICAgIGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKLSAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4
dFJ1bih0aGlzLCBmb250LCBzdHIsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBh
bnNpb24pOwogICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICByZXR1cm4g
Zm9udC53aWR0aCh0ZXh0UnVuKTsKQEAgLTE4OSw3ICsxODksNyBAQCBmbG9hdCBSZW5kZXJUZXh0
Q29udHJvbDo6c2NhbGVFbVRvVW5pdHMoCiB7CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSB1bml0
c1BlckVtIHZhbHVlIGZvciBNUyBTaGVsbCBEbGcgYW5kIENvdXJpZXIgTmV3IGZyb20gdGhlICJo
ZWFkIiBmb250IHRhYmxlLgogICAgIGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOwotICAgIHJl
dHVybiByb3VuZGYoc3R5bGUoKS5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOworICAg
IHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAqIHggLyB1bml0c1Bl
ckVtKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2lj
YWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dp
Y2FsV2lkdGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmU6OmdldEF2ZQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1
bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIENvdXJp
ZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3ggYW5k
IFNhZmFyaSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGluIHRo
ZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KLSAgICBpZiAoc3R5bGUoKS5mb250KCkuZmly
c3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCisgICAgaWYgKHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJuIHNj
YWxlRW1Ub1VuaXRzKDEyMjkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIGZsb2F0
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXYKICAgICAvLyBvZiBNUyBTaGVsbCBE
bGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2lu
IGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZv
bnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldpZHRo
IHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKHN0eWxl
KCkuZm9udCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAgIGlmIChzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAg
ICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwogI2VuZGlmCiAKQEAgLTMzOCwxNSArMzM4
LDE1IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjoKICAgICBmbG9h
dCBtYXhDaGFyV2lkdGggPSAwLmY7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKTsKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5maXJzdEZh
bWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwg
d2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIE1TIFNoZWxsIERsZywg
dGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5k
CiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBp
cyBlbmNvZGluZyBzcGVjaWZpYykuCiAgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4TWluKSB2
YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KICAgICBpZiAo
ZmFtaWx5ID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgbWF4Q2hhcldpZHRoID0gc2NhbGVF
bVRvVW5pdHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoc3R5bGUoKS5mb250KCkuaGFzVmFsaWRBdmVy
YWdlQ2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CisgICAgZWxzZSBpZiAoc3R5
bGUoKS5mb250Q2FzY2FkZSgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQorICAgICAgICBt
YXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLm1heENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5wdXRzLCBJ
RSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgY2FzZSBCdXR0b25Q
YXJ0OiB7CiAgICAgICAgIC8vIEJvcmRlcgogICAgICAgICBMZW5ndGhCb3ggYm9yZGVyQm94KHN0
eWxlLmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUuYm9y
ZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICBib3Jk
ZXJCb3ggPSBtX3RoZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnQoKSwgYm9yZGVy
Qm94LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBib3JkZXJCb3ggPSBtX3RoZW1l
LT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIGJvcmRlckJveCwgc3R5
bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1ZSgp
ICE9IHN0YXRpY19jYXN0PGludD4oc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSkpIHsKICAgICAgICAg
ICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUoKSkKICAgICAgICAgICAgICAgICBzdHlsZS5z
ZXRCb3JkZXJUb3BXaWR0aChib3JkZXJCb3gudG9wKCkudmFsdWUoKSk7CkBAIC0xNDMsNyArMTQz
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICB9
CiAKICAgICAgICAgLy8gUGFkZGluZwotICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCA9IG1f
dGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUucGFkZGluZ0Jv
eCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0Jv
eCA9IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0
eWxlLnBhZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBh
ZGRpbmdCb3ggIT0gc3R5bGUucGFkZGluZ0JveCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0UGFk
ZGluZ0JveChwYWRkaW5nQm94KTsKIApAQCAtMTU0LDI1ICsxNTQsMjUgQEAgdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICAvLyBXaWR0aCAvIEhlaWdodAog
ICAgICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBoZXJlIGFyZSBhZmZlY3RlZCBieSB0aGUg
em9vbS4KICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24n
dCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgotICAgICAgICBMZW5ndGhT
aXplIGNvbnRyb2xTaXplID0gbV90aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udCgp
LCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZmZWN0
aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNv
bnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIExlbmd0aFNpemUoc3R5bGUud2lk
dGgoKSwgc3R5bGUuaGVpZ2h0KCkpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBp
ZiAoY29udHJvbFNpemUud2lkdGgoKSAhPSBzdHlsZS53aWR0aCgpKQogICAgICAgICAgICAgc3R5
bGUuc2V0V2lkdGgoY29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChjb250cm9sU2l6
ZS5oZWlnaHQoKSAhPSBzdHlsZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxlLnNldEhlaWdo
dChjb250cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIE1p
bi1XaWR0aCAvIE1pbi1IZWlnaHQKLSAgICAgICAgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6ZSA9
IG1fdGhlbWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxlLmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUgPSBtX3Ro
ZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLndpZHRoKCkgIT0g
c3R5bGUubWluV2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldE1pbldpZHRoKG1pbkNvbnRy
b2xTaXplLndpZHRoKCkpOwogICAgICAgICBpZiAobWluQ29udHJvbFNpemUuaGVpZ2h0KCkgIT0g
c3R5bGUubWluSGVpZ2h0KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQobWluQ29u
dHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBGb250Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRyb2xGb250
KHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAgICAgaWYg
KGNvbnRyb2xGb250ICE9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKSkgeworICAgICAg
ICBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0
LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBp
ZiAoY29udHJvbEZvbnQgIT0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24oKSkg
ewogICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgZm9udC4KICAgICAgICAgICAgIGlmIChz
dHlsZS5zZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQotICAgICAgICAgICAgICAgIHN0
eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgICAgICAgICAgc3R5bGUuZm9udENhc2NhZGUo
KS51cGRhdGUoMCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgb3VyIGxpbmUtaGVpZ2h0
CiAgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlz
dERlZmF1bHRMYWJlbAogICAgIHJldHVybiBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgp
OwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZp
bGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRp
cGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdE5hbWVG
b3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAgICAgaWYg
KHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIz
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1cm4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3RE
ZWZhdWx0TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250
JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZv
bnRDYXNjYWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsK
IAogICAgIGVudW0gRmlsZVVwbG9hZERlY29yYXRpb25zIHsgU2luZ2xlRmlsZSwgTXVsdGlwbGVG
aWxlcyB9OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiAvKmlucHV0UmVuZGVyZXIqLywgY29uc3QgUmVuZGVyT2JqZWN0
JiAvKmJ1dHRvblJlbmRlcmVyKi8sIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmLCBJ
Y29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDggKzM0LDggQEAKICNpbXBvcnQgIkRhdGVDb21wb25lbnRzLmgiCiAjaW1w
b3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2ltcG9ydCAi
Rm9udC5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgog
I2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiR3JhZGll
bnQuaCIKQEAgLTU0NSw3ICs1NDUsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTZWxlY3RMaXN0QnV0
dG9uU3R5bGUoCiAgICAgCiBjbGFzcyBSZW5kZXJUaGVtZU1lYXN1cmVUZXh0Q2xpZW50IDogcHVi
bGljIE1lYXN1cmVUZXh0Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZU1lYXN1cmVU
ZXh0Q2xpZW50KGNvbnN0IEZvbnQmIGZvbnQsIFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCisgICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVu
dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAgICAg
LCBtX3JlbmRlck9iamVjdChyZW5kZXJPYmplY3QpCiAgICAgICAgICwgbV9zdHlsZShzdHlsZSkK
QEAgLTU1Nyw3ICs1NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2ZvbnQud2lkdGgo
cnVuKTsKICAgICB9CiBwcml2YXRlOgotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25z
dCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJPYmplY3Q7
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CiB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBA
IHN0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRW5mb3JjZSB0aGUgd2lkdGggYW5kIHNldCB0aGUgYm94LXNpemluZyB0byBj
b250ZW50LWJveCB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcGFkZGluZy4KLSAgICBGb250IGZv
bnQgPSBzdHlsZS5mb250KCk7CisgICAgRm9udENhc2NhZGUgZm9udCA9IHN0eWxlLmZvbnRDYXNj
YWRlKCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0RWxlbWVudC5y
ZW5kZXJlcigpOwogICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpICYm
ICFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxs
b3dlZCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9y
V2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0aCwgYm9v
bCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJlY3Qg
Y29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwg
Y29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRS
ZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODE3LDcg
KzgxNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFMKICAgICBz
dHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAog
ICAgIGlmIChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAg
ICAgc3R5bGUuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3R5bGUuZm9udENhc2NhZGUoKS51
cGRhdGUoMCk7CiB9CiAKIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXpl
Rm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CkBAIC0xOTk3LDcgKzE5OTcs
NyBAQCBOU1RleHRGaWVsZENlbGwqIFJlbmRlclRoZW1lTWFjOjp0ZXh0RmllCiAgICAgcmV0dXJu
IG1fdGV4dEZpZWxkLmdldCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmZpbGVMaXN0
TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwg
aW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRl
clRoZW1lTWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3Qs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0Fs
bG93ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgUm9vdElubGlu
ZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBib3hM
aW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250cyAmJiAhdXNlZEZv
bnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGluZUhlaWdo
dCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAgICAgIHVzZWRGb250
cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpKTsKKyAgICAg
ICAgdXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9udHMtPnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3Mg
PSB1c2VkRm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAgICAgICAgaW50IHVzZWRG
b250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSgpKTsKQEAgLTEwMTcs
NyArMTAxNyw3IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6dmVydGljYWxQb3NpdGkKICAg
ICAKICAgICBpZiAodmVydGljYWxBbGlnbiAhPSBCQVNFTElORSkgewogICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgcGFyZW50TGluZVN0eWxlID0gZmlyc3RMaW5lID8gcGFyZW50LT5maXJzdExp
bmVTdHlsZSgpIDogcGFyZW50LT5zdHlsZSgpOwotICAgICAgICBjb25zdCBGb250JiBmb250ID0g
cGFyZW50TGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBwYXJlbnRMaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgY29uc3QgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgICAgICBpbnQgZm9udFNp
emUgPSBmb250LnBpeGVsU2l6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NCwxNyArMTg0LDE3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkg
b24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAocHJpbWFyeUZvbnRE
YXRhLmlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChjb25zdCBh
dXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkgewog
ICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSB8fCB0ZXh0UmVuZGVyZXIu
aXNDb3VudGVyKCkgfHwgdGV4dFJlbmRlcmVyLmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVyZXIuaXNU
ZXh0RnJhZ21lbnQoKQogICAgICAgICAgICAgfHwgdGV4dFJlbmRlcmVyLmlzU1ZHSW5saW5lVGV4
dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3R5bGUuZm9udCgp
LmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnQ6OlNpbXBsZSkK
KyAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVu
ZGVyZXIudGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFy
eUZvbnREYXRhKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAK
IEZsb3dDb250ZW50czo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAg
ICA6IGZvbnQoc3R5bGUuZm9udCgpKQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgpKQog
ICAgICwgdGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigpKQogICAgICwgY29sbGFwc2VXaGl0ZXNw
YWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQogICAgICwgcHJlc2VydmVOZXdsaW5lKHN0
eWxlLnByZXNlcnZlTmV3bGluZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNfaAogI2RlZmluZSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzX2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJicmVha19saW5lcy5oIgpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3Ry
dWN0IFN0eWxlIHsKICAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsK
IAotICAgICAgICBjb25zdCBGb250JiBmb250OworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udDsKICAgICAgICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247CiAgICAgICAgIGJvb2wgY29sbGFw
c2VXaGl0ZXNwYWNlOwogICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBA
QCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgYm9vbCBkZWJ1
Z0JvcmRlcnNFbmFibGVkID0gZmxvdy5mcmFtZSgpLnNldHRpbmdzKCkuc2ltcGxlTGluZUxheW91
dERlYnVnQm9yZGVyc0VuYWJsZWQoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9
ICpwYWludEluZm8uY29udGV4dDsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgp
OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAg
ICBUZXh0UGFpbnRTdHlsZSB0ZXh0UGFpbnRTdHlsZSA9IGNvbXB1dGVUZXh0UGFpbnRTdHlsZShm
bG93LmZyYW1lKCksIHN0eWxlLCBwYWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDAp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw4ICsxMjAsOCBAQCBSdW5SZXNvbHZlcjo6UnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxv
CiAgICAgLCBtX2xpbmVIZWlnaHQobGluZUhlaWdodEZyb21GbG93KGZsb3cpKQogICAgICwgbV9i
YXNlbGluZShiYXNlbGluZUZyb21GbG93KGZsb3cpKQogICAgICwgbV9ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlKGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKQotICAgICwgbV9hc2NlbnQoZmxv
dy5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9kZXNjZW50
KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCisgICAgLCBtX2Fz
Y2VudChmbG93LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQor
ICAgICwgbV9kZXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCku
ZGVzY2VudCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9TaXppbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b1NpemluZy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBA
QCBib29sIFRleHRBdXRvU2l6aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVyYWdlU2l6
ZSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9j
dW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAg
ICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgp
LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB0ZXh0
LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gdGV4dC0+cGFy
ZW50KCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1
c3ROb2RlU2l6ZQogICAgICAgICAgICAgaWYgKGxpc3RNYXJrZXJSZW5kZXJlci0+aXNMaXN0TWFy
a2VyKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gY2xv
bmVSZW5kZXJTdHlsZVdpdGhTdGF0ZShsaXN0TWFya2VyUmVuZGVyZXItPnN0eWxlKCkpOwogICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9j
dW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAg
ICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1l
bnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KCpsaXN0TWFya2VyUmVuZGVyZXIpLnNldFN0
eWxlKHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3ROb2Rl
U2l6ZQogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0
aChsaW5lSGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5z
ZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KGxpbmVIZWlnaHRMZW5ndGgpOwogICAgICAgICAgICAgICAg
IG5ld1BhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAg
ICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6
aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkp
OwogICAgICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQYXJlbnRTdHls
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIwLDcg
KzIyMCw3IEBAIHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShvcmlnaW5hbFNpemUpOwogICAgICAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUo
dGV4dC0+c3R5bGUoKSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6
aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2Rl
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAg
ICAgICAgICB0ZXh0LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBwYXJl
bnQuCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpyZXNldCgp
CiAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1BhcmVudFN0eWxlID0gY2xvbmVS
ZW5kZXJTdHlsZVdpdGhTdGF0ZShwYXJlbnRTdHlsZSk7CiAgICAgICAgICAgICBuZXdQYXJlbnRT
dHlsZS0+c2V0TGluZUhlaWdodChvcmlnaW5hbExpbmVIZWlnaHQpOwogICAgICAgICAgICAgbmV3
UGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAg
ICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3Vt
ZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAg
IG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9j
dW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAg
ICAgcGFyZW50UmVuZGVyZXItPnNldFN0eWxlKG5ld1BhcmVudFN0eWxlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50ZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dFBhaW50ZXI6OlRleHRQYWludGVyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxl
Y3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250JiBmb250LAorVGV4dFBhaW50ZXI6OlRleHRQ
YWludGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwKICAgICBpbnQgc3RhcnRQb3NpdGlvbkluVGV4dFJ1biwgaW50IGVuZFBvc2l0aW9uSW5U
ZXh0Qm94U3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFy
aywgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCwgVGV4dFJ1biYgdGV4dFJ1biwKICAg
ICBGbG9hdFJlY3QmIGJveFJlY3QsIEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBlbXBoYXNp
c01hcmtPZmZzZXQsIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0Rh
dGEqIHNlbGVjdGlvblNoYWRvdywKICAgICBib29sIHRleHRCb3hJc0hvcml6b250YWwsIFRleHRQ
YWludFN0eWxlJiB0ZXh0UGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50
U3R5bGUpCkBAIC01Niw3ICs1Niw3IEBAIFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGlj
c0NvbnRleHQKIHsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKK3N0YXRpYyB2b2lkIGRy
YXdUZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZW1waGFzaXNNYXJrLAogICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IHRvKQogewogICAgIGlmIChl
bXBoYXNpc01hcmsuaXNFbXB0eSgpKQpAQCAtMTEzLDcgKzExMyw3IEBAIFNoYWRvd0FwcGxpZXI6
On5TaGFkb3dBcHBsaWVyKCkKICAgICAgICAgbV9jb250ZXh0LmNsZWFyU2hhZG93KCk7CiB9CiAK
LXN0YXRpYyB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWlj
U3RyaW5nJiBlbXBoYXNpc01hcmssCitzdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKICAgICBp
bnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGlu
dCB0cnVuY2F0aW9uUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZs
b2F0UmVjdCYgYm94UmVjdCwKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ry
b2tlZCwgYm9vbCBob3Jpem9udGFsKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRQYWludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0UGFpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRpYyBp
bmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKIAogY2xhc3MgVGV4dFBhaW50ZXIgewog
cHVibGljOgotICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgcGFpbnRTZWxl
Y3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9u
dCYsCisgICAgVGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgYm9vbCBwYWludFNlbGVjdGVk
VGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250Q2Fz
Y2FkZSYsCiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRleHRSdW4sIGludCBlbmRQb3NpdGlvbklu
VGV4dEJveFN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01h
cmssIFJlbmRlckNvbWJpbmVUZXh0KiwKICAgICBUZXh0UnVuJiwgRmxvYXRSZWN0JiBib3hSZWN0
LCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBT
aGFkb3dEYXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFkb3cs
CiAgICAgYm9vbCB0ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgbm9uU2VsZWN0
aW9uUGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50U3R5bGUpOwpAQCAt
NjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNoYWRvd0RhdGEqIG1fc2VsZWN0aW9u
U2hhZG93OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dE9ubHk7CiAgICAgYm9vbCBtX3Bh
aW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseTsKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAg
Y29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBpbnQgbV9zdGFydFBvc2l0aW9uSW5UZXh0
UnVuOwogICAgIGludCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuOwogICAgIGludCBtX2xlbmd0aDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGlu
ZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDg2LDEzICs0ODYsMTMgQEAgaW5saW5lIHZvaWQgdXBkYXRlQ291
bnRlcklmTmVlZGVkKFJlbmRlcgogICAgIGRvd25jYXN0PFJlbmRlckNvdW50ZXI+KHJlbmRlclRl
eHQpLnVwZGF0ZUNvdW50ZXIoKTsKIH0KIAotaW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0
aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udCYgZm9udCwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBtZWFzdXJl
SHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQogewog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIHJl
dHVybiBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBm
b250LCBzdHlsZS5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpLCBmYWxsYmFja0ZvbnRz
KTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4dCwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmb250LCBmbG9hdCB4UG9z
LCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0g
MCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQ
b3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQg
PSAwKQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7CiAK
QEAgLTUwMSw3ICs1MDEsNyBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJU
ZXh0CiAgICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9tLCBsZW4sIGZvbnQsIHhQb3MsICZm
YWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7CiAKICAgICBpZiAobGF5b3V0KQotICAgICAg
ICByZXR1cm4gRm9udDo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVuLCAmZmFsbGJhY2tGb250cyk7
CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZTo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVuLCAm
ZmFsbGJhY2tGb250cyk7CiAKICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIGZyb20sIGxlbiwgc3R5bGUpOwogICAgIHJ1bi5z
ZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSAtIGZyb20pOwpAQCAtNTIxLDcg
KzUyMSw3IEBAIGlubGluZSB2b2lkIGVuc3VyZUNoYXJhY3RlckdldHNMaW5lQm94KEwKICAgICBs
aW5lTWlkcG9pbnRTdGF0ZS5zdG9wSWdub3JpbmdTcGFjZXMoSW5saW5lSXRlcmF0b3IoMCwgdGV4
dFBhcmFncmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm9m
ZnNldCgpKSk7CiB9CiAKLWlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHRl
eHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmll
ciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1dGl2ZUh5
cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWluaW11bVN1
ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQgeFBvcywg
aW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRl
U3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3ImIGxpbmVCcmVh
aywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCitpbmxpbmUgdm9pZCB0cnlI
eXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5
cGhlbmF0ZWRMaW5lcywgaW50IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBt
aW5pbXVtUHJlZml4TGltaXQsIGludCBtaW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RT
cGFjZSwgdW5zaWduZWQgcG9zLCBmbG9hdCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wg
aXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRT
cGFjaW5nLCBJbmxpbmVJdGVyYXRvciYgbGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9v
bCYgaHlwaGVuYXRlZCkKIHsKICAgICAvLyBNYXAgJ2h5cGhlbmF0ZS1saW1pdC17YmVmb3JlLGFm
dGVyfTogYXV0bzsnIHRvIDIuCiAgICAgdW5zaWduZWQgbWluaW11bVByZWZpeExlbmd0aDsKQEAg
LTYxNSwxMiArNjE1LDEyIEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4
dCgKICAgICB9CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUoKnJl
bmRlclRleHQucGFyZW50KCksIG1fbGluZUluZm8pOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBz
dHlsZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2Fz
Y2FkZSgpOwogICAgIGJvb2wgaXNGaXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2goKTsKICAg
ICBib29sIGNhbkh5cGhlbmF0ZSA9IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0byAmJiBX
ZWJDb3JlOjpjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOwogCiAgICAgdW5zaWduZWQgbGFz
dFNwYWNlID0gbV9jdXJyZW50Lm9mZnNldCgpOwotICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gbV9j
dXJyZW50U3R5bGUtPmZvbnQoKS53b3JkU3BhY2luZygpOworICAgIGZsb2F0IHdvcmRTcGFjaW5n
ID0gbV9jdXJyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICBmbG9h
dCBsYXN0U3BhY2VXb3JkU3BhY2luZyA9IDA7CiAgICAgZmxvYXQgd29yZFNwYWNpbmdGb3JXb3Jk
TWVhc3VyZW1lbnQgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9M
aW5lQnJlYWtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVCcmVha2VyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVCcmVha2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAg
c3RydWN0IFJlbmRlclRleHRJbmZvIHsKICAgICBSZW5kZXJUZXh0KiBtX3RleHQ7CiAgICAgT3du
UHRyPFRleHRMYXlvdXQ+IG1fbGF5b3V0OwogICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xp
bmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKKyAgICBjb25zdCBGb250
Q2FzY2FkZSogbV9mb250OwogfTsKIAogY2xhc3MgTGluZUJyZWFrZXIgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5l
SGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGlubGluZSBib29sIHJl
cXVpcmVzTGluZUJveEZvckNvbnRlbnQoY28KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBh
cmVudFN0eWxlID0gbGluZVN0eWxlKCpwYXJlbnQsIGxpbmVJbmZvKTsKICAgICAgICAgaWYgKGZs
b3dTdHlsZS5saW5lSGVpZ2h0KCkgIT0gcGFyZW50U3R5bGUubGluZUhlaWdodCgpCiAgICAgICAg
ICAgICB8fCBmbG93U3R5bGUudmVydGljYWxBbGlnbigpICE9IHBhcmVudFN0eWxlLnZlcnRpY2Fs
QWxpZ24oKQotICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygp
Lmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dTdHlsZS5mb250KCkuZm9u
dE1ldHJpY3MoKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udENhc2NhZGUoKS5m
b250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dTdHls
ZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgYm9vbCBwYXJzZU1hdGhNTExlbmd0
aChjb25zdCBTdHJpbmcmIHN0cgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYg
KHVuaXQgPT0gImVtIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFsdWUgKiBzdHls
ZS0+Zm9udCgpLnNpemUoKTsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5
bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgaWYgKHVuaXQgPT0gImV4IikgewpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wgcGFyc2VNYXRo
TUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYKICAgICAgICAgICAgIGxlbmd0aCA9IC03OyAgICAg
ICAgCiAgICAgfQogICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5n
dGggKiBzdHlsZS0+Zm9udCgpLnNpemUoKSAvIDE4OworICAgICAgICBsZW5ndGhWYWx1ZSA9IGxl
bmd0aCAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkxLDggKzExOTEsOCBAQCB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByCiAgICAgICAgIG1fb3BlcmF0
b3JGbGFncyA9IGVudHJ5LT5mbGFnczsKIAogICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNw
YWNlIGlzIHNwZWNpZmllZCBhcyBtdWx0aXBsZSBvZiAxLzE4ZW0uCi0gICAgbV9sZWFkaW5nU3Bh
Y2UgPSBlbnRyeS0+bHNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0gICAgbV90
cmFpbGluZ1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4
OworICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5zaXplKCkgLyAxODsKKyAgICBtX3RyYWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNwYWNlICog
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogfQogCiB2b2lkIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQpAQCAtMTIyOSw5ICsxMjI5LDkgQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBtX29wZXJh
dG9yRmxhZ3MgJj0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSB8IE1hdGhNTE9wZXJh
dG9yRGljdGlvbmFyeTo6U2VwYXJhdG9yOyAvLyBUaGlzIHJlc2V0cyBhbGwgYnV0IHRoZSBGZW5j
ZSBhbmQgU2VwYXJhdG9yIHByb3BlcnRpZXMuCiAgICAgZWxzZQogICAgICAgICBtX29wZXJhdG9y
RmxhZ3MgPSAwOyAvLyBUaGlzIHJlc2V0cyBhbGwgdGhlIG9wZXJhdG9yIHByb3BlcnRpZXMuCi0g
ICAgbV9sZWFkaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7IC8vIFRo
aXMgc2V0cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCi0gICAgbV90cmFpbGlu
Z1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgdHJh
aWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KLSAgICBtX21pblNpemUgPSBzdHlsZSgp
LmZvbnQoKS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgorICAgIG1fbGVh
ZGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsgLy8gVGhp
cyBzZXRzIGxlYWRpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX3RyYWlsaW5n
U3BhY2UgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNl
dHMgdHJhaWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX21pblNpemUgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0byAiMWVt
Ii4KICAgICBtX21heFNpemUgPSBpbnRNYXhGb3JMYXlvdXRVbml0OyAvLyBUaGlzIHNldHMgbWF4
c2l6ZSB0byAiaW5maW5pdHkiLgogCiAgICAgaWYgKG1fdGV4dENvbnRlbnQpIHsKQEAgLTEzNTUs
NyArMTM1NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIKICAg
ICAgICAgUmVuZGVyTWF0aE1MVG9rZW46OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7
CiAgICAgICAgIGlmIChpc0ludmlzaWJsZU9wZXJhdG9yKCkpIHsKICAgICAgICAgICAgIC8vIElu
IHNvbWUgZm9udHMsIGdseXBocyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyBoYXZlIG5vbnplcm8g
d2lkdGguIENvbnNlcXVlbnRseSwgd2Ugc3VidHJhY3QgdGhhdCB3aWR0aCBoZXJlIHRvIGF2b2lk
IHdpZGUgZ2Fwcy4KLSAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250KCku
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsIGZhbHNlKTsKKyAgICAgICAgICAg
IEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJh
Y3RlcihtX3RleHRDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICAgICBmbG9hdCBnbHlwaFdpZHRo
ID0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgICAgICAgICAgQVNTRVJUKGdseXBoV2lkdGgg
PD0gbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGggLT0gZ2x5cGhXaWR0aDsKQEAgLTEzNjQsNyArMTM2NCw3IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7
CisgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSk7CiAgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBhZHZhbmNlRm9yR2x5cGgoZGF0YSk7
CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRo
IDwgc3RyZXRjaFNpemUoKSkKQEAgLTE1MjEsNyArMTUyMSw3IEBAIGJvb2wgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAgICAg
Ym90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0gJnN0
eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIHRvcC5mb250RGF0YSA9ICZzdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgZXh0ZW5zaW9uLmZvbnRE
YXRhID0gdG9wLmZvbnREYXRhOwogICAgIGJvdHRvbS5mb250RGF0YSA9IHRvcC5mb250RGF0YTsK
ICAgICBpZiAobWlkZGxlLmdseXBoKQpAQCAtMTUzOCw4ICsxNTM4LDggQEAgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogCiAgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCAm
JiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIAotICAgIGNvbnN0IGF1dG8mIHBy
aW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIEds
eXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIGNvbnN0
IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgp
LmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSB8fCBiYXNl
R2x5cGguZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKICAgICAgICAgcmV0dXJuIGRhdGE7
CiAKQEAgLTE1NzAsOCArMTU3MCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURh
dGEgUmVuZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNoeURhdGEgYXNzZW1i
bHlEYXRhOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCku
Zm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIEdseXBoRGF0YSBiYXNl
R2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKICAgICBpZiAo
cHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZwcmlt
YXJ5Rm9udERhdGEpIHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CkBAIC0x
NjE4LDEyICsxNjE4LDEyIEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVu
ZGUKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgIC8vIFdlIGNvbnZlcnQgdGhl
IGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEuCi0g
ICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgR2x5cGhEYXRh
IGV4dGVuc2lvbiA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNo
eUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOwotICAgICAgICBHbHlwaERhdGEgYm90
dG9tID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFj
dGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50
b3BDaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRl
bnNpb25DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBib3R0b20gPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0
b21DaGFyLCBmYWxzZSk7CiAgICAgICAgIEdseXBoRGF0YSBtaWRkbGU7CiAgICAgICAgIGlmIChz
dHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhcikKLSAgICAgICAgICAgIG1pZGRsZSA9IHN0eWxl
KCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxl
Q2hhciwgZmFsc2UpOworICAgICAgICAgICAgbWlkZGxlID0gc3R5bGUoKS5mb250Q2FzY2FkZSgp
LmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFs
c2UpOwogICAgICAgICBhc3NlbWJseURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRl
bnNpb24sIGJvdHRvbSwgbWlkZGxlKTsKICAgICB9CiAKQEAgLTE2ODAsNyArMTY4MCw3IEBAIHZv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICAgICAgbV9zdHJldGNo
eURhdGEgPSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKG1fdGV4dENvbnRlbnQpOwogICAg
IGVsc2UgewogICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFzZSBnbHlwaCBp
cyBsYXJnZSBlbm91Z2guCi0gICAgICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZv
bnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgZmxvYXQgYmFzZVNpemUg
PSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZUZvckds
eXBoKGJhc2VHbHlwaCk7CiAgICAgICAgIGlmIChzdHJldGNoU2l6ZSgpIDw9IGJhc2VTaXplKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTgwMiw3ICsxODAyLDcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbAogCiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwogICAg
IGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0YSwgYWR2YW5jZUZvckdseXBoKGRh
dGEpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCksICpkYXRh
LmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisgICAgaW5mby5jb250ZXh0LT5kcmF3
R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwg
MSwgb3JpZ2luKTsKIAogICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0KQEAgLTE4OTgsNyAr
MTg5OCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAgICAg
ICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFpbnRPZmZz
ZXQgKyBsb2NhdGlvbigpKTsKICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKICAgICAgICAgTGF5b3V0UG9pbnQg
b3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAt
IGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHls
ZSgpLmZvbnQoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAw
LCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhz
dHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERhdGEs
IGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xOTgwLDcgKzE5ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENo
aWxkcmVuCiAKIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VF
cnJvcigpCiB7Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGlmICghcHJpbWFy
eUZvbnREYXRhLm1hdGhEYXRhKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xOTg5LDcgKzE5
ODksNyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluCiAgICAgTGF5
b3V0VW5pdCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwogCiAgICAgaWYgKG1fc3RyZXRjaHlEYXRh
Lm1vZGUoKSA9PSBEcmF3Tm9ybWFsKSB7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUo
KS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50KCksICFzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0Q29udGVudCgpLCAhc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgICAgICByZXR1cm4gd2lkdGggLSBh
ZHZhbmNlRm9yR2x5cGgoZGF0YSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5kZXJNYXRoTQog
CiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQg
aGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCiB7Ci0g
ICAgaWYgKCFzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7Cisg
ICAgaWYgKCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEo
KSkgewogICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRIIGZvbnQs
IHdlIGFsd2F5cyBtYWtlIHRoZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFuIHRoZSB0
YXJnZXQuCiAgICAgICAgIGRlcHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRvbVBvaW50
TG93ZXI7CiAgICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxP
cGVyYXRvcjo6Y29tcHV0CiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0
eSgpKTsKIAotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0
YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5t
YXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTYsNyArOTYs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiAKIHZvaWQgUmVu
ZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNh
bFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTExLDcg
KzExMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWludCgKICAgICBp
ZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCku
bWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQo
aW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTcgKzE5OSwxNyBAQCB2
b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKIAogICAgIC8vIFdlIHNldCBzb21l
IGNvbnN0YW50cyB0byBkcmF3IHRoZSByYWRpY2FsLCBhcyBkZWZpbmVkIGluIHRoZSBPcGVuVHlw
ZSBNQVRIIHRhYmxlcy4KIAotICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUoKS5m
b250KCkuc2l6ZSgpOworICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnNpemUoKTsKIAogICAgIC8vIEZJWE1FOiBUaGUgcmVjb21tZW5kZWQgZGVmYXVs
dCBmb3IgbV92ZXJ0aWNhbEdhcCBpbiBkaXNwbGF5c3R5bGUgaXMgcnVsZSB0aGlja25lc3MgKyAx
LzQgeC1oZWlnaHQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3
MzcpLgogICAgIG1fdmVydGljYWxHYXAgPSAxMSAqIG1fcnVsZVRoaWNrbmVzcyAvIDQ7CiAgICAg
bV9leHRyYUFzY2VuZGVyID0gbV9ydWxlVGhpY2tuZXNzOwotICAgIExheW91dFVuaXQga2VybkJl
Zm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKLSAgICBMYXlvdXRV
bml0IGtlcm5BZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4Owor
ICAgIExheW91dFVuaXQga2VybkJlZm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkuc2l6ZSgpIC8gMTg7CisgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21SYWlz
ZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5
bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKGF1dG8qIG1hdGhEYXRhID0g
c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGNvbnN0
IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBGSVhNRTogbV92ZXJ0
aWNhbEdhcCBzaG91bGQgdXNlIFJhZGljYWxEaXNwbGF5U3R5bGVWZXJ0aWNhbCBpbiBkaXNwbGF5
IG1vZGUgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgog
ICAgICAgICBtX3ZlcnRpY2FsR2FwID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CiAgICAgICAg
IG1fcnVsZVRoaWNrbmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnRE
YXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsUnVsZVRoaWNrbmVzcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2Vu
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDExICs4OCwxMSBA
QCB2b2lkIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIC8vIFRoaXMg
dHJpZXMgdG8gZW11bGF0ZSB0aGUgZGVmYXVsdCBtYXRodmFyaWFudCB2YWx1ZSBvbiA8bWk+IHVz
aW5nIHRoZSBDU1MgZm9udC1zdHlsZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIHJldmlzZWQgd2hlbiBtYXRodmFyaWFudCBpcyBpbXBsZW1lbnRlZCAoaHR0cDov
L3drYnVnLzg1NzM1KSBhbmQgd2hlbiBmb250cyB3aXRoIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVy
aWMgU3ltYm9scyBjaGFyYWN0ZXJzIGFyZSBtb3JlIHBvcHVsYXIuCiAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24obmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0aW9uKCkp
OwotICAgICAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IG5ld1N0eWxlLmdldCgpLmZv
bnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Ig
PSBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgICAgICBp
ZiAoIW1fY29udGFpbnNFbGVtZW50ICYmIGVsZW1lbnQoKS50ZXh0Q29udGVudCgpLnN0cmlwV2hp
dGVTcGFjZSgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLmxlbmd0aCgpID09IDEgJiYgIXRva2VuRWxl
bWVudC5oYXNBdHRyaWJ1dGUobWF0aHZhcmlhbnRBdHRyKSkKICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKICAgICAgICAgaWYgKG5ld1N0eWxlLmdl
dCgpLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAgICAgbmV3
U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgICAgICAgICAgbmV3
U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKICAgICB9CiAK
ICAgICB3cmFwcGVyLT5zZXRTdHlsZShXVEY6Om1vdmUobmV3U3R5bGUpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkN1cnNvckxpc3Qu
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVk
UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHlsZS5oIgog
I2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbmRlclN0
eWxlOjppbmhlcml0ZWROb3RFcXVhbChjb25zCiB9CiAKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVU
T1NJWklORykKLWlubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udCYgZm9u
dCkKK2lubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udENhc2NhZGUmIGZv
bnQpCiB7CiAgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gewogICAgICAgICBDYXNlRm9sZGlu
Z0hhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZhbWlseSgpLmltcGwoKSks
CkBAIC0zMTUsNyArMzE1LDcgQEAgdWludDMyX3QgUmVuZGVyU3R5bGU6Omhhc2hGb3JUZXh0QXV0
b3NpegogICAgIGhhc2ggXj0gcmFyZUluaGVyaXRlZERhdGEtPm5ic3BNb2RlOwogICAgIGhhc2gg
Xj0gcmFyZUluaGVyaXRlZERhdGEtPmxpbmVCcmVhazsKICAgICBoYXNoIF49IFdURjo6RmxvYXRI
YXNoPGZsb2F0Pjo6aGFzaChpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQudmFsdWUoKSk7
Ci0gICAgaGFzaCBePSBjb21wdXRlRm9udEhhc2goaW5oZXJpdGVkLT5mb250KTsKKyAgICBoYXNo
IF49IGNvbXB1dGVGb250SGFzaChpbmhlcml0ZWQtPmZvbnRDYXNjYWRlKTsKICAgICBoYXNoIF49
IGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZzsKICAgICBoYXNoIF49IGluaGVy
aXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmc7CiAgICAgaGFzaCBePSBpbmhlcml0ZWRfZmxh
Z3MuX2JveF9kaXJlY3Rpb247CkBAIC0zMzksNyArMzM5LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6
ZXF1YWxGb3JUZXh0QXV0b3NpemluZwogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS0+bGlu
ZUJyZWFrID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrCiAgICAgICAgICYm
IHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkgPT0gb3RoZXItPnJhcmVJbmhlcml0ZWRE
YXRhLT50ZXh0U2VjdXJpdHkKICAgICAgICAgJiYgaW5oZXJpdGVkLT5zcGVjaWZpZWRMaW5lSGVp
Z2h0ID09IG90aGVyLT5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKLSAgICAgICAgJiYg
aW5oZXJpdGVkLT5mb250LmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRlZC0+
Zm9udCkKKyAgICAgICAgJiYgaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLT5pbmhlcml0ZWQtPmZvbnRDYXNjYWRlKQogICAgICAgICAmJiBpbmhlcml0
ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+aG9yaXpv
bnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICAmJiBpbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRl
cl9zcGFjaW5nID09IG90aGVyLT5pbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nCiAg
ICAgICAgICYmIGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbiA9PSBvdGhlci0+aW5oZXJp
dGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBSZW5kZXJT
dHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoYwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQogICAgICAgICB8fCBpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQgIT0gb3RoZXIu
aW5oZXJpdGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0CiAjZW5kaWYKLSAgICAgICAgfHwgaW5oZXJp
dGVkLT5mb250ICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udAorICAgICAgICB8fCBpbmhlcml0ZWQt
PmZvbnRDYXNjYWRlICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udENhc2NhZGUKICAgICAgICAgfHwg
aW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRlZC0+
aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWQtPnZlcnRpY2Fs
X2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNp
bmcKICAgICAgICAgfHwgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uICE9IG90aGVyLmlu
aGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbgpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBkZXBlbmQgb24gbG9jYWxlLgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIGh5cGhlbk1pbnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAxKSk7CiAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuU3Ry
aW5nLCAoJmh5cGhlbiwgMSkpOwotICAgIHJldHVybiBmb250KCkucHJpbWFyeUZvbnREYXRhKCku
Z2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1pbnVzU3Ry
aW5nOworICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdseXBoRm9y
Q2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzTWFya1N0cmlu
ZygpIGNvbnN0CkBAIC0xMzQwLDIwICsxMzQwLDIwIEBAIGNvbnN0IEFuaW1hdGlvbiogUmVuZGVy
U3R5bGU6OnRyYW5zaXRpb24KICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgRm9udCYgUmVuZGVy
U3R5bGU6OmZvbnQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQ7IH0KLWNvbnN0IEZv
bnRNZXRyaWNzJiBSZW5kZXJTdHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhl
cml0ZWQtPmZvbnQuZm9udE1ldHJpY3MoKTsgfQotY29uc3QgRm9udERlc2NyaXB0aW9uJiBSZW5k
ZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250
LmZvbnREZXNjcmlwdGlvbigpOyB9Citjb25zdCBGb250Q2FzY2FkZSYgUmVuZGVyU3R5bGU6OmZv
bnRDYXNjYWRlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZTsgfQorY29u
c3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJu
IGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKTsgfQorY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBSZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5o
ZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsgfQogZmxvYXQgUmVuZGVyU3R5
bGU6OnNwZWNpZmllZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
c3BlY2lmaWVkU2l6ZSgpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9Ci1pbnQg
UmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LnBp
eGVsU2l6ZSgpOyB9CitpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4g
aW5oZXJpdGVkLT5mb250Q2FzY2FkZS5waXhlbFNpemUoKTsgfQogCiBjb25zdCBMZW5ndGgmIFJl
bmRlclN0eWxlOjp3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRh
LT53b3JkU3BhY2luZzsgfQotZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpOyB9CitmbG9hdCBSZW5k
ZXJTdHlsZTo6bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENh
c2NhZGUubGV0dGVyU3BhY2luZygpOyB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6OnNldEZvbnREZXNj
cmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIHYpCiB7Ci0gICAgaWYgKGluaGVyaXRlZC0+
Zm9udC5mb250RGVzY3JpcHRpb24oKSAhPSB2KSB7Ci0gICAgICAgIGluaGVyaXRlZC5hY2Nlc3Mo
KS0+Zm9udCA9IEZvbnQodiwgaW5oZXJpdGVkLT5mb250LmxldHRlclNwYWNpbmcoKSwgaW5oZXJp
dGVkLT5mb250LndvcmRTcGFjaW5nKCkpOworICAgIGlmIChpbmhlcml0ZWQtPmZvbnRDYXNjYWRl
LmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKKyAgICAgICAgaW5oZXJpdGVkLmFjY2VzcygpLT5m
b250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKHYsIGluaGVyaXRlZC0+Zm9udENhc2NhZGUubGV0dGVy
U3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLndvcmRTcGFjaW5nKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwNCw3ICsxNDA0
LDcgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIAogICAgICAgICBm
b250V29yZFNwYWNpbmcgPSAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBlcmNlbnQ6Ci0g
ICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQoKSAqIGZvbnQoKS5zcGFjZVdp
ZHRoKCkgLyAxMDA7CisgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQoKSAq
IGZvbnRDYXNjYWRlKCkuc3BhY2VXaWR0aCgpIC8gMTAwOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpeGVkOgogICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2YWx1ZS52YWx1ZSgpOwpAQCAt
MTQxNywxMSArMTQxNywxMSBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhMZW5n
dGggCiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnQuc2V0V29yZFNwYWNpbmcoZm9udFdvcmRTcGFj
aW5nKTsKKyAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNldFdvcmRTcGFjaW5n
KGZvbnRXb3JkU3BhY2luZyk7CiAgICAgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPndvcmRT
cGFjaW5nID0gV1RGOjptb3ZlKHZhbHVlKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6c2V0TGV0
dGVyU3BhY2luZyhmbG9hdCB2KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRMZXR0ZXJT
cGFjaW5nKHYpOyB9Cit2b2lkIFJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYp
IHsgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250Q2FzY2FkZS5zZXRMZXR0ZXJTcGFjaW5nKHYpOyB9
CiAKIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0IHNpemUpCiB7CkBAIC0xNDM0
LDcgKzE0MzQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXplCiAg
ICAgZWxzZQogICAgICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwg
c2l6ZSk7CiAKLSAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBmb250KCku
Zm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9yID0g
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICBGb250RGVzY3JpcHRpb24gZGVzYyhm
b250RGVzY3JpcHRpb24oKSk7CiAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwogICAg
IGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBS
ZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogI2VuZGlmCiAKICAgICBzZXRGb250
RGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgZm9udCgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9y
KTsKKyAgICBmb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKIH0KIAog
dm9pZCBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRv
dywgTGF5b3V0VW5pdCAmdG9wLCBMYXlvdXRVbml0ICZyaWdodCwgTGF5b3V0VW5pdCAmYm90dG9t
LCBMYXlvdXRVbml0ICZsZWZ0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
NyArMTA1LDcgQEAgY2xhc3MgQ29udGVudERhdGE7CiBjbGFzcyBDb3VudGVyQ29udGVudDsKIGNs
YXNzIEN1cnNvckxpc3Q7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xhc3MgRm9udDsKK2Ns
YXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udE1ldHJpY3M7CiBjbGFzcyBJbnRSZWN0OwogY2xh
c3MgTWFza0ltYWdlT3BlcmF0aW9uOwpAQCAtNjg5LDcgKzY4OSw3IEBAIHB1YmxpYzoKICAgICBF
Q2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MuY2xlYXIoKTsg
fQogICAgIEVUYWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVy
aXRlZF9mbGFncy50YWJsZUxheW91dCgpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBG
b250JiBmb250KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udENhc2NhZGUm
IGZvbnRDYXNjYWRlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBmbG9hdCBzcGVjaWZpZWRG
b250U2l6ZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlSW5oZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGlubGluZSBTdHlsZUluaGVyaXRlZERhdGE6OlN0
eWxlSW5oZXJpdGUKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAsIHNwZWNp
ZmllZExpbmVIZWlnaHQoby5zcGVjaWZpZWRMaW5lSGVpZ2h0KQogI2VuZGlmCi0gICAgLCBmb250
KG8uZm9udCkKKyAgICAsIGZvbnRDYXNjYWRlKG8uZm9udENhc2NhZGUpCiAgICAgLCBjb2xvcihv
LmNvbG9yKQogICAgICwgdmlzaXRlZExpbmtDb2xvcihvLnZpc2l0ZWRMaW5rQ29sb3IpCiB7CkBA
IC02Nyw3ICs2Nyw3IEBAIGJvb2wgU3R5bGVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnMK
ICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgJiYgc3BlY2lmaWVkTGlu
ZUhlaWdodCA9PSBvLnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRpZgotICAgICAgICAmJiBmb250
ID09IG8uZm9udAorICAgICAgICAmJiBmb250Q2FzY2FkZSA9PSBvLmZvbnRDYXNjYWRlCiAgICAg
ICAgICYmIGNvbG9yID09IG8uY29sb3IKICAgICAgICAgJiYgdmlzaXRlZExpbmtDb2xvciA9PSBv
LnZpc2l0ZWRMaW5rQ29sb3IKICAgICAgICAgJiYgaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZyA9
PSBvLmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBTdHlsZUluaGVyaXRl
ZERhdGFfaAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Niw3ICs1Niw3IEBA
IHB1YmxpYzoKICAgICBMZW5ndGggc3BlY2lmaWVkTGluZUhlaWdodDsKICNlbmRpZgogCi0gICAg
Rm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZvbnRDYXNjYWRlOwogICAgIENvbG9yIGNvbG9y
OwogICAgIENvbG9yIHZpc2l0ZWRMaW5rQ29sb3I7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDEzICsyMjUsMTMgQEAgdm9pZCBSZW5kZXJT
VkdJbmxpbmVUZXh0Ojp1cGRhdGVTY2FsZWRGbwogICAgIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9y
U3R5bGUoKnRoaXMsIHN0eWxlKCksIG1fc2NhbGluZ0ZhY3RvciwgbV9zY2FsZWRGb250KTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxl
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
ZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQpCit2b2lkIFJlbmRlclNWR0lu
bGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGluZ0ZhY3Rv
ciwgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQpCiB7CiAgICAgLy8gQWx0ZXIgZm9udC1zaXplIHRv
IHRoZSByaWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGluZyB0aGUgZ2x5cGhzIHRo
ZW1zZWx2ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBpcyBzcGVjaWZpZWQKICAg
ICBzY2FsaW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2NyZWVuRm9u
dFNpemVTY2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciA9PSAx
IHx8ICFzY2FsaW5nRmFjdG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRSZW5kZXJp
bmdNb2RlKCkgPT0gR2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAgICAgIHNjYWxpbmdGYWN0b3Ig
PSAxOwotICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udCgpOworICAgICAgICBzY2FsZWRG
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjQwLDcgKzI0MCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWwK
ICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRoZSBjYXNlIHdoZW4gd2Ug
Y29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQpLgogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lm
aWVkU2l6ZUZvclNWR0lubGluZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3RvciwgcmVuZGVyZXIu
ZG9jdW1lbnQoKSkpOwogCi0gICAgc2NhbGVkRm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAw
LCAwKTsKKyAgICBzY2FsZWRGb250ID0gRm9udENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAw
KTsKICAgICBzY2FsZWRGb250LnVwZGF0ZShyZW5kZXJlci5kb2N1bWVudCgpLmVuc3VyZVN0eWxl
UmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBSZW5kZXJTVkdJbmxp
bmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBA
IC00MSw5ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbGF5
b3V0QXR0cmlidXRlcygpIHsgcmV0dXJuICZtX2xheW91dEF0dHJpYnV0ZXM7IH0KIAogICAgIGZs
b2F0IHNjYWxpbmdGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxpbmdGYWN0b3I7IH0KLSAg
ICBjb25zdCBGb250JiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9
CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3Nj
YWxlZEZvbnQ7IH0KICAgICB2b2lkIHVwZGF0ZVNjYWxlZEZvbnQoKTsKLSAgICBzdGF0aWMgdm9p
ZCBjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFJlbmRlclN0eWxlJiwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQpOwor
ICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udENh
c2NhZGUmIHNjYWxlZEZvbnQpOwogCiAgICAgLy8gUHJlc2VydmVzIGZsb2F0aW5nIHBvaW50IHBy
ZWNpc2lvbiBmb3IgdGhlIHVzZSBpbiBEUlQuIEl0IGtub3dzIGhvdyB0byByb3VuZCBhbmQgZG9l
cyBhIGJldHRlciBqb2IgdGhhbiBlbmNsb3NpbmdJbnRSZWN0LgogICAgIEZsb2F0UmVjdCBmbG9h
dExpbmVzQm91bmRpbmdCb3goKSBjb25zdDsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBjcmVhdGVUZXh0Qm94KCkg
b3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX3NjYWxpbmdGYWN0b3I7Ci0gICAgRm9udCBtX3NjYWxl
ZEZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9zY2FsZWRGb250OwogICAgIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzIG1fbGF5b3V0QXR0cmlidXRlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25SZWMKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVyZXIo
KS5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAgY29u
c3QgRm9udCYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7CiAgICAg
Y29uc3QgRm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250TWV0
cmljcygpOwogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55
KTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKQpAQCAtMTcyLDcgKzE3Miw3IEBAIExheW91
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKIAogc3RhdGljIGlubGluZSBib29s
IHRleHRTaG91bGRCZVBhaW50ZWQoY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dFJlbmRl
cmVyKQogewotICAgIC8vIEZvbnQ6OnBpeGVsU2l6ZSgpLCByZXR1cm5zIEZvbnREZXNjcmlwdGlv
bjo6Y29tcHV0ZWRQaXhlbFNpemUoKSwgd2hpY2ggcmV0dXJucyAiaW50KHggKyAwLjUpIi4KKyAg
ICAvLyBGb250Q2FzY2FkZTo6cGl4ZWxTaXplKCksIHJldHVybnMgRm9udERlc2NyaXB0aW9uOjpj
b21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5zICJpbnQoeCArIDAuNSkiLgogICAgIC8v
IElmIHRoZSBhYnNvbHV0ZSBmb250IHNpemUgb24gc2NyZWVuIGlzIGJlbG93IHg9MC41LCBkb24n
dCByZW5kZXIgYW55dGhpbmcuCiAgICAgcmV0dXJuIHRleHRSZW5kZXJlci5zY2FsZWRGb250KCku
cGl4ZWxTaXplKCk7CiB9CkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0
Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAg
ICAgICAgICAgICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlz
dWFsT3JkZXIgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUtPmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRS
ZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVy
ZXIoKSkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC00NzUsNyArNDc1
LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBwb3NpdGlvbk9mZnNldEZvckRlYwogICAgIHJldHVy
biAwLjBmOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IHRoaWNrbmVzc0ZvckRlY29yYXRpb24o
VGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMgaW5saW5lIGZsb2F0IHRo
aWNrbmVzc0ZvckRlY29yYXRpb24oVGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KQogewogICAgIC8vIEZJWE1FOiBGb3IgU1ZHIEZvbnRzIHdlIG5lZWQgdG8gdXNlIHRoZSBh
dHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIDxmb250LWZhY2U+IGlmIHNwZWNpZmllZC4KICAgICAv
LyBDb21wYXRpYmxlIHdpdGggQmF0aWsvT3BlcmEKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgUmVuZGVyU3R5bGUmIGRlY29y
YXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxvYXQgc2Nh
bGluZ0ZhY3RvciA9IDE7Ci0gICAgRm9udCBzY2FsZWRGb250OworICAgIEZvbnRDYXNjYWRlIHNj
YWxlZEZvbnQ7CiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRG
b3JTdHlsZShkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSwgc2NhbGluZ0ZhY3Rv
ciwgc2NhbGVkRm9udCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkBAIC01NzAsNyAr
NTcwLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZAogICAgIGZs
b2F0IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NF
UlQoc2NhbGluZ0ZhY3Rvcik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVuZGVy
ZXIoKS5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSBy
ZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBz
dHlsZS0+dGV4dFNoYWRvdygpOwogCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50
LngsIGZyYWdtZW50LnkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlv
dXRUZXh0T25MaQogCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3
KHRleHQtPnRleHQoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlLT5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS0+
Zm9udENhc2NhZGUoKTsKIAogICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIHNwYWNpbmdM
YXlvdXQoZm9udCk7CiAgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lIGJhc2VsaW5lTGF5
b3V0KGZvbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgiCiAKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUo
Y29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6U1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIDogbV9mb250
KGZvbnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2Vs
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBSZW5kZXJPYmpl
Y3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CkBAIC0zNSw3ICsz
NSw3IEBAIGNsYXNzIFNWR1RleHRNZXRyaWNzOwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZUJh
c2VsaW5lIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUpOwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZShjb25zdCBG
b250Jik7CisgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNjYWRl
Jik7CiAKICAgICBmbG9hdCBjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KGNvbnN0IFNWR1JlbmRlclN0
eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCkgY29uc3Q7CiAgICAgZmxvYXQgY2FsY3Vs
YXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3Q7CkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVUb0FsaWdu
bWVudEJhc2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4
dFJlbmRlcmVyKSBjb25zdDsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBG
b250Q2FzY2FkZSYgbV9mb250OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRl
ICJTVkdSZW5kZXJTdHlsZS5oIgogCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nKGNvbnN0IEZvbnQmIGZvbnQpCitTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgOiBt
X2ZvbnQoZm9udCkKICAgICAsIG1fbGFzdENoYXJhY3RlcigwKQogewpAQCAtOTgsNyArOTgsNyBA
QCBmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsCiAKICAgICBmbG9hdCBz
cGFjaW5nID0gbV9mb250LmxldHRlclNwYWNpbmcoKSArIGtlcm5pbmc7CiAgICAgaWYgKGN1cnJl
bnRDaGFyYWN0ZXIgJiYgbGFzdENoYXJhY3RlciAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgewot
ICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSAmJiAhRm9u
dDo6dHJlYXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKEZvbnRDYXNjYWRl
Ojp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYmICFGb250Q2FzY2FkZTo6dHJlYXRB
c1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKICAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9mb250Lndv
cmRTcGFjaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBTVkdS
ZW5kZXJTdHlsZTsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKQEAgLTMyLDEzICszMiwxMyBAQCBjbGFz
cyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKTsKIHB1YmxpYzoK
LSAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Jik7CisgICAgU1ZHVGV4
dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZsb2F0IGNh
bGN1bGF0ZVNWR0tlcm5pbmcoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHVGV4dE1ldHJp
Y3M6OkdseXBoJiBjdXJyZW50R2x5cGgpOwogICAgIGZsb2F0IGNhbGN1bGF0ZUNTU0tlcm5pbmdB
bmRTcGFjaW5nKGNvbnN0IFNWR1JlbmRlclN0eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4
dCwgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiBwcml2YXRlOgotICAgIGNvbnN0
IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGNvbnN0
IFVDaGFyKiBtX2xhc3RDaGFyYWN0ZXI7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1l
dHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFNWR1RleHRNZXRyaWNz
OjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkcKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gdGV4
dFJlbmRlcmVyLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAK
LSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVyLnNjYWxlZEZvbnQoKTsK
KyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCA9IHRleHRSZW5kZXJlci5zY2FsZWRG
b250KCk7CiAgICAgaW50IGxlbmd0aCA9IDA7CiAKICAgICAvLyBDYWxjdWxhdGUgd2lkdGgvaGVp
Z2h0IHVzaW5nIHRoZSBzY2FsZWQgZm9udCwgZGl2aWRlIHRoaXMgcmVzdWx0IGJ5IHRoZSBzY2Fs
aW5nRmFjdG9yIGFmdGVyd2FyZHMuCkBAIC03MCw3ICs3MCw3IEBAIFRleHRSdW4gU1ZHVGV4dE1l
dHJpY3M6OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAgICAgICAgICAsIHN0eWxlLmRpcmVjdGlv
bigpCiAgICAgICAgICAgICAgICAgLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpIC8q
IGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRl
eHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICBydW4u
ZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkxLDcgKzkxLDcgQEAgU1ZHVGV4dE1ldHJpY3Mg
U1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJp
Y3MoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVk
IGxlbmd0aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lKQogewotICAgIGJv
b2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5p
c1NWR0ZvbnQoKTsKKyAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOwogICAgIGZsb2F0IHNjYWxpbmdG
YWN0b3IgPSB0ZXh0LnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRNZXRyaWNzQnVpbGRlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDkgKzEwMCw5IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjppbml0aWFsaXpl
TWUKICAgICBtX2NvbXBsZXhTdGFydFRvQ3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmljcygp
OwogICAgIG1fdG90YWxXaWR0aCA9IDA7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0g
dGV4dC5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSB0
ZXh0LnNjYWxlZEZvbnQoKTsKICAgICBtX3J1biA9IFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRleHQpOwotICAgIG1faXNDb21wbGV4VGV4dCA9IHNjYWxlZEZvbnQuY29kZVBhdGgo
bV9ydW4pID09IEZvbnQ6OkNvbXBsZXg7CisgICAgbV9pc0NvbXBsZXhUZXh0ID0gc2NhbGVkRm9u
dC5jb2RlUGF0aChtX3J1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAKICAgICBpZiAobV9p
c0NvbXBsZXhUZXh0KQogICAgICAgICBtX3NpbXBsZVdpZHRoSXRlcmF0b3IgPSBudWxscHRyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERh
dGEqIHN2Z0ZvbnQKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKLWZsb2F0IFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBo
TmFtZSkgY29uc3QKK2Zsb2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRo
VXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4s
IGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAgICAgV2lk
dGhJdGVyYXRvciBpdCgmZm9udCwgcnVuKTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3
U1ZHCiAgICAgfQogfQogCi1zdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29u
c3QgRm9udCYgZm9udCkKK3N0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb25z
dCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFy
eUZvbnREYXRhID0gZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAoIXByaW1hcnlGb250
RGF0YS5pc1NWR0ZvbnQoKSkKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIG1p
c3NpbmdHbHlwaEZvckZvbnQoY29uCiAgICAgcmV0dXJuIEdseXBoRGF0YShmb250RWxlbWVudC0+
bWlzc2luZ0dseXBoKCksICZwcmltYXJ5Rm9udERhdGEpOwogfQogCi1HbHlwaERhdGEgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiBm
b250LCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWly
cm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmlu
ZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKQorR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJy
b3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5n
JiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCiB7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0
YSA9IGZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRvVmFy
aWFudCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCkBAIC0zNDIsNyArMzQyLDcgQEAgR2x5
cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogICAgIC8vIFRoZSBiZWhhdmlv
ciBkb2VzIG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZC4gRm9yIHNpbXBsaWNpdHkgd2UgZG9uJ3Qg
dHJ5IHRvIHJlc29sdmUgZm9udCBmYWxsYmFja3MgY29udGV4dC1zZW5zaXRpdmVseS4KICAgICBG
b250RGVzY3JpcHRpb24gZmFsbGJhY2tEZXNjcmlwdGlvbiA9IGZvbnQuZm9udERlc2NyaXB0aW9u
KCk7CiAgICAgZmFsbGJhY2tEZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhWZWN0b3I8QXRvbWljU3Ry
aW5nPiB7IHNhbnNTZXJpZkZhbWlseSB9KTsKLSAgICBGb250IGZhbGxiYWNrRm9udChmYWxsYmFj
a0Rlc2NyaXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygpKTsK
KyAgICBGb250Q2FzY2FkZSBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlvbiwgZm9udC5s
ZXR0ZXJTcGFjaW5nKCksIGZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgZmFsbGJhY2tGb250LnVw
ZGF0ZShmb250LmZvbnRTZWxlY3RvcigpKTsKIAogICAgIHJldHVybiBmYWxsYmFja0ZvbnQuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRvVmFyaWFudCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHRfaAog
I2RlZmluZSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dF9oCiAKLSNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQyLDkgKzQyLDkgQEAgcHVibGljOgogICAgIFJlbmRlclNWR1Jl
c291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQ
YWludGluZ1Jlc291cmNlOyB9CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJl
bmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2Jq
ZWN0OyB9CiAKLSAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29u
c3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3Is
IGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBu
b3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0
b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVy
LCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5n
Q2FjaGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQg
ZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0
UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlw
aE5hbWUpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmco
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQg
ZnJvbSkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eFN0eWxlLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgog
CkBAIC04OSw3ICs4OSw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0
aW8KICAgICBmbG9hdCB3YXZ5T2Zmc2V0OwogICAgICAgICAKICAgICBUZXh0RGVjb3JhdGlvblN0
eWxlIGRlY29yYXRpb25TdHlsZSA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlKCk7Ci0g
ICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmZsb2F0SGVp
Z2h0KCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKS5mbG9hdEhlaWdodCgpOwogICAgIEdseXBoT3ZlcmZsb3cgb3ZlcmZsb3dSZXN1bHQ7
CiAgICAgCiAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlV2F2
eSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIElubGluZVRleHRC
b3hTdHlsZV9oCiAjZGVmaW5lIElubGluZVRleHRCb3hTdHlsZV9oCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNiw3ICsxMTYsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVudChj
b25zCiAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKIAogICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gZG9jdW1lbnQu
c3R5bGVSZXNvbHZlcklmRXhpc3RzKCkgPyBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMo
KS0+Zm9udFNlbGVjdG9yKCkgOiBudWxscHRyOwotICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9u
dCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udENh
c2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKIAogICAgIHJldHVybiBkb2N1bWVudFN0eWxl
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCByZXNvbHZlVHJlZShE
b2N1bWVudCYgZG9jdW1lbnQsIENoYQogICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0g
ZG9jdW1lbnQuc2V0dGluZ3MoKSkgewogICAgICAgICAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwogICAgICAgICAgICAg
aWYgKHNldHRpbmdzLT5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSAmJiBzdHlsZVJl
c29sdmVyKQotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0
ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2Vs
ZWN0b3IoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3VtZW50Q2hh
bmdlID0gZGV0ZXJtaW5lQ2hhbmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRl
clZpZXcoKS0+c3R5bGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MCw5ICsyODAsOSBAQCB2b2lkIGNvbXB1dGVOb3JtYWxpemVkU3Bh
Y2VzKGNvbnN0IFRleHRSCiAgICAgaWYgKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZS5sZW5n
dGgoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAocnVuLmlzOEJpdCgpKQotICAgICAgICBub3JtYWxpemVk
U3BhY2VzU3RyaW5nQ2FjaGUgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnM4
KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3BhY2VzU3Ry
aW5nQ2FjaGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzOCgp
LCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBlbHNlCi0gICAgICAgIG5vcm1hbGl6ZWRT
cGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVyczE2
KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3BhY2VzU3Ry
aW5nQ2FjaGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzMTYo
KSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CiAgICAgaWYgKG1pcnJvcikKICAgICAgICAgbm9y
bWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gY3JlYXRlU3RyaW5nV2l0aE1pcnJvcmVkQ2hhcmFj
dGVycyhub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNW
R0dseXBoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hLZXJuRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVk
ZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZVNyY0VsZW1lbnQuaCIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2Fj
aGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0dDQ29udHJvbGxlci5oPgpAQCAtNDYzLDEyICs0NjMsMTIgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldEFsd2F5
c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxleFRleHQpCiB7Ci0g
ICAgV2ViQ29yZTo6Rm9udDo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQgPyBXZWJD
b3JlOjpGb250OjpDb21wbGV4IDogV2ViQ29yZTo6Rm9udDo6QXV0byk7CisgICAgV2ViQ29yZTo6
Rm9udENhc2NhZGU6OnNldENvZGVQYXRoKGFsd2F5c1VzZUNvbXBsZXhUZXh0ID8gV2ViQ29yZTo6
Rm9udENhc2NhZGU6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250Q2FzY2FkZTo6QXV0byk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzczo6c2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVzZUZvbnRT
bW9vdGhpbmcpCiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKHVz
ZUZvbnRTbW9vdGhpbmcpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRTaG91bGRVc2VT
bW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6dXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDcgKzgwMiw3IEBAIEVkaXRv
clN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKICAgICBpZiAoIXNlbGVjdGlvbi5p
c05vbmUoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIGlmIChSZW5k
ZXJTdHlsZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1lLCBu
b2RlVG9SZW1vdmUpKSB7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgICAgICAgICBDVEZvbnRSZWYg
Zm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgp
OwogICAgICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gZm9udCA/IENURm9u
dEdldFN5bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQVhPYmpl
Y3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRmlsZVN5c3RlbS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3Mu
aD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmg+CkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBXZWJQcm9jZXNz
OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgogICAgIG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQ
b3J0ID0gV1RGOjptb3ZlKHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQpOwog
ICAgIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBwYXJhbWV0ZXJzLnByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkOwogICAgIG1fc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uID0gcGFy
YW1ldGVycy5zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb247Ci0gICAgRm9udDo6c2V0
RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFibGVLZXJuaW5n
QW5kTGlnYXR1cmVzQnlEZWZhdWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOworICAgIEZv
bnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNob3Vs
ZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1cmVz
IDogMCk7CiAKICAgICBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OlJlbGllZkxvZ2dlcjo6c2V0TG9n
Z2luZ0VuYWJsZWQocGFyYW1ldGVycy5zaG91bGRFbmFibGVNZW1vcnlQcmVzc3VyZVJlbGllZkxv
Z2dpbmcpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0
cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJp
bmdFeHRyYXMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViS2l0TlNTdHJpbmdFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAKICNpbXBvcnQgPFdlYkNvcmUvQ29y
ZUdyYXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TU3Ry
aW5nRXh0cmFzLmg+CkBAIC05Miw3ICs5Miw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQb2ludDoo
TlNQb2ludClwb2ludCAKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAgICAgICAgQ0dDb250
ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9u
dChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBp
c0RyYXdpbmdUb1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3RoaW5n
IDogQW50aWFsaWFzZWQpOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxh
dGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdU
b1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3RoaW5nIDogQW50aWFs
aWFzZWQpOwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAg
ICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIC0g
KGZsb2F0KV93ZWJfd2lkdGhXaXRoRm9udDooTlNGb250ICopZm8KICAgICBbc2VsZiBnZXRDaGFy
YWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZm
ZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRm
b3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdl
YkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAg
ICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBydW4uZGlz
YWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICAgICAgcmV0dXJuIHdlYkNvcmVGb250LndpZHRoKHJ1
bik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5t
bQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTdHJpbmdU
cnVuY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDIxICsyOSwyMSBAQAogI2ltcG9ydCAi
V2ViU3RyaW5nVHJ1bmNhdG9yLmgiCiAKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgot
I2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRQbGF0Zm9ybURhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUv
U3RyaW5nVHJ1bmNhdG9yLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
aD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KIAotc3RhdGljIFdlYkNvcmU6OkZvbnQmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9u
dCkKK3N0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpm
b250KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNGb250Pj4gY3Vy
cmVudE5TRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29yZTo6Rm9udD4gY3Vy
cmVudEZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OkZvbnRDYXNjYWRl
PiBjdXJyZW50Rm9udDsKICAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50TlNGb250LmdldCgp
LmdldCgpXSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRGb250OwogICAgIGN1cnJlbnROU0ZvbnQu
Z2V0KCkgPSBmb250OwotICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9udChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICBjdXJy
ZW50Rm9udC5nZXQoKSA9IFdlYkNvcmU6OkZvbnRDYXNjYWRlKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJl
bnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50Rm9udDsK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBA
IHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAKICAgICAgICAgUG9wdXBNZW51U3R5bGUg
c3R5bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udCgpKSB7Cisg
ICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewogICAgICAgICAgICAg
TlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXpl
ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTQ5MCw3ICsxNDkwLDcgQEAgLSAoQk9PTClfdmlld0NsYXNzOihDbGFzcyAqKXZDbGFzcyBh
bmRSZQogCiArICh2b2lkKV9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDooQk9PTClm
CiB7Ci0gICAgRm9udDo6c2V0Q29kZVBhdGgoZiA/IEZvbnQ6OkNvbXBsZXggOiBGb250OjpBdXRv
KTsKKyAgICBGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoZiA/IEZvbnRDYXNjYWRlOjpDb21wbGV4
IDogRm9udENhc2NhZGU6OkF1dG8pOwogfQogCiArICh2b2lkKV9zZXRBbGxvd3NSb3VuZGluZ0hh
Y2tzOihCT09MKWFsbG93c1JvdW5kaW5nSGFja3MKQEAgLTMxNjgsMTIgKzMxNjgsMTIgQEAgLSAo
Qk9PTClfZGFzaGJvYXJkQmVoYXZpb3I6KFdlYkRhc2hib2FyZAogCiArICh2b2lkKV9zZXRTaG91
bGRVc2VGb250U21vb3RoaW5nOihCT09MKWYKIHsKLSAgICBGb250OjpzZXRTaG91bGRVc2VTbW9v
dGhpbmcoZik7CisgICAgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhmKTsKIH0K
IAogKyAoQk9PTClfc2hvdWxkVXNlRm9udFNtb290aGluZwogewotICAgIHJldHVybiBGb250Ojpz
aG91bGRVc2VTbW9vdGhpbmcoKTsKKyAgICByZXR1cm4gRm9udENhc2NhZGU6OnNob3VsZFVzZVNt
b290aGluZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQ3MTAsNyArNDcxMCw3IEBA
ICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXTsKICNlbmRpZgogCi0gICAg
Rm9udDo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xGb3JLZXk6
V2ViS2l0S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tleV0gPyBL
ZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdh
dHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0dXJlcyA6
IDApOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBhdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bkVuYWJsZWQgPSBbc2VsZiBfc2hvdWxkQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25CZUVuYWJs
ZWRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244687</attachid>
            <date>2015-01-15 04:03:01 -0800</date>
            <delta_ts>2015-01-15 05:39:57 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-8.patch</filename>
            <type>text/plain</type>
            <size>418809</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZv
bnQoKS5maXJzdEZhbWlseSgpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQo
OCkgPT0gIi13ZWJraXQtIikKICAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFt
ZS5zdWJzdHJpbmcoOCk7CiAKICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1F
KSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpbnQgZm9udFdlaWdodCA9
IC0xOwotICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIHN3aXRjaCAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6
CiAgICAgICAgIGZvbnRXZWlnaHQgPSAxMDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKIAogICAgIHJl
c3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfVU5ERVJMSU5FKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
ICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpID8gInNpbmdsZSIgOiAibm9uZSIpOwogCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAi
aXRhbGljIiA6ICJub3JtYWwiKTsKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwg
c3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3JtYWwiKTsKIAog
ICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmli
dXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERl
Y29yYXRpb24oKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpID8gInRydWUiIDogImZhbHNl
Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgogI2ltcG9ydCAiQ2hyb21l
LmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpAQCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8K
LSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3Ig
PSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4
dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1w
b3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgi
CiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRN
TEFuY2hvckVsZW1lbnQuaCIKQEAgLTg0OCw3ICs4NDgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCBy
YW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNz
aWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNvbG9y
cwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRyYWdJbWFnZS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAi
SFRNTE5hbWVzLmgiCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBh
dXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAj
ZWxzZQogLSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVm
KV9mb250CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
cmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJGbG9hdFBvaW50Lmgi
Ci0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKQEAgLTcxLDcgKzcxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiB1c2luZyBXZWJDb3JlOjpGbG9hdFBvaW50OwotdXNpbmcgV2ViQ29yZTo6Rm9udDsKK3VzaW5n
IFdlYkNvcmU6OkZvbnRDYXNjYWRlOwogdXNpbmcgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Owog
dXNpbmcgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTA0LDggKzE1MDQsOCBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChD
CiBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNl
cGFyYXRlZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+Zm9udCgpLmZh
bWlseUNvdW50KCk7ICsraSkKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQodmFsdWVGb3JGYW1p
bHkoc3R5bGUtPmZvbnQoKS5mYW1pbHlBdChpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+Zm9udENhc2NhZGUoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWls
eUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKQEAgLTI1NDUsNyArMjU0NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWMKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdvcmRCcmVhazoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29y
ZFNwYWNpbmc6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHls
ZS0+Zm9udCgpLndvcmRTcGFjaW5nKCksIHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5n
KCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgogICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1dyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
aXIuaCIKICNpbmNsdWRlICJSR0JDb2xvci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVy
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZjxMb2FkRm9udENhbGxiYWNrPihuZXcgTG9hZEZvbnRDYWxsYmFjayhu
dW1Mb2FkaW5nLCBmb250TG9hZGVyLCBsb2FkQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNrPiBjcmVhdGVGcm9t
UGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYgZm9udExvYWRlciwg
Y29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNr
PiBjcmVhdGVGcm9tUGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYg
Zm9udExvYWRlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBvbnN1Y2Nlc3M7CiAgICAgICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+
IG9uZXJyb3I7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBGb250TG9hZGVyOjpsb2FkRm9udChj
b25zdCBEaWN0aW9uYQogICAgIFN0cmluZyBmb250U3RyaW5nOwogICAgIGlmICghcGFyYW1zLmdl
dCgiZm9udCIsIGZvbnRTdHJpbmcpKQogICAgICAgICByZXR1cm47Ci0gICAgRm9udCBmb250Owor
ICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJp
bmcsIGZvbnQpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+
IGNhbGxiYWNrID0gTG9hZEZvbnRDYWxsYmFjazo6Y3JlYXRlRnJvbVBhcmFtcyhwYXJhbXMsICp0
aGlzLCBmb250KTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250
KGNvbnN0IERpY3Rpb25hCiBib29sIEZvbnRMb2FkZXI6OmNoZWNrRm9udChjb25zdCBTdHJpbmcm
IGZvbnRTdHJpbmcsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzZWNvbmQg
cGFyYW1ldGVyICh0ZXh0KSBpcyBpZ25vcmVkLgotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZvbnRTdHlsZShmb250U3RyaW5nLCBmb250KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250
LmZhbWlseUNvdW50KCk7IGkrKykgewpAQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSgKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShpZCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoaWQp
LmdldCgpKTsKIH0KIAotYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0
cmluZyYgZm9udFN0cmluZywgRm9udCYgZm9udCkKK2Jvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZv
bnRTdHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnRDYXNjYWRlJiBmb250KQogewog
ICAgIC8vIEludGVycHJldCBmb250U3RyaW5nIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2ZvbnQn
IGF0dHJpYnV0ZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuCiAgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9u
dFN0eWxlKGNvbnN0IAogCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZWZhdWx0Rm9u
dERlc2NyaXB0aW9uKTsKIAotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlLT5mb250KCku
Zm9udFNlbGVjdG9yKCkpOworICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250
IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMzE5
LDcgKzMxOSw3IEBAIGJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKICAg
ICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoc3R5bGVSZXNvbHZlciwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZSk7
CiAKLSAgICBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmb250ID0gc3R5bGUtPmZvbnRDYXNj
YWRlKCk7CiAgICAgZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2U7CiBjbGFzcyBEaWN0
aW9uYXJ5OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZvbnQ7CitjbGFz
cyBGb250Q2FzY2FkZTsKIGNsYXNzIExvYWRGb250Q2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBl
bmRpbmdFdmVudHNUaW1lckZpcmVkKCkgeyBmaXJlUGVuZGluZ0V2ZW50cygpOyB9CiAgICAgdm9p
ZCBzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2b2lkIGZpcmVQZW5kaW5n
RXZlbnRzKCk7Ci0gICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYsIEZvbnQm
KTsKKyAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udENhc2NhZGUm
KTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVTaGUKIHsKICAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgdGhpcyk7CiAgICAgaWYgKGF1dG8gcmVuZGVyVmlldyA9IGRvY3VtZW50KCku
cmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnQoKS51cGRhdGUo
Zm9udFNlbGVjdG9yKCkpOworICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIAogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdmlld3BvcnRTdHlsZVJlc29sdmVyKCktPnJlc29sdmUoKTsKQEAgLTc0OCw3
ICs3NDgsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAg
ICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewogICAgICAgICAgICAgc19zdHlsZU5v
dFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwogICAgICAg
ICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3Ip
OworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwogICAgICAgICByZXR1cm4gKnNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC0xMDMxLDkgKzEwMzEsOSBAQCBSZWY8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTCiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBh
cmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBz
dHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7
CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBt
X3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgcmV0
dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvclpvb21DaGFuZ2Uo
c3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNo
YW5nZShzdHlsZSk7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwor
ICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgaWYg
KG1fc3RhdGUuZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKCkpCiAgICAgICAgIHN0eWxlLT5zZXRI
YXNWaWV3cG9ydFVuaXRzKHRydWUpOwogICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0yMTg1LDcgKzIxODUsNyBAQCBp
bmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAKICAgICAvLyBDaGluZXNl
IGFuZCBKYXBhbmVzZSBsYWNrIHdvcmQgYm91bmRhcnkgbWFya3MsIGFuZCB0aGVyZSBpcyBubyBj
bGVhciBhZ3JlZW1lbnQgb24gd2hhdCBjb25zdGl0dXRlcwogICAgIC8vIGEgd29yZCwgc28gdHJl
YXQgdGhlIHBvc2l0aW9uIGJlZm9yZSBhbnkgQ0pLIGNoYXJhY3RlciBhcyBhIHdvcmQgc3RhcnQu
Ci0gICAgaWYgKEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woZmlyc3RDaGFyYWN0ZXIpKQor
ICAgIGlmIChGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJjaFN0
YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFbGVtZW50Lmgi
CiAjaW1wb3J0ICJFbGVtZW50VHJhdmVyc2FsLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVy
LmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgpAQCAtMTExNCw3ICsxMTE0LDcgQEAgc3RhdGlj
IFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0YXRpYyBQbGF0Zm9y
bUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdGF0
aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250
ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEwIEBAIE5TQXR0cmlidXRl
ZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5n
bGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChz
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3Vn
aCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
ICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpXSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKICAgICAgICAgICAgIFthdHRy
cy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSFRNTENvbnZlcnRlci5oIgpAQCAtMjEzLDcgKzIxMyw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVz
dWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkgewogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTIz
NSw3ICsyMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAg
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVu
ZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJp
bWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJp
bWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpA
QCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0Zv
clMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAgIGlm
IChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50
LmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAi
RnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKQEAgLTExNSw3ICsxMTUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpm
b250Rm9yU2VsCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9u
dCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUp
CiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9y
U2VsCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhh
dmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQg
PSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9u
dCkgewpAQCAtMTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclMKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0Zv
bnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAo
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkg
JiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xv
cjo6YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDUsNyArMjEwNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihkZWZhdWx0Rm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dCgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBuZXdTdHls
ZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKQEAgLTIxMjIsNyArMjEyMiw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBzdHlsZVJlc29s
dmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogCi0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9yKCkpOwogICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKICAgICBzdHlsZVJlc29sdmVyLmZvbnRT
ZWxlY3RvcigpLT5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcygmbW9kaWZpYWJsZVN0
YXRlKCkpOwpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdUZXh0SQogICAgIGlmIChmaWxsICYmIGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1pl
cm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBhY2Nl
c3NGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBhY2Nlc3NGb250KCk7CiAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwog
CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gdGV4dDsKQEAgLTIzNzIsMTAgKzIzNzIsMTAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKGxvY2F0aW9uLngoKSAtIG1hc2tSZWN0LngoKSwg
bG9jYXRpb24ueSgpIC0gbWFza1JlY3QueSgpKTsKICAgICAgICAgICAgIC8vIFdlIGRyYXcgd2hl
biBmb250V2lkdGggaXMgMCBzbyBjb21wb3NpdGluZyBvcGVyYXRpb25zIChlZywgYSAiY29weSIg
b3ApIHN0aWxsIHdvcmsuCiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoKGZvbnRXaWR0aCA+IDAgPyAod2lkdGggLyBmb250V2lkdGgpIDogMCksIDEpKTsKLSAg
ICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBG
bG9hdFBvaW50KDAsIDApLCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAg
ICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBGbG9h
dFBvaW50KDAsIDApLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUo
LW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250
ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwpAQCAtMjM5OCwxNSArMjM5OCwxNSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAgICBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNv
bXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBs
b2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAg
ICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250OjpVc2VG
YWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRl
eHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7
CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgewotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhdyh0ZXh0UmVjdCk7CiAgICAgfQogfQpAQCAtMjQyNiw3ICsyNDI2LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmluZmxhdGVTdAogICAgIHJlY3QuaW5mbGF0ZShk
ZWx0YSk7CiB9CiAKLWNvbnN0IEZvbnQmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YWNjZXNz
Rm9udCgpCitjb25zdCBGb250Q2FzY2FkZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nl
c3NGb250KCkKIHsKICAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAKICAgICAgICAgU3RyaW5nIG1f
dW5wYXJzZWRGb250OwotICAgICAgICBGb250IG1fZm9udDsKKyAgICAgICAgRm9udENhc2NhZGUg
bV9mb250OwogICAgICAgICBib29sIG1fcmVhbGl6ZWRGb250OwogICAgIH07CiAKQEAgLTMwOCw3
ICszMDgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0
cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCA9
IDAsIGJvb2wgdXNlTWF4V2lkdGggPSBmYWxzZSk7CiAKLSAgICBjb25zdCBGb250JiBhY2Nlc3NG
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGFjY2Vzc0ZvbnQoKTsKIAogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxNZW5jbG9zZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIFN0cmluZyBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OmxvbmdEaXZM
ZWYKICAgICBUZXh0UnVuIHJ1bihjbG9zaW5nQnJhY2UuaW1wbCgpLCBjbG9zaW5nQnJhY2UubGVu
Z3RoKCkpOwogICAgIE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKG5vZGUgJiYg
bm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBwYWRk
aW5nLmFwcGVuZE51bWJlcihmb250LndpZHRoKHJ1bikpOwogICAgICAgICBwYWRkaW5nLmFwcGVu
ZExpdGVyYWwoInB4Iik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEdlbmVyaWNGYW1pbGll
cy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudVN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51U3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBQb3B1cE1lbnVTdHlsZV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBvcHVwTWVudVNpemVNaW5pCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udCYg
Zm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFw
cGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24s
IGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tn
cm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1l
bnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVT
aXplTm9ybWFsKQorICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgdmlz
aWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5n
dGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHRE
aXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBl
ID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVj
dFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKICAg
ICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAgICAsIG1fYmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQpCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2ZvcmVncm91bmRDb2xvcjsgfQogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIGNvbnN0
IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQogICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25lKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25lOyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0QXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7IH0KQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2xvciBtX2ZvcmVncm91bmRDb2xv
cjsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBGb250IG1fZm9udDsKKyAgICBG
b250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgYm9vbCBtX2lzRGlz
cGxheU5vbmU7CiAgICAgYm9vbCBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRy
b2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CkBAIC00Miw3ICs0Miw3IEBAIExlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250
cm9sUGEKICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ1NTIHN5c3RlbSBjb2xvcnMg
YW5kIGZvbnRzCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihUaGVtZUNvbG9yKSBjb25z
dCB7IHJldHVybiBDb2xvcigpOyB9Ci0gICAgdmlydHVhbCBGb250IHN5c3RlbUZvbnQoVGhlbWVG
b250LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCB7IHJldHVybiBGb250KCk7IH0KKyAgICB2aXJ0
dWFsIEZvbnRDYXNjYWRlIHN5c3RlbUZvbnQoVGhlbWVGb250LCBGb250RGVzY3JpcHRpb24mKSBj
b25zdCB7IHJldHVybiBGb250Q2FzY2FkZSgpOyB9CiAgICAgCiAgICAgLy8gSG93IGZhc3QgdGhl
IGNhcmV0IGJsaW5rcyBpbiB0ZXh0IGZpZWxkcy4KICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiAwLjU7IH0KQEAgLTgyLDE3ICs4MiwxNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5bGVzIG9m
IGNvbnRyb2xzLgogICAgIAogICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3VsdCBzaG91
bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IC8qem9vbUZh
Y3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdmly
dHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5m
b250RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9v
bWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBh
bHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIExlbmd0
aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9v
bWVkU2l6ZTsgfQorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9vbWVkU2l6ZTsgfQogICAgIAogICAg
IC8vIFJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29y
ZGluYXRlcy4gIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KICAgICAKICAgICAv
LyBBbGxvd3MgdGhlIHRoZW1lIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIu
Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29u
c3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAgICAgCiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hp
dGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGcmFtZVZp
ZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIGFsbG93IGNvbXBp
bGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBo
YXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBjbGFzcyBkZWZpbml0aW9uCi10ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRM
YXlvdXQqIHB0cikKLXsKLSAgICBXZWJDb3JlOjpGb250OjpkZWxldGVMYXlvdXQocHRyKTsKLX0K
LQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLQotY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFj
a0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLAotICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAg
IDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotfTsKLQotc3RhdGljIGJvb2wgaXNEcmF3
bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gcnVuLnJlbmRl
cmluZ0NvbnRleHQoKTsKLX0KLQotc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiogc2V0OwotICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHNldCA9IG5ldyBIYXNoU2V0
PEF0b21pY1N0cmluZz47Ci0gICAgICAgIHNldC0+YWRkKCJNUyBQR290aGljIik7Ci0gICAgICAg
IFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwg
MHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBzZXQtPmFk
ZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5p
Y29kZU5hbWVNU1BHb3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsK
LSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywg
MHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWlj
U3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1l
TVNQTWluY2hvKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBHb3RoaWMiKTsKLSAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4
MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0
cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNH
b3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIE1pbmNobyIpOwotICAgICAgICBVQ2hh
ciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBF
LCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TTWluY2hvKSkpOwotCi0gICAgICAg
IHNldC0+YWRkKCJNZWlyeW8iKTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9
IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUF9OwotICAgICAgICBzZXQtPmFkZChBdG9t
aWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVN
ZWlyeW8pKSk7Ci0gICAgfQotICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0K
LUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOwotCi1UeXBlc2V0dGluZ0Zl
YXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAo
Q3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLUZvbnQ6OkZvbnQoKQotICAgIDogbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBt
X3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQot
ICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDApCi17Ci19Ci0KLUZvbnQ6OkZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNp
bmcpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKLSAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZk
LmZpcnN0RmFtaWx5KCkpKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlz
IGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0
ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCi0gICAgLCBtX2xldHRlclNwYWNpbmcoMCkKLSAg
ICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFs
c2UpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSkKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50
ZXJGb250KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9v
dGhpbmdNb2RlKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQo
KSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKLSNlbmRpZgotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9y
UGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwg
bV93b3JkU3BhY2luZygwKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERh
dGEuZm9udCgpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250
R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9u
dFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdl
dFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdl
aWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50ZXJGb250KCkpOwotICAgIG1fZ2x5cGhzID0g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxl
Y3Rvci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikK
LSAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQotICAgICwg
bV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCi0gICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9s
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQot
ICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0Zl
YXR1cmVzKCkpCi17Ci19Ci0KLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhl
cikKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwot
ICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7Ci0gICAgbV9sZXR0ZXJTcGFjaW5nID0gb3Ro
ZXIubV9sZXR0ZXJTcGFjaW5nOwotICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNl
dHRpbmdGZWF0dXJlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgRm9udDo6b3BlcmF0
b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3Jp
cHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dv
cmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVyLm1fZ2x5cGhzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDYW4gdGhl
c2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lw
ZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVj
dG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBv
dGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewotICAgIC8vIFRo
aXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2Fj
aGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCi0gICAgRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCAzPiBmYW1pbGllczsKLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKLSAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdz
OwotfTsKLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhz
Q2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQotICAgICAgICA6IGtleShXVEY6Om1v
dmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShnKSkKLSAgICB7IH0KLSAgICBGb250
R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7Ci19OwotCi10
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVF
bnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHNDYWNoZTsKLQotc3RhdGljIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNo
ZUtleSYgYikKLXsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnRE
ZXNjcmlwdGlvbkNhY2hlS2V5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZm9u
dFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24g
IT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250
U2VsZWN0b3JGbGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmZhbWlsaWVz
LnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxp
ZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgp
Ci17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwg
Y2FjaGUsICgpKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgaW52YWxpZGF0ZUZvbnRH
bHlwaHNDYWNoZSgpCi17Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsKLX0KLQotdm9p
ZCBjbGVhcldpZHRoQ2FjaGVzKCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2Fj
aGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIo
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlRm9udEdseXBo
c0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBrZXkuZm9u
dERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRl
c2NyaXB0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKQotICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpKTsKLSAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwotICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwotICAgIGtleS5m
b250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVz
RmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlv
bikgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2go
Y29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA3
PiBoYXNoQ29kZXM7Ci0gICAgaGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtl
eS5mYW1pbGllcy5zaXplKCkpOwotCi0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgaGFzaENvZGVzLnVu
Y2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9ySWQpOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytpKQotICAgICAgICBoYXNoQ29kZXMudW5jaGVj
a2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2go
a2V5LmZhbWlsaWVzW2ldKSA6IDApOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVk
KSk7Ci19Ci0KLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNo
ZSgpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7Ci0gICAgRm9udEdseXBo
c0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsKLSAgICBmb3Ig
KEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgp
Lmhhc09uZVJlZigpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci19Ci0KLXN0YXRp
YyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi17Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9u
dEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkp
OwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7
Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0Nh
Y2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7
Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVu
dHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIG5ld0VudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSks
IEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBSZWY8Rm9udEdseXBocz4g
Z2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVy
OwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1
bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVuZUNvdW50ZXIg
JSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRF
bnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2Fs
IGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJp
ZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5i
ZWdpbigpKTsKLSAgICByZXR1cm4gZ2x5cGhzOwotfQotCi12b2lkIEZvbnQ6OnVwZGF0ZShQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAotewotICAgIG1fZ2x5cGhz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7Ci0gICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tz
bGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKLSAgICBtX3R5cGVzZXR0aW5n
RmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi1mbG9hdCBGb250
OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Ci17Ci0gICAgLy8gRG9u
J3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJl
IGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCi0gICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2Un
IGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFs
bGJhY2sKLSAgICAvLyBmb250KS4KLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8p
OwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8g
RklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVu
cyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAw
MDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3Ro
KCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9
IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICBy
ZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotCi0g
ICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYgKGlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0byA8IDAp
Ci0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
Y29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIGVsc2UKLSAgICAgICAg
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50
LCBmcm9tLCB0byk7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVy
bmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBl
eHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgotICAgICAgICBpZiAo
IWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQotICAgICAgICAgICAgZmFs
bGJhY2tGb250cyA9IDA7Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUg
dGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCi0gICAgICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92
ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKLSAgICAgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVz
ID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgIGJv
b2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRl
clNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hl
KCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBpZiAoY2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkp
Ci0gICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKLQotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Ci0gICAgaWYgKCFmYWxsYmFja0ZvbnRzKQot
ICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKLQotICAgIGZsb2F0
IHJlc3VsdDsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQotICAgICAgICByZXN1
bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBpZiAoY2FjaGVF
bnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICpjYWNoZUVudHJ5ID0g
cmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkKLSAgICAgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSNlbmRp
ZgotCi0gICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5sZW5ndGgoKTsKLSAgICBnbHlwaE5hbWUgPSAi
IjsKLSAgICByZXR1cm4gd2lkdGgocnVuKTsKLX0KLQotR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkgY29uc3QKLXsKLSAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgp
LmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihj
KTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAgICAgIGMgPSB1
cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKLSAg
ICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gdV9jaGFyTWlycm9yKGMpOwotCi0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3Jp
cHRpb24sIHZhcmlhbnQpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxU
ZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBj
b25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KikKLXsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7
Ci0gICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAotICAgICJBcmlhbCBIZWJyZXciLAotICAgICJD
aGFsa2JvYXJkIiwKLSAgICAiQ29jaGluIiwKLSAgICAiQ29yc2l2YSBIZWJyZXciLAotICAgICJD
b3VyaWVyIiwKLSAgICAiRXVwaGVtaWEgVUNBUyIsCi0gICAgIkdlbmV2YSIsCi0gICAgIkdpbGwg
U2FucyIsCi0gICAgIkhlaSIsCi0gICAgIkhlbHZldGljYSIsCi0gICAgIkhvZWZsZXIgVGV4dCIs
Ci0gICAgIkluYWlNYXRoaSIsCi0gICAgIkthaSIsCi0gICAgIkx1Y2lkYSBHcmFuZGUiLAotICAg
ICJNYXJrZXIgRmVsdCIsCi0gICAgIk1vbmFjbyIsCi0gICAgIk1zaHRha2FuIiwKLSAgICAiTmV3
IFBlbmluaW0gTVQiLAotICAgICJPc2FrYSIsCi0gICAgIlJhYW5hbmEiLAotICAgICJTVEhlaXRp
IiwKLSAgICAiU3ltYm9sIiwKLSAgICAiVGltZXMiLAotICAgICJBcHBsZSBCcmFpbGxlIiwKLSAg
ICAiQXBwbGUgTGlHb3RoaWMiLAotICAgICJBcHBsZSBMaVN1bmciLAotICAgICJBcHBsZSBTeW1i
b2xzIiwKLSAgICAiQXBwbGVHb3RoaWMiLAotICAgICJBcHBsZU15dW5nam8iLAotICAgICIjR3Vu
Z1NlbyIsCi0gICAgIiNIZWFkTGluZUEiLAotICAgICIjUENNeXVuZ2pvIiwKLSAgICAiI1BpbEdp
IiwKLX07Ci0KLS8vIEZvciBmb250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9u
J3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBPUy8yIHRhYmxlCi0vLyBmb3IgYXZnQ2hhcldp
ZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRo
ZSBhdmdDaGFyV2lkdGgKLS8vIGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2Vl
bXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAotLy8gYnV0LCBpbiBv
cmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhp
cyBjaGVjayBmb3IKLS8vIGFsbCBwbGF0Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFt
aWx5KCk7Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotICAgIC8vIEludGVybmFsIGZv
bnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFi
bGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOwot
Ci0gICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgewotICAgICAg
ICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21p
Y1N0cmluZz47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQotICAgICAgICAgICAg
Zm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbaV0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOwot
fQotCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdp
ZHRoKSBjb25zdAotewotICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9u
dERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdo
dCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
LXsKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0g
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgcmV0dXJuIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOwot
Ci0gICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVj
dGlvblJlY3QsIGZyb20sIHRvKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKLQotICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0lu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7Ci0gICAgbm9ybWFsaXplZC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3RlcnNbaV0pKTsKLQotICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKLQotdm9pZCBGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3Ro
aW5nOwotfQotCi1ib29sIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCi17Ci0gICAgcmV0dXJu
IHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci19Ci0KLXZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29k
ZVBhdGggcCkKLXsKLSAgICBzX2NvZGVQYXRoID0gcDsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9u
dDo6Y29kZVBhdGgoKQotewotICAgIHJldHVybiBzX2NvZGVQYXRoOwotfQotCi12b2lkIEZvbnQ6
OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcykKLXsKLSAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlw
ZXNldHRpbmdGZWF0dXJlczsKLX0KLQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlcygpCi17Ci0gICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXM7Ci19Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRS
dW4mIHJ1bikgY29uc3QKLXsKLSAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQotICAgICAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICByZXR1cm4gU2ltcGxlOwotI2VuZGlmCi0KLSAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3Jp
cHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBDb21w
bGV4OwotICAgIAotICAgIGlmIChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMpKQotICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQotICAgICAgICBy
ZXR1cm4gU2ltcGxlOwotCi0gICAgaWYgKHJ1bi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFNp
bXBsZTsKLQotICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRp
bmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCi0gICAgcmV0
dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3Ro
KCkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRo
YXQgd2UgCi0gICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5
L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIG5vdCAnY29tYmluaW5n
JywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KLSAgICAvLyBBbHRl
cm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBz
b3J0ZWQKLSAgICAvLyBsaXN0IG9mIHJhbmdlcy4KLSAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1w
bGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBV
KzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxldHRlcnMpICAK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDJFOSkgCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAg
dGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzNkYpCi0gICAgICAgICAgICByZXR1cm4gQ29t
cGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkx
IHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywg
SGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1a2hhCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJp
YywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAotICAgICAgICAvLyBE
ZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVs
dWd1LCBLYW5uYWRhLCAKLSAgICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8s
IFRpYmV0YW4sIE15YW5tYXIKLSAgICAgICAgaWYgKGMgPCAweDA2MDApIAotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTA5RikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAo
b25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3Nl
OwotICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1
bHQgb2Ygc3RlcCBBKQotICAgICAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDExRkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICBpZiAoYyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0
aGlvcGljIGNvbWJpbmluZyBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChjIDw9IDB4MTM1RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlm
IChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywg
QnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xpYW4KLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE4QUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChV
bmljb2RlIDQuMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDE5
NEYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTk4
MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5ldyBUYWkgTHVlCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOURGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBC
dWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRpYwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MUNGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3Vn
aCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxREZGKQotICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMg
d2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKLSAgICAgICAgaWYgKGMgPD0g
MHgyMDAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAweDIw
RDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDIwRkYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VG
IHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgyQ0YxKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAy
RiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDMwMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJp
bmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHhBNjdEKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFy
ayBmb3IgQmFtdW0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEE2
RjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgIC8vIFUrQTgwMCB0aHJv
dWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5k
ZWQsCi0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRl
bmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAotICAgICAgICBpZiAoYyA8IDB4QTgwMCkg
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQotICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdC
MCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBFeHQuIEIKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9n
YXRlCi0KLSAgICAgICAgICAgIGlmIChpID09IGxlbiAtIDEpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysraV07Ci0gICAg
ICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgVUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFs
IEluZGljYXRvciBTeW1ib2xzCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweDFGMUZGKQotICAgICAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3Rl
ciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9u
IHNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAxRUYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzEx
MDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3Jp
cHRzCi0gICAgICAgICAgICAvLyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KLQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAw
IHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4RkUwRikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZF
MkYgQ29tYmluaW5nIGhhbGYgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoYyA8PSAweEZFMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMp
Ci17Ci0gICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCi0gICAg
aWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgotICAgIGlmIChj
ID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRTgwICYmIGMg
PD0gMHgyRUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBLYW5neGkgUmFk
aWNhbHMuCi0gICAgaWYgKGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgU3Ryb2tlcy4KLSAgICBpZiAoYyA+PSAweDMxQzAg
JiYgYyA8PSAweDMxRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCi0gICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhG
QUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVv
Z3JhcGhzIEV4dGVuc2lvbiBCLgotICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRl
b2dyYXBocyBFeHRlbnNpb24gQy4KLSAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjcz
RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dy
YXBocyBFeHRlbnNpb24gRC4KLSAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRl
b2dyYXBocyBTdXBwbGVtZW50LgotICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKLXsKLSAgICAvLyAweDJDNyBD
YXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQotICAgIC8vIDB4MkNBIE1vZGlmaWVyIExl
dHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKLSAgICAvLyAweDJD
QiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25l
IAotICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKLSAg
ICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMg
PT0gMHgyRDkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIwMjAp
IHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChj
ID09IDB4MjAzQykKLSAgICAgICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8
IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEpCi0gICAgICAg
IHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChj
ID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQotICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8
IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09
IDB4MjEyMSkKLSAgICAgICAgfHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChj
ID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1QSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdC
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09
IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNC
RSkgfHwgKGMgPT0gMHgyM0JGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+
PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAweDI0OTIpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgyNDlDICYmIGMgPD0gMHgyNEZGKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0g
MHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChjID09IDB4MjVBQikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9
PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1
QkMpIHx8IChjID09IDB4MjVCRCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlm
ICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9
PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1
Q0MpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9
IDB4MjVEMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI1RTIgJiYg
YyA8PSAweDI1RTYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyNUVG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4
MjYwMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAo
YyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAw
eDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkg
fHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMg
PT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID09IDB4MkIxQSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgotICAgIGlm
IChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgot
ICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgzMDMwKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0gMHgzMDNGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhpcmFnYW5hCi0gICAgaWYgKGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEthdGFrYW5hIAotICAgIGlmIChjID49
IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBC
b3BvbW9mbwotICAgIGlmIChjID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKLSAgICBpZiAoYyA+PSAw
eDMxQTAgJiYgYyA8PSAweDMxQkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotIAotICAgIC8vIEVu
Y2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCi0gICAgaWYgKGMgPj0gMHgzMjAwICYmIGMg
PD0gMHgzMkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0
aWJpbGl0eS4KLSAgICBpZiAoYyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLgotICAgIGlm
IChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwg
KGMgPT0gMHhGRTE5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHhG
RjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGgg
Rm9ybXMKLSAgICAvLyBVc3VhbGx5IG9ubHkgdXNlZCBpbiBDSksKLSAgICBpZiAoYyA+PSAweEZG
MDAgJiYgYyA8PSAweEZGRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW1vamku
Ci0gICAgaWYgKGMgPT0gMHgxRjEwMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgxRjE0OSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7Ci19Ci0K
LXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAg
IGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
XSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bikKLXsKLSAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7
Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0
ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4
cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAt
IDFdOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFy
YWN0ZXJzW2kgLSAyXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9n
cmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIGlmIChzdHJpbmdWaWV3LmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0
cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBp
c0FmdGVyRXhwYW5zaW9uKTsKLSAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRp
cmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9H
Q19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9y
IGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBO
b3ZlbWJlciAyMDEwLgotICAgIGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVn
ZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90Ci0gICAg
ICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJz
eWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGb250Ojpp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1f
Z2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwotfQotICAgIAotR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgp
Ci17Ci0gICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2
ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNp
cmFibGUgcmVuZGVyaW5ncywKLSAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksg
Y2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KLSAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7Ci0KLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0g
R2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGlj
aCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgotICAgICAgICByZXR1cm4gR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7Ci0g
ICAgfQotICAgIAotICAgIGlmICh0ZXh0UnVuLmlzOEJpdCgpKQotICAgICAgICBiYXNlQ2hhcmFj
dGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKLSAgICBlbHNlCi0g
ICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0
ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAKLSAgICAvLyB1X2dldEludFBy
b3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZv
ciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4g
dXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KLSAg
ICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOwot
ICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NV
UFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgot
ICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURf
SURFT0dSQVBIU19FWFRFTlNJT05fQToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVP
R1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM6Ci0g
ICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM6Ci0gICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQjoKLSAgICBjYXNlIFVCTE9DS19DSktf
Q09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1NUUk9LRVM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9E
OgotICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6Ci0g
ICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TOgotICAgIGNhc2UgVUJMT0NLX0VOQ0xP
U0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6Ci0g
ICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01PRk86Ci0gICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pB
TU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoKLSAgICBjYXNl
IFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VY
VEVOREVEX0E6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQjoKLSAgICAg
ICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3
T3ZlckdseXBoOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5z
bGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7Ci0gICAgfQotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udF9oCi0j
ZGVmaW5lIEZvbnRfaAotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIlBhdGguaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0KLS8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8gMCBhbmQgY29u
ZmxpY3RzCi0vLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4KLSNpZmRlZiBD
b21wbGV4Ci0jdW5kZWYgQ29tcGxleAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnREYXRhOwotY2xh
c3MgRm9udE1ldHJpY3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgRm9udFNlbGVj
dG9yOwotY2xhc3MgR2x5cGhCdWZmZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBM
YXlvdXRSZWN0OwotY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFRleHRMYXlvdXQ7Ci1jbGFzcyBU
ZXh0UnVuOwotCi1zdHJ1Y3QgR2x5cGhEYXRhOwotCi1zdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7Ci0g
ICAgR2x5cGhPdmVyZmxvdygpCi0gICAgICAgIDogbGVmdCgwKQotICAgICAgICAsIHJpZ2h0KDAp
Ci0gICAgICAgICwgdG9wKDApCi0gICAgICAgICwgYm90dG9tKDApCi0gICAgICAgICwgY29tcHV0
ZUJvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNFbXB0eSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRv
bTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlwaE92ZXJmbG93
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0
KTsKLSAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQpOwotICAgICAg
ICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7Ci0gICAgICAgIGJvdHRvbSA9IHN0ZDo6
bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbGVmdCAh
PSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBvdGhlci50b3Ag
fHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbnQgbGVmdDsKLSAgICBp
bnQgcmlnaHQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgYm90dG9tOwotICAgIGJvb2wgY29tcHV0
ZUJvdW5kczsKLX07Ci0KLWNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5
cGgsIERyYXdPdmVyR2x5cGh9OwotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygp
ID0gMDsKLSAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Ci0gICAgdmlydHVhbCBHbHlwaFVuZGVybGlu
ZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0g
MDsKLSAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KLX07Ci1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwotCi1jbGFzcyBG
b250IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBm
bG9hdCB3b3JkU3BhY2luZyk7Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQg
aWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRp
bmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLSNlbmRpZgotICAgIH5Gb250KCk7Ci0KLSAgICBGb250KGNv
bnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9u
dCYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90
aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9
Ci0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRQaXhlbFNpemUoKTsgfQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotCi0gICAgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKLQotICAgIGVudW0gQ3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKLQotICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
Ci0gICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0
TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9Ci0KLSAgICBmbG9hdCB3b3JkU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KLSAgICBmbG9hdCBsZXR0ZXJTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgdm9pZCBzZXRXb3JkU3Bh
Y2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9Ci0gICAgdm9pZCBzZXRMZXR0ZXJT
cGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQotICAgIAotICAgIEZvbnRSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCk7IH0KLQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0aW5nRmVhdHVy
ZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpOyB9Ci0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsgfQotCi0gICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lkdGhWYXJpYW50
IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFy
aWFudCgpOyB9Ci0KLSAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9n
bHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KLQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNz
KCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lk
dGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9z
aXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXpl
LCBwb3NpdGlvbik7IH0KLSAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0
OwotICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgp
IGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwotCi0gICAgaW50IGVtcGhhc2lzTWFy
a0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
RGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
SGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZh
bGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9W
YXJpYW50KSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOwotICAgIHN0YXRpYyBib29s
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7Ci0KLSAgICAvLyBCRVdBUkU6IElmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhl
IHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkKLSAgICAvLyB3
aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29tcGVuc2F0ZXMK
LSAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZhbHVlIGlmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiwgVGV4
dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7Ci0KLSAgICBlbnVtIENvZGVQ
YXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB9Owot
ICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAgICBzdGF0aWMg
Q29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVuc2lnbmVkKSB7
IHJldHVybiBTaW1wbGU7IH0KLSAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2Rl
UGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7Ci0KLSAgICBib29sIHByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gRm9yVGV4dEVt
cGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0
RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBo
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBmbG9hdCBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAgICBib29sIGdl
dEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBj
b25zdDsKLQotICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4
VGV4dCgpOwotICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNl
LgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JO
b3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7Ci0KLXB1
YmxpYzoKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9y
VGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbikKLSAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhlci5t
X2xldHRlclNwYWNpbmcKLSAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0gb3RoZXIubV93
b3JkU3BhY2luZzsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5n
IHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7Ci0gICAgc3RhdGljIENvZGVQ
YXRoIGNvZGVQYXRoKCk7Ci0gICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhU
eXBlc2V0dGluZ0ZlYXR1cmVzKTsKLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBkZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19y
b3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwotICAgIHN0YXRpYyBib29sIGlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGMgJiB+
MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKLSAgICB9Ci0KLSAgICBG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIHRyZWF0
QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAn
XG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9X
aWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVy
biBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4g
fHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8
IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3Bh
Y2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQotICAgIHN0YXRpYyBib29s
IGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
VUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLQot
ICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBG
b250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKLQotICAgIFR5
cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnRE
ZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1
cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgICAgICBz
d2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXV0b1RleHRSZW5kZXJp
bmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcHRpbWl6ZVNwZWVkOgotICAg
ICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKLSAgICAgICAgY2FzZSBP
cHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGln
YXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9u
LmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1
cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpF
bmFibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVy
ZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBt
X2ZvbnREZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBo
czsKLSAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Ci0gICAgZmxvYXQgbV93b3JkU3BhY2luZzsK
LSAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1
cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRpb24uCi19Owot
Ci12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
Ci0KLWlubGluZSBGb250Ojp+Rm9udCgpCi17Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVGb250
RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlw
aHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERl
c2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNr
UmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsK
LSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2Ny
aXB0aW9uLCBpbmRleCk7Ci19Ci0KLWlubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4
ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBGb250U2VsZWN0b3IqIEZv
bnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlw
aHMtPmZvbnRTZWxlY3RvcigpIDogMDsKLX0KLQotaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRo
KGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCF0YWJTaXplKQotICAgICAgICByZXR1cm4gbGV0
dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNw
YWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJEZWx0YVdpZHRoID0g
dGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOwotICAgIHJldHVybiAodGFiRGVs
dGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0
YVdpZHRoOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
bGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250U2Vs
ZWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNz
IEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBPcGVuVHlwZVZl
cnRpY2FsRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExh
eW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRM
YXlvdXQgY2xhc3MgZGVmaW5pdGlvbgordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxX
ZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCit7CisgICAgV2Vi
Q29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7Cit9CisKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisK
K2NvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
eworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKKyAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMSAvKj8qLywKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKK307CisKK3N0YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0
UnVuJiBydW4pCit7CisgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Cit9CisKK3N0
YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKKyAgICBpZiAo
IXNldCkgeworICAgICAgICBzZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAg
ICBzZXQtPmFkZCgiTVMgUEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdv
dGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcs
IDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVO
YW1lTVNQR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwor
CisgICAgICAgIHNldC0+YWRkKCJNUyBQTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNQTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUs
IDB4NjcxRH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKKworICAgICAg
ICBzZXQtPmFkZCgiTVMgR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3Ro
aWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAw
eDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhp
YywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TR290aGljKSkpOworCisgICAgICAgIHNl
dC0+YWRkKCJNUyBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1td
ID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKKyAgICAgICAgc2V0
LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgo
dW5pY29kZU5hbWVNU01pbmNobykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Cisg
ICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBF
QSwgMHgzMEFBfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVp
cnlvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOworICAgIH0KKyAgICBy
ZXR1cm4gc2V0LT5jb250YWlucyhmYW1pbHkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250Ojpz
X2NvZGVQYXRoID0gQXV0bzsKKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIEZvbnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24p
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb250OjpGb250KCkK
KyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcygwKQoreworfQorCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZs
b2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorICAgIDogbV9mb250RGVzY3Jp
cHRpb24oZmQpCisgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcod29yZFNwYWNpbmcpCisgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
fQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1p
bmRlcGVuZGVudC4KK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEs
IGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
CisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisg
ICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGlu
Z0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0
U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBl
bmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkp
CisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
ICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmlt
YXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5
bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5
Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5v
cm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEu
aXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlm
CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhz
KQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKKyAgICAsIG1fdHlwZXNl
dHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQoreworfQorCitGb250
JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250RGVzY3Jp
cHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtX2dseXBocyA9IG90aGVyLm1f
Z2x5cGhzOworICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKKyAg
ICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKKyAgICBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgPSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZm9u
dERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2lu
ZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dv
cmRTcGFjaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzID09IG90
aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fZ2x5cGhzIHx8
ICFvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVo
b3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJl
Y2FsYy4KKyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5t
X2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fZ2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdHJ1
Y3QgRm9udEdseXBoc0NhY2hlS2V5IHsKKyAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBz
aGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9i
amVjdHMpLgorICAgIEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
dW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lv
bjsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKK307CisKK3N0cnVjdCBGb250R2x5
cGhzQ2FjaGVFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRH
bHlwaHM+JiYgZykKKyAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQorICAgICAgICAsIGdseXBo
cyhXVEY6Om1vdmUoZykpCisgICAgeyB9CisgICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKKyAg
ICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBG
b250R2x5cGhzQ2FjaGU7CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBo
c0NhY2hlS2V5JiBhLCBjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCit7CisgICAgaWYgKGEu
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNl
bGVjdG9ySWQgfHwgYS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lv
biB8fCBhLmZvbnRTZWxlY3RvckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYS5mYW1pbGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGEuZmFtaWxpZXNbaV0uaW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Rm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgcmV0dXJu
IGNhY2hlOworfQorCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQoreworICAgIGZv
bnRHbHlwaHNDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3ZvaWQgY2xlYXJXaWR0aENhY2hlcygpCit7
CisgICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9u
dEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVl
LT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlw
dCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
KTsKK30KKworc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2Fj
aGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCit7CisgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0g
Rm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAg
ICAga2V5LmZhbWlsaWVzLmFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAga2V5
LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgp
IDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRT
ZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250
U2VsZWN0b3IgJiYgZm9udFNlbGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikg
PyBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKK30KKworc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtl
eSYga2V5KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOworICAgIGhhc2hD
b2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKKwor
ICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5
LmNvbXB1dGVIYXNoKCkpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvcklkKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JWZXJzaW9uKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JGbGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNb
aV0uaW1wbCgpID8gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsK
KworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwg
aGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworfQorCit2b2lkIHBydW5lVW5y
ZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQoreworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgNTA+IHRvUmVtb3ZlOworICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0g
Zm9udEdseXBoc0NhY2hlKCkuZW5kKCk7CisgICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBmb250R2x5cGhzQ2FjaGUo
KS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQoreworICAgIEZv
bnRHbHlwaHNDYWNoZUtleSBrZXk7CisgICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOworICAgIEZvbnRHbHlwaHNDYWNoZTo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkgJiYgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKKyAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9u
dEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9u
dFNlbGVjdG9yKSk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlw
aHMuZ2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJ
bnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7
CisgICAgc3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAvLyBSZWZlcmVuY2VkIEZv
bnRHbHlwaHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUg
bWVtb3J5LgorICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRl
cnZhbCkpCisgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2Fj
aGUoKTsKKyAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCisgICAgaWYgKGZvbnRH
bHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQorICAgICAgICBmb250R2x5cGhz
Q2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAgcmV0dXJuIGds
eXBoczsKK30KKwordm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKK3sKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Zmlyc3RGYW1pbHkoKSk7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVz
ZXR0aW5nRmVhdHVyZXMoKTsKK30KKworZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAoreworICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAorICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCisgICAgLy8gZm9udCkuCisg
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0
byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29k
ZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRv
VXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdG
b250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNv
bnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBkcmF3Q29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5n
dGgoKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAg
IC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFs
IHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdG
ZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxl
bmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9V
c2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAg
ICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9p
bnQsIGZyb20sIHRvKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworfQorCitmbG9h
dCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK3sKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKKyAgICBp
ZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CisgICAgICAgIC8vIFRoZSBjb21wbGV4IHBh
dGggaXMgbW9yZSByZXN0cmljdGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhh
biB0aGUgc2ltcGxlIHBhdGgsIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRo
ZWlyIGJlaGF2aW9ycyBtYXRjaC4KKyAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOworICAgICAg
ICAvLyBUaGUgc2ltcGxlIHBhdGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92
ZXJmbG93IGlzIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBT
aW1wbGVXaXRoR2x5cGhPdmVyZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxv
dy0+Y29tcHV0ZUJvdW5kcykpCisgICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKKyAgICB9
CisKKyAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMo
KSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0
ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQq
IGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGNhY2hl
RW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1cm4gKmNhY2hl
RW50cnk7CisKKyAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFj
a0ZvbnRzOworICAgIGlmICghZmFsbGJhY2tGb250cykKKyAgICAgICAgZmFsbGJhY2tGb250cyA9
ICZsb2NhbEZhbGxiYWNrRm9udHM7CisKKyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKGNvZGVQ
YXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMs
IGdseXBoT3ZlcmZsb3cpOworCisgICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+
aXNFbXB0eSgpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hh
cnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIHJldHVybiBy
dW4ucmVuZGVyaW5nQ29udGV4dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4s
IGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisjZW5kaWYKKworICAgIGNoYXJzQ29uc3VtZWQg
PSBydW4ubGVuZ3RoKCk7CisgICAgZ2x5cGhOYW1lID0gIiI7CisgICAgcmV0dXJuIHdpZHRoKHJ1
bik7Cit9CisKK0dseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7CisgICAgaWYg
KHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgICAgICBpZiAodXBw
ZXJDICE9IGMpIHsKKyAgICAgICAgICAgICAgICBjID0gdXBwZXJDOworICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgfQorCisgICAgaWYgKG1pcnJvcikK
KyAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKKworICAgIHJldHVybiBtX2dseXBocy0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKwor
I2lmICFQTEFURk9STShDT0NPQSkKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRl
TGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit7Cit9CisK
K2Zsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250
RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3Jp
dGVyIiwKKyAgICAiQXJpYWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hp
biIsCisgICAgIkNvcnNpdmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlh
IFVDQVMiLAorICAgICJHZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAg
ICJIZWx2ZXRpY2EiLAorICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAg
ICJLYWkiLAorICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJN
b25hY28iLAorICAgICJNc2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nh
a2EiLAorICAgICJSYWFuYW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAg
IlRpbWVzIiwKKyAgICAiQXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAg
ICAiQXBwbGUgTGlTdW5nIiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGlj
IiwKKyAgICAiQXBwbGVNeXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVB
IiwKKyAgICAiI1BDTXl1bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBm
YW1pbGllcyB3aGVyZSBhbnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBp
biB0aGUgT1MvMiB0YWJsZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxl
Z2FjeSB3ZWJraXQgYmVoYXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9t
IHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQg
bnVtYmVyIG9mIE1hYyBmb250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVu
ZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxh
dGZvcm1zLgorYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorewor
ICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOworICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKElPUykKKyAgICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxz
byBoYXZlIGFuIGludmFsaWQgZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCisg
ICAgaWYgKHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1p
bGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gMDsKKworICAgIGlmICghZm9udEZhbWlsaWVz
V2l0aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFs
aWRDaGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aCk7ICsraSkKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlk
Q2hhcldpZHRoTWFwLT5hZGQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoW2ldKSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworYm9vbCBGb250OjpmYXN0QXZl
cmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKKyAgICBpZiAoc3VjY2VzcykK
KyAgICAgICAgd2lkdGggPSByb3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkp
OyAvLyBGSVhNRTogcHJpbWFyeUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmly
c3RGYW1pbHkoKS4KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBGb250OjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgdG8gPSAodG8gPT0gLTEg
PyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCisgICAgICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBhZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Cit9
CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFVz
ZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtl
cm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAg
aWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8
fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkpCisgICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3Np
dGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CisKKyAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBu
b3JtYWxpemVkOworICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIG5vcm1hbGl6
ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisKKyAgICBy
ZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOworfQorCitTdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisK
K1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IHRydWU7CisKK3ZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxk
VXNlU21vb3RoaW5nKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKK30KKworYm9vbCBGb250Ojpz
aG91bGRVc2VTbW9vdGhpbmcoKQoreworICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OworfQorCit2b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit7CisgICAgc19jb2Rl
UGF0aCA9IHA7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKK3sKKyAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKK30KKwordm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCit7CisgICAg
c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisK
K1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQor
eworICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworfQorCitGb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAg
aWYgKHNfY29kZVBhdGggIT0gQXV0bykKKyAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7CisKKyNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAg
ICAgICAgcmV0dXJuIFNpbXBsZTsKKyNlbmRpZgorCisgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygp
LT5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICAKKyAgICBpZiAocnVu
Lmxlbmd0aCgpID4gMSAmJiAhV2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1
cmVzKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICBpZiAoIXJ1bi5jaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIGlm
IChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisKKyAgICAvLyBTdGFydCBm
cm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hh
cmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgorICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQ
YXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKworRm9udDo6Q29kZVBh
dGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBp
biBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90ZSB0aGF0IHdlIAorICAgIC8vIGNhbid0IHNp
bXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hh
cmFjdGVycworICAgIC8vIGFyZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdv
IHRvIHRoZSBjb21wbGV4IHBhdGguCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdl
bGwgY29uc2lkZXIgYmluYXJ5IHNlYXJjaCBvdmVyIGEgc29ydGVkCisgICAgLy8gbGlzdCBvZiBy
YW5nZXMuCisgICAgQ29kZVBhdGggcmVzdWx0ID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVy
c1tpXTsKKyAgICAgICAgaWYgKGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChN
b2RpZmllciBMZXR0ZXJzIDogVG9uZSBsZXR0ZXJzKSAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyRTkpIAorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmlu
ZyBkaWFjcml0aWNhbCBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MzZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMg
PCAweDA1OTEgfHwgYyA9PSAweDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRp
bmcgVSswNUJFIEhlYnJldyBjb21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNl
cSwgU29mIFBhc3VxIGFuZCBOdW4gSGFmdWtoYQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MDVDRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIC8vIFUrMDYwMCB0aHJvdWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28s
IFNhbWFyaXRhbiwgTWFuZGFpYywKKyAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3Vy
bXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCisgICAgICAg
IC8vIE1hbGF5YWxhbSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCisgICAg
ICAgIGlmIChjIDwgMHgwNjAwKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweDEwOUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICAvLyBV
KzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hv
dWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJlY29tcG9zZTsKKyAgICAgICAgLy8gTW9kZXJuIEtv
cmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKKyAgICAgICAg
aWYgKGMgPCAweDExMDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxMUZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAw
eDEzNUQpIC8vIFUrMTM1RCB0aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEzNUYpCisgICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgw
IHRocm91Z2ggVSsxOEFGIFRhZ2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwg
TW9uZ29saWFuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOEFG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5MDAp
IC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOTRGKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUr
MTlERiBOZXcgVGFpIEx1ZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9
IDB4MTlERikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwg
MHgxQTAwKSAvLyBVKzFBMDAgdGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxp
bmVzZSwgQmF0YWssIExlcGNoYSwgVmVkaWMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDFDRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MURDMCkgLy8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNy
aXRpY2FsIG1hcmsgc3VwcGxlbWVudAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChjIDw9IDB4MURGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8v
IFUrMUUwMCB0aHJvdWdoIFUrMjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3Rh
Y2tlZCBkaWFjcml0aWNzCisgICAgICAgIGlmIChjIDw9IDB4MjAwMCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3c7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBV
KzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5p
bmcgbWFya3MgZm9yIENvcHRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MkNGMSkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgzMDJBKSAvLyBVKzMwMkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1
bCBUb25lIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
MDJGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2
N0MpIC8vIFUrQTY3QyB0aHJvdWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJp
bGxpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QTY3RCkKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBV
K0E2RjAgdGhyb3VnaCBVK0E2RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNkYxKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdz
LXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgIC8vIEhhbmd1bCBK
YW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRl
aSBNYXllaywKKyAgICAgICAgaWYgKGMgPCAweEE4MDApIAorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjIDw9IDB4QUJGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgIGlmIChjIDwgMHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3Vs
IEphbW8gRXh0LiBCCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhE
N0ZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPD0gMHhE
QkZGKSB7CisgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZQorCisgICAgICAgICAgICBpZiAo
aSA9PSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBV
Q2hhciBuZXh0ID0gY2hhcmFjdGVyc1srK2ldOworICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJB
SUwobmV4dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFy
MzIgc3VwcGxlbWVudGFyeUNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0
KTsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAv
LyBVKzFGMUU2IHRocm91Z2ggVSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFy
YWN0ZXIgPD0gMHgxRjFGRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAw
IHRocm91Z2ggVStFMDFFRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweEUwMUVGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICAvLyBGSVhNRTogQ2hlY2sgZm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsx
MTA4MCBibG9jaykgYW5kIG90aGVyIGNvbXBsZXggc2NyaXB0cworICAgICAgICAgICAgLy8gaW4g
cGxhbmUgMSBvciBoaWdoZXIuCisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGMgPCAweEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2Rl
IHZhcmlhdGlvbiBzZWxlY3RvcnMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEZFMEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4RkUyMCkgLy8gVStGRTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtz
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQorICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jv
b2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQoreworICAgIC8vIFRoZSBiYXNpYyBD
SksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgorICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9
IDB4OUZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQg
SWRlb2dyYXBocyBFeHRlbnNpb24gQS4KKyAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDRE
QkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBSYWRpY2FscyBTdXBw
bGVtZW50LgorICAgIGlmIChjID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gS2FuZ3hpIFJhZGljYWxzLgorICAgIGlmIChjID49IDB4
MkYwMCAmJiBjIDw9IDB4MkZERikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
Q0pLIFN0cm9rZXMuCisgICAgaWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
LgorICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KKyAg
ICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCisg
ICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCisgICAg
aWYgKGMgPj0gMHgyQjc0MCAmJiBjIDw9IDB4MkI4MUYpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KKyAg
ICBpZiAoYyA+PSAweDJGODAwICYmIGMgPD0gMHgyRkExRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMyIGMpCit7CisgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2Ug
M3JkIFRvbmUKKyAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5k
YXJpbiBDaGluZXNlIDJuZCBUb25lCisgICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZl
IEFjY2VzcywgTWFuZGFyaW4gQ2hpbmVzZSA0dGggVG9uZSAKKyAgICAvLyAweDJEOSBEb3QgQWJv
dmUsIE1hbmRhcmluIENoaW5lc2UgNXRoIFRvbmUgCisgICAgaWYgKChjID09IDB4MkM3KSB8fCAo
YyA9PSAweDJDQSkgfHwgKGMgPT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChj
ID09IDB4MjAzMCkgfHwgKGMgPT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCisgICAgICAgIHx8
IChjID09IDB4MjA0MikgfHwgKGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09
IDB4MjA0OSkgfHwgKGMgPT0gMHgyMDUxKQorICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChj
ID09IDB4MjBERSkgfHwgKGMgPT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4
MjEwNSkKKyAgICAgICAgfHwgKGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09
IDB4MjExMykgfHwgKGMgPT0gMHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCisgICAgICAgIHx8IChj
ID09IDB4MjEyQikgfHwgKGMgPT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4
MjE1MSkgfHwgKGMgPT0gMHgyMTUyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDIxNTYgJiYgYyA8PSAweDIxNUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyMTYwICYmIGMgPD0gMHgyMTZCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjE3MCAmJiBjIDw9IDB4MjE3QikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMw
NykgfHwgKGMgPT0gMHgyMzEyKSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0ND
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09
IDB4MjQyMykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDYwICYm
IGMgPD0gMHgyNDkyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjQ5
QyAmJiBjIDw9IDB4MjRGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0g
MHgyNUEwKSB8fCAoYyA9PSAweDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFB
KSB8fCAoYyA9PSAweDI1QUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI1QjEpIHx8IChjID09IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1
QjYpIHx8IChjID09IDB4MjVCNykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9
PSAweDI1QzEpIHx8IChjID09IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1
QzkpIHx8IChjID09IDB4MjVDQikgfHwgKGMgPT0gMHgyNUNDKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09IDB4MjVFRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI2MDAgJiYgYyA8PSAweDI2MDMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKChjID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAw
eDI2MEUpIHx8IChjID09IDB4MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDAp
IHx8IChjID09IDB4MjY0MikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNjYwICYmIGMgPD0gMHgyNjZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MjY3MiAmJiBjIDw9IDB4MjY3RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoKGMgPT0gMHgyNkEwKSB8fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMg
PT0gMHgyNzEzKSB8fCAoYyA9PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgy
NzQwKSB8fCAoYyA9PSAweDI3NTYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Mjc3NiAmJiBjIDw9IDB4Mjc3RikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoYyA9PSAweDJCMUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWRlb2dyYXBo
aWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycy4KKyAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAw
eDJGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBTeW1ib2xzIGFu
ZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KKyAgICBpZiAoYyA+PSAweDMwMDAgJiYg
YyA8IDB4MzAzMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+IDB4MzAzMCAm
JiBjIDw9IDB4MzAzRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIaXJhZ2FuYQor
ICAgIGlmIChjID49IDB4MzA0MCAmJiBjIDw9IDB4MzA5RikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBLYXRha2FuYSAKKyAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21vZm8KKyAgICBpZiAoYyA+PSAw
eDMxMDAgJiYgYyA8PSAweDMxMkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMg
Pj0gMHgzMTkwICYmIGMgPD0gMHgzMTlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEJvcG9tb2ZvIEV4dGVuZGVkCisgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQg
TW9udGhzLgorICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCisgICAgaWYgKGMgPj0g
MHgzMzAwICYmIGMgPD0gMHgzM0ZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Rjg2MCAmJiBjIDw9IDB4Rjg2MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcy4KKyAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAw
eEZFNEYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkUxMCkgfHwg
KGMgPT0gMHhGRTExKSB8fCAoYyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8
fCAoYyA9PSAweEZGMUMpIHx8IChjID09IDB4RkYxRSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCisgICAgLy8gVXN1YWxseSBv
bmx5IHVzZWQgaW4gQ0pLCisgICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtb2ppLgorICAgIGlmIChjID09IDB4MUYxMDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4
MUYxMjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBj
IDw9IDB4MUYxNDkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjE1
MCAmJiBjIDw9IDB4MUYxNjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgxRjE3MCAmJiBjIDw9IDB4MUYxODkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgxRjIwMCAmJiBjIDw9IDB4MUY2QzUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOworfQorCit1bnNpZ25lZCBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9u
KQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IExUUikg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
IC0gMV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgc3RhdGljIGJvb2wg
ZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
Y2hhcmFjdGVyKSAmJiBpICsgMSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tp
ICsgMV0pKSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGNoYXJhY3RlciwgY2hhcmFjdGVyc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYm
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlm
ICghaXNBZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJh
Y3RlcikgJiYgaSA+IDEgJiYgVTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7CisgICAg
ICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNb
aSAtIDJdLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFu
c2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KKwor
dW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKK3sKKyAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCks
IHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNp
b24pOworfQorCitib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQor
eworICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNL
IHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQWRkaXRpb25hbCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBD
U1MgVGV4dCBMZXZlbCAzIEVkaXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KKyAgICBpZiAo
YyA9PSBldGhpb3BpY1dvcmRzcGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8
IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckRvdAorICAgICAgICB8fCBjID09IHVnYXJpdGljV29y
ZERpdmlkZXIgfHwgYyA9PSB0aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRp
YmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKTsKK30KKyAgICAKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQoreworICAgIC8vIEluIGdlbmVyYWws
IHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJz
IG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCisgICAg
Ly8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFj
dGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5k
ZXgpOworCisgICAgaWYgKG9mZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkg
eworICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhp
cyBnbHlwaC4gQmFpbC4KKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIH0KKyAgICAKKyAgICBpZiAodGV4
dFJ1bi5pczhCaXQoKSkKKyAgICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVy
czgoKVtvZmZzZXRJblN0cmluZ107CisgICAgZWxzZQorICAgICAgICBVMTZfTkVYVCh0ZXh0UnVu
LmNoYXJhY3RlcnMxNigpLCBvZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNo
YXJhY3Rlcik7CisgICAgCisgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJf
SURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNv
ZGVwb2ludHMuCisgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2Nh
dGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgVUJsb2NrQ29kZSBibG9ja0NvZGUg
PSB1YmxvY2tfZ2V0Q29kZShiYXNlQ2hhcmFjdGVyKTsKKyAgICBzd2l0Y2ggKGJsb2NrQ29kZSkg
eworICAgIGNhc2UgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJM
T0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NF
RF9DSktfTEVUVEVSU19BTkRfTU9OVEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklM
SVRZOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6
CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUzoKKyAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01Q
QVRJQklMSVRZX0ZPUk1TOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNf
RVhURU5TSU9OX0I6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBI
U19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgorICAgIGNhc2UgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0M6CisgICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRDoKKyAgICBjYXNlIFVCTE9DS19JREVP
R1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTOgorICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9C
X0lERU9HUkFNUzoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVN
RU5UOgorICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgorICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5B
OgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPOgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VY
VEVOREVEOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1POgorICAgIGNhc2UgVUJMT0NLX0hB
TkdVTF9DT01QQVRJQklMSVRZX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxF
UzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgorICAgIGNhc2UgVUJM
T0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0I6CisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5
cGU6OlNraXBEZXNjZW5kZXJzOworICAgIH0KK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRleHRMYXlvdXQ+
IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBUZXh0TGF5b3V0
IGNsYXNzIGRlZmluaXRpb24KIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogewotICAgIFdlYkNvcmU6
OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkZWxl
dGVMYXlvdXQocHRyKTsKIH0KIAogfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAot
Y29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7
Citjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAxIC8qPyovLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsCkBAIC05OCwxNSArOTgsMTUgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5T
aWduRm9yRmFtaQogICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7CiB9CiAKLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOworRm9udENhc2NhZGU6OkNvZGVQYXRo
IEZvbnRDYXNjYWRlOjpzX2NvZGVQYXRoID0gQXV0bzsKIAotVHlwZXNldHRpbmdGZWF0dXJlcyBG
b250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKK1R5cGVzZXR0aW5nRmVhdHVy
ZXMgRm9udENhc2NhZGU6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwogCiAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlv
biAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vIEZvbnRDYXNjYWRlIEltcGxlbWVudGF0aW9u
IChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIAotRm9udDo6Rm9udCgpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogICAg
IDogbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTE0LDcgKzExNCw3IEBAIEZvbnQ6OkZv
bnQoKQogewogfQogCi1Gb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorRm9udENhc2NhZGU6OkZvbnRDYXNj
YWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0
IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRl
clNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcp
CkBAIC0xMjQsNyArMTI0LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZk
LCBmbAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udERhdGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFj
aW5nKDApCkBAIC0xNDMsNyArMTQzLDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9u
dFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
ICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udEQKIH0K
ICNlbmRpZgogCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGU6OkZv
bnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0
aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlw
aHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQpAQCAtMTY5
LDcgKzE2OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiB7CiB9CiAKLUZvbnQm
IEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK0ZvbnRDYXNjYWRlJiBGb250Q2Fz
Y2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKIHsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwogICAgIG1fZ2x5cGhzID0gb3Ro
ZXIubV9nbHlwaHM7CkBAIC0xODAsNyArMTgwLDcgQEAgRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBGb250OjpvcGVy
YXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0
b3I9PShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAgc3RhdGljIFJlZjxGb250R2x5cGhz
PiByZXRyaWV2ZU9yQWRkQ2FjaAogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKLXZvaWQgRm9udDo6
dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3Rv
cikgY29uc3QKIHsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhz
KG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1p
bHkoKSk7CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVh
dHVyZXMoKTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzUxLDcgKzM1MSw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY28KICAgICByZXR1cm4gZHJhd0Nv
bXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAg
ICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbgogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNv
bnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQgRm9udDo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAg
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIGZs
b2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKGlzRHJhd25XaXRo
U1ZHRm9udChydW4pKQpAQCAtNDE1LDcgKzQxNSw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAotR2x5cGhEYXRh
IEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK0dseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7CiAgICAg
ICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCkpIHsKQEAgLTQzNiwxNiArNDM2LDE2IEBAIEdseXBoRGF0YSBGb250Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUMKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwg
Ym9vbCkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxh
eW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQordm9pZCBGb250
Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQogewogfQogCi1mbG9hdCBGb250Ojp3
aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC00OTYsNyArNDk2LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbAogLy8gZnJvbSB0aGUgd2lk
dGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBv
ZiBNYWMgZm9udHMsCiAvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBh
Y3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgogLy8gYWxsIHBsYXRmb3Jtcy4K
LWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgQXRvbWljU3Ry
aW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCkBA
IC01MjAsNyArNTIwLDcgQEAgYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
bwogICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRh
aW5zKGZhbWlseSk7CiB9CiAKLWJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKIHsKICAgICBib29sIHN1Y2Nl
c3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKICAgICBpZiAoc3VjY2VzcykKQEAgLTUy
OCw3ICs1MjgsNyBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFiCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0
aCgpIDogdG8pOwogCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChjbwogICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CiB9CiAKLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKQEAgLTU1
OSw1NSArNTU5LDU1IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGUK
ICAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBub3JtYWxpemVkLmFwcGVuZChG
b250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICBub3JtYWxpemVk
LmFwcGVuZChGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAog
ICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0
cmluZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFs
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZyBGb250Q2Fz
Y2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVl
OwogCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3VsZFVzZVNtb290
aGluZykKK3ZvaWQgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3Vs
ZFVzZVNtb290aGluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7CiB9CiAKLWJvb2wgRm9udDo6
c2hvdWxkVXNlU21vb3RoaW5nKCkKK2Jvb2wgRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGlu
ZygpCiB7CiAgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAKLXZvaWQgRm9u
dDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3ZvaWQgRm9udENhc2NhZGU6OnNldENvZGVQYXRo
KENvZGVQYXRoIHApCiB7CiAgICAgc19jb2RlUGF0aCA9IHA7CiB9CiAKLUZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKCkKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29k
ZVBhdGgoKQogewogICAgIHJldHVybiBzX2NvZGVQYXRoOwogfQogCi12b2lkIEZvbnQ6OnNldERl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykKK3ZvaWQgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKIHsKICAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCitUeXBlc2V0
dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCiB7
CiAgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAKLUZvbnQ6OkNv
ZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK0ZvbnRDYXNj
YWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBj
b25zdAogewogICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCiAgICAgICAgIHJldHVybiBzX2Nv
ZGVQYXRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRo
KGNvbnN0IFRleHQKICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFj
dGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiB9CiAKLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikK
K0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQogewogICAgIC8vIEZJWE1F
OiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90
ZSB0aGF0IHdlIAogICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9w
ZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwpAQCAtNzM0LDggKzczNCw4IEBAIEZv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAKICAgICAgICAgaWYgKGMgPD0g
MHhBNkYxKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAKLSAgICAgICAvLyBVK0E4MDAg
dGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4
dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIg
RXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgLy8gVStBODAwIHRo
cm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRl
bmRlZCwKKyAgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBF
eHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAogICAgICAgICBpZiAoYyA8IDB4QTgw
MCkgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQpAQCAt
Nzg3LDcgKzc4Nyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFy
MzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKIHsKICAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KICAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCkBAIC04MTIsMTEgKzgxMiwxMSBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVv
Z3JhcGhzLgogICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lv
biBCLgogICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVu
c2lvbiBDLgogICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
KFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTkxNCw3ICs5MTQsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gSWRlb2dyYXBoaWMgRGVzY3Jp
cHRpb24gQ2hhcmFjdGVycy4KICAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgogICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0MCw3ICs5NDAsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQK
ICAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCiAgICAgICAgIHJldHVybiB0cnVl
OwotIAorCiAgICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocy4KICAgICBpZiAo
YyA+PSAweDMyMDAgJiYgYyA8PSAweDMyRkYpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTg5
LDcgKzk4OSw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAg
ICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
Cit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHVu
c2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CkBAIC0xMDYyLDE0ICsxMDYyLDE0IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikK
IHsKICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmlu
Z1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgcmV0dXJu
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMx
NigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwog
fQogCi1ib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiB7CiAgICAgaWYg
KFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0ND
X01BU0sgfCBVX0dDX0NGX01BU0spKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDgyLDcg
KzEwODIsNyBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAorYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewogICAg
IHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCisKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
KyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250R2x5cGhzLmgiCisj
aW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29t
cGxleCB0byAwIGFuZCBjb25mbGljdHMKKy8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0
aCBlbnVtLgorI2lmZGVmIENvbXBsZXgKKyN1bmRlZiBDb21wbGV4CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgRm9udERhdGE7CitjbGFzcyBGb250TWV0cmljczsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CitjbGFzcyBGb250U2VsZWN0b3I7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIExheW91dFJlY3Q7CitjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgVGV4
dExheW91dDsKK2NsYXNzIFRleHRSdW47CisKK3N0cnVjdCBHbHlwaERhdGE7CisKK3N0cnVjdCBH
bHlwaE92ZXJmbG93IHsKKyAgICBHbHlwaE92ZXJmbG93KCkKKyAgICAgICAgOiBsZWZ0KDApCisg
ICAgICAgICwgcmlnaHQoMCkKKyAgICAgICAgLCB0b3AoMCkKKyAgICAgICAgLCBib3R0b20oMCkK
KyAgICAgICAgLCBjb21wdXRlQm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQg
JiYgIXRvcCAmJiAhYm90dG9tOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNv
bnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4
KGxlZnQsIG90aGVyLmxlZnQpOworICAgICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhl
ci5yaWdodCk7CisgICAgICAgIHRvcCA9IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKKyAgICAg
ICAgYm90dG9tID0gc3RkOjptYXgoYm90dG9tLCBvdGhlci5ib3R0b20pOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBsZWZ0ICE9IG90aGVyLmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwg
dG9wICE9IG90aGVyLnRvcCB8fCBib3R0b20gIT0gb3RoZXIuYm90dG9tOworICAgIH0KKworICAg
IGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGludCBib3R0b207
CisgICAgYm9vbCBjb21wdXRlQm91bmRzOworfTsKKworY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xh
dG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERl
c2NlbmRlcnMsIFNraXBHbHlwaCwgRHJhd092ZXJHbHlwaH07CisgICAgdmlydHVhbCBib29sIGNv
bnRhaW5zTW9yZVBhdGhzKCkgPSAwOworICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOworICAg
IHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKKyAgICB2aXJ0
dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1bmRlcmxpbmVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhZHZhbmNlKCkgPSAwOworICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigp
IHsgfQorfTsKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBp
bmRleCk7CisKK2NsYXNzIEZvbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworI2VuZGlmCisgICAgfkZvbnQo
KTsKKworICAgIEZvbnQoY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9w
ZXJhdG9yPShjb25zdCBGb250Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb247IH0KKworICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CisgICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OworCisgICAgZW51
bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVz
ZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworCisgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBm
bG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91
dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7CisgICAgc3RhdGlj
IGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworCisgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisKKyAgICBib29sIGlzU21hbGxDYXBzKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0KKworICAgIGZs
b2F0IHdvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQorICAgIGZs
b2F0IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KKyAg
ICB2b2lkIHNldFdvcmRTcGFjaW5nKGZsb2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KKyAg
ICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9
CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzUHJpbnRlckZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Cisg
ICAgCisgICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKTsgfQorCisgICAgVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZXNldHRpbmdGZWF0dXJlcz4obV90eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQorCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0KKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CisKKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CisgICAgRm9udFdlaWdodCB3
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQorICAg
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KKworICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQorCisgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuZm9udE1ldHJpY3MoKTsgfQorICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5Rm9udERhdGEoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0K
KyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0
YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZv
bnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQorICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdl
Q2hhcldpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCisKKyAg
ICBpbnQgZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisKKyAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7CisgICAgY29u
c3QgRm9udFJhbmdlcyYgZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OworICAgIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBj
b25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7
CisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKKworICAg
IC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rp
b24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBv
cnR1bml0eQorICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQu
IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21l
bnQoKSBjb21wZW5zYXRlcworICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0
dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBs
aW5lLgorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29s
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsK
KworICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhH
bHlwaE92ZXJmbG93IH07CisgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNv
bnN0OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQorICAgIHN0YXRpYyBDb2RlUGF0aCBj
aGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKKworICAg
IGJvb2wgcHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4
dEVtcGhhc2lzIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZh
bmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Cisg
ICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKworICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEdseXBoRGF0YSYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJh
Y2tGb250c0ZvckNvbXBsZXhUZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwg
aW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgZnJpZW5k
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDsKKworcHVibGljOgorI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQor
ICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgJiYgbV9sZXR0ZXJT
cGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZworICAgICAgICAgICAgJiYgbV93b3JkU3Bh
Y2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVXNl
ZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRpZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhz
LgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsK
KyAgICBzdGF0aWMgQ29kZVBhdGggY29kZVBhdGgoKTsKKyAgICBzdGF0aWMgQ29kZVBhdGggc19j
b2RlUGF0aDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgIHN0YXRpYyBUeXBlc2V0
dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdWludDhfdCBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl07CisgICAgc3Rh
dGljIGJvb2wgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoYyAmIH4weEZGKSAmJiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2Nd
OworICAgIH0KKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMg
PT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KKyAgICBzdGF0aWMg
Ym9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9X
aWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBk
OyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8
IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAm
JiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHpl
cm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9
CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworCisg
ICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHNwYWNlOworCisgICAgICAgIGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFj
dGVyKSkKKyAgICAgICAgICAgIHJldHVybiB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAgICByZXR1
cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2Vz
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1h
bGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBib29sIHVz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbDsgfQorICAgIEZvbnRHbHlwaHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0OworCisgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0
dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVy
aW5nTW9kZSA9IG1fZm9udERlc2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7CisgICAgICAg
IFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVhdHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzOworCisgICAgICAgIHN3aXRjaCAodGV4dFJlbmRlcmluZ01vZGUpIHsKKyAgICAgICAgY2Fz
ZSBBdXRvVGV4dFJlbmRlcmluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9w
dGltaXplU3BlZWQ6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVy
ZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9u
OgorICAgICAgICBjYXNlIE9wdGltaXplTGVnaWJpbGl0eToKKyAgICAgICAgICAgIGZlYXR1cmVz
IHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVz
ICY9IH5LZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tl
cm5pbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
bV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZlYXR1
cmVzIHw9IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworCisgICAg
Rm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIG11dGFibGUgUmVmUHRyPEZv
bnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKKyAgICBmbG9h
dCBtX3dvcmRTcGFjaW5nOworICAgIG11dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sOworICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8g
KFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnRE
ZXNjcmlwdGlvbi4KK307CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwordm9p
ZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKKworaW5saW5lIEZvbnQ6On5Gb250KCkKK3sKK30KKworaW5saW5l
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxl
Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgY29uc3QgRm9udFJhbmdl
cyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGJvb2wgRm9udDo6
aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVy
biBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5l
IEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCitpbmxpbmUgZmxv
YXQgRm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25l
ZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXRhYlNpemUpCisg
ICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJT
aXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0
IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Cisg
ICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0
YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7Cit9CisKK30KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29y
ZTo6VGV4dExheW91dCopOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udF9oCi0jZGVmaW5lIEZv
bnRfaAorI2lmbmRlZiBGb250Q2FzY2FkZV9oCisjZGVmaW5lIEZvbnRDYXNjYWRlX2gKIAogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTA2
LDI0ICsxMDYsMjQgQEAgcHVibGljOgogfTsKIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CiAKLWNsYXNzIEZvbnQgeworY2xhc3MgRm9udENhc2Nh
ZGUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZs
b2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAjZW5kaWYKLSAg
ICB+Rm9udCgpOworICAgIH5Gb250Q2FzY2FkZSgpOwogCi0gICAgRm9udChjb25zdCBGb250Jik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQmKTsKKyAgICBG
b250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRD
YXNjYWRlJiBvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBlcXVhbEZvclRleHRB
dXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIGJvb2wgZXF1YWxGb3JUZXh0
QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhl
ci5tX2xldHRlclNwYWNpbmcKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0
JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNw
YWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9CiAg
ICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFy
IGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0g
c29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9
IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0
aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAg
c3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworICAgIHN0YXRp
YyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMik7CiAKICAgICBzdGF0aWMgaW5s
aW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCiAgICAgewpAQCAtMzQ3
LDM0ICszNDcsMzQgQEAgdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CiB2b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgY2xlYXJX
aWR0aENhY2hlcygpOwogCi1pbmxpbmUgRm9udDo6fkZvbnQoKQoraW5saW5lIEZvbnRDYXNjYWRl
Ojp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZv
bnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEm
IEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAogewogICAgIEFTU0VSVChtX2ds
eXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250
RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJh
Y2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAotaW5saW5lIGJvb2wg
Rm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0Zp
eGVkUGl0Y2goKSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1f
Z2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoraW5saW5lIEZvbnRTZWxlY3Rv
ciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ2x5
cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAotaW5saW5lIGZsb2F0IEZv
bnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCF0YWJTaXplKQogICAgICAgICByZXR1
cm4gbGV0dGVyU3BhY2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29yayBpZiB0aGUg
ZW1waGFzaXMgbWFyayB1c2VzIGEgY29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9mIHRoZQogLy8g
c3RhbmRhcmQgZW1waGFzaXMgbWFya3MgZG8gc28uCi1ib29sIEZvbnQ6OmdldEVtcGhhc2lzTWFy
a0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRh
KSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0CiB7CiAgICAg
aWYgKG1hcmsuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Niw3ICs2Niw3
IEBAIGJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERh
dGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0
YSkpCkBAIC04MCw3ICs4MCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3Qg
QXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpOwog
fQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwog
ICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpA
QCAtOTQsNyArOTQsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9t
CiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CiB9CiAK
LWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBj
b25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlm
ICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtMTA4
LDcgKzEwOCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWkKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsK
IApAQCAtMTM4LDcgKzEzOCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZh
bmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CkBAIC0xNTQsNyArMTU0LDcgQEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZQogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleAogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVuKTsKQEAgLTIz
MSw3ICsyMzEsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAg
ICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkp
LCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0
YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRh
KSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29uCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwgc3Rh
cnRQb2ludCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxs
YmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTI3Niw3ICsyNzYsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChj
b25zCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotdm9pZCBGb250OjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBy
dW4pOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVQKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVX
aWR0aCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
ewogICAgIGZsb2F0IGRlbHRhID0geDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTI2NCw3ICsyNjQsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtCiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhKQogICAgICAg
ICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJh
Y2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKGMpKQorICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5o
YXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEds
eXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBHbHlwaERhdGEg
Rm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YSkgewotICAgICAgICBp
ZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEu
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZh
bGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFs
bGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZv
ck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNK
S0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0KIApAQCAtMzIy
LDcgKzMyMiw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWwKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAg
ICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0
MzAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAvLyB0aGUg
d2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBub3RpY2Vh
YmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KICNpZiAhUExBVEZPUk0oSU9TKQogI2lmICFVU0Uo
V0lOR0RJKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb24KIH0KICNlbmRpZgogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAgZmxvYXQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1Niw3ICs0NTYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGCiAgICAgZm9udC5k
cmF3R2x5cGhzKHRoaXMsICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKIH0KIAogLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUg
aU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0
aG9kIHVzZSB0aGUKLS8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Ojpk
cmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8v
IHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Q2FzY2FkZTo6ZHJhd1RleHQo
KSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCiAvLyBhcmVuJ3Qg
bm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hhbmdlLgogI2lm
ICFQTEFURk9STShJT1MpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikK
ICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3Rh
dHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50IGxlbmd0aCkK
ICNlbmRpZgogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC01MTUsNyArNTE1LDcg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29ucwogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwotICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgorICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250Q2FzY2FkZTo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBv
ZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4K
ICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250Lndp
ZHRoKHN1YnJ1biksIDApOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtMzU2LDE2
ICszNTYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2Vsc2UKLSAg
ICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIGZsb2F0IGRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhC
dWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAg
ICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKICNlbHNlCi0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50
IGxlbmd0aCA9IC0xKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOwog
I2VuZGlmCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxs
U2lkZXMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDggQEAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogI2luY2x1ZGUgIkNvcmVUZXh0U1BJ
LmgiCiAjZW5kaWYKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQxOSw3ICs0MTksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzCiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50IGNvZGVVbml0
c0xlbmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IGNvZGVVbml0c1swXSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKIAotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxlZnRUcnVuY2F0
ZVRvQnVmZmVyKGNvbgogICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXg7CiB9
CiAKLXN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJlciwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdI
YWNrcykKK3N0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgcmVuZGVy
ZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgZGlzYWJs
ZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBpZiAoZGlzYWJsZVJvdW5kaW5nSGFja3MpCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGlj
IGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbgogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVl
LCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1
bmNhdGUgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgVHJ1bmNh
dGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTI5NSw0MiArMjk1LDQyIEBAIHN0YXRpYyBTdHJpbmcgdHJ1
bmNhdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZlciwg
dHJ1bmNhdGVkTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1
bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBm
b250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmlu
ZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmluZyBT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0
cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MpOwogfQogCi1mbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcykKK2Zsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gc3RyaW5nV2lkdGgoZm9u
dCwgU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwg
IWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMs
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6
OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hh
Y2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjps
ZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVT
dHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFy
YWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZElu
c2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCiB7CiAgICAgcmV0dXJuIHRy
dW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZl
ciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMgKzMzLDIzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBGb250OwotICAgIAotICAg
IGNsYXNzIFN0cmluZ1RydW5jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFibGVSb3VuZGlu
Z0hhY2tzIH07Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlz
YWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRy
dW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxl
Um91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0
IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNr
c09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0
cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFs
c2UpOworY2xhc3MgRm9udENhc2NhZGU7CisKK2NsYXNzIFN0cmluZ1RydW5jYXRvciB7CitwdWJs
aWM6CisgICAgZW51bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxlUm91bmRpbmdI
YWNrcywgRW5hYmxlUm91bmRpbmdIYWNrcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRp
bmdIYWNrcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRl
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBy
aWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJv
b2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKIAotICAgICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAg
ICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcm
LCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVS
b3VuZGluZ0hhY2tzKTsKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENh
c2NhZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNz
IEdseXBoVG9QYXRoVHJhbnNsYXRvcjsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25z
dCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgPSAwOworICAgICAgICB2aXJ0dWFsIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRy
YW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0
YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRF
bXBoYXNpcykKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0
RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
Y3VycmVudENoYXJhY3RlcigwKQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
PSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2lzQWZ0
ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRy
KCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFp
bGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0t
OwogCkBAIC0yMjksOSArMjI5LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbgogICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVyU3BhY2luZygp
KQogICAgICAgICAgICAgICAgIHdpZHRoICs9IG1fZm9udC0+bGV0dGVyU3BhY2luZygpOwogCi0g
ICAgICAgICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udDo6Y2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICAgICAgICAgIGJvb2wg
dHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBpZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBi
b29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgewogICAgICAgICAgICAgICAgIC8v
IERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhw
YW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICBpZiAobV9l
eHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24g
PSBtX2V4cGFuc2lvbjsKQEAgLTI2OCw5ICsyNjgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1faXNBZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9y
bXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhCdWZmZXItPnNp
emUoKSwKICAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/IGdseXBoQnVm
ZmVyLT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3aWR0
aCkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykg
ewogICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsK
QEAgLTI3OCw3ICsyNzksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUluCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoYXJhY3RlcikpCisgICAg
ICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAhRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0
RW1waGFzaXMoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIGdseXBoID0gMDsKIAogICAgICAgICAv
LyBBZHZhbmNlIHBhc3QgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IGRlYWx0IHdpdGguCkBAIC0yODgs
NyArMjg5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogCiAg
ICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd29y
ZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgICAgICAvLyB0byBiZSBpbnRl
Z2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2VyIGJv
dW5kYXJ5LgotICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojpp
c1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGlmIChtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3Rl
cihjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKIAogICAg
ICAgICAgICAgLy8gU2luY2Ugd2lkdGhTaW5jZUxhc3RSb3VuZGluZyBjYW4gbG9zZSBwcmVjaXNp
b24gaWYgd2UgaW5jbHVkZSBtZWFzdXJlbWVudHMgZm9yCkBAIC0zMDEsNyArMzAyLDcgQEAgaW5s
aW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICJy
b3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QKICAgICAgICAgICAgIC8vIHdp
ZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91
bmRhcnkuCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpIDwgbV9y
dW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpKSkpCisgICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hh
cmFjdGVyKCoodGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQogICAgICAgICAgICAgICAgIHx8
IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpID49IG1fcnVuLmxlbmd0aCgpKSkgewogICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICsgd2lk
dGg7CiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyA9IGNlaWxmKHRvdGFs
V2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3JfaAogI2RlZmluZSBXaWR0aEl0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNW
R0dseXBoLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsK
K2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBTaW1wbGVGb250
RGF0YTsKIGNsYXNzIFRleHRSdW47CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBHbHlwaERhdGE7
CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNj
b3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2Up
OworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBi
b29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiYg
YXJhYmljRm9ybXMoKSB7IHJldHVybiBtX2FyYWJpY0Zvcm1zOyB9CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250JiBmb250KQor
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICAgICAgICAgaWYgKCFm
b250LmlzUHJpbnRlckZvbnQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBt
X2ZvbnQ7CiAKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXMuaCIKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjphZHZhbmNlCiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9p
bmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitE
YXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZs
b2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAg
IGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0
YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3Ro
KCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6
ek5HLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVy
LmgiCkBAIC0zOSw3ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50LCBpbnQs
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4
dEVtcGhhc2lzICovKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOwogICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKQEAgLTUwLDcgKzUw
LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIC8vIEZJ
WE1FOiBNYWMgcmV0dXJucyBhbiBpbml0aWFsIGFkdmFuY2UgaGVyZS4KICAgICByZXR1cm4gMDsK
IH0KLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZl
ciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGgu
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC02OCwyMiArNjgsMjIgQEAgZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50
LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiti
b29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0
IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QK
IHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVy
LnNoYXBlKCkpCkBAIC05Miw3ICs5Miw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb24KICAgICByZXR1cm4gMDsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCkgY29uc3QKIHsKICAgICBIYXJmQnV6elNoYXBl
ciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0
aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFw
ZXIuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgPGhiLWljdS5oPgpAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRp
YyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGUKICAgICAgICAgaW50IG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwg
bGVuZ3RoLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgdGFicyBhcyB0
aGV5IGFyZSBub3QgdHJlYXRlZCBhcyBzcGFjZXMgZm9yIHdvcmQtZW5kLgotICAgICAgICBpZiAo
Rm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCisgICAg
ICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVy
ICE9ICdcdCcpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7CiAgICAgICAgIGVsc2UgaWYg
KEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQog
ICAgICAgICAgICAgY2hhcmFjdGVyID0gemVyb1dpZHRoU3BhY2U7CkBAIC0xODMsNyArMTgzLDcg
QEAgc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25zdCBUZQogICAgIH0KIH0KIAot
SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1bikKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcihjb25zdCBGb250Q2Fz
Y2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQogICAgIDogbV9mb250KGZvbnQpCiAgICAg
LCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgoMCkKICAgICAsIG1fcnVuKHJ1bikKQEAgLTIxNCw5
ICsyMTQsOSBAQCBzdGF0aWMgdm9pZCBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFyCiAgICAg
ICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgVTE2X05FWFQoc291cmNl
LCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKICAgICAgICAgLy8gRG9uJ3Qgbm9y
bWFsaXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMgc3BhY2VzIGZvciB3b3JkLWVu
ZAotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVy
ICE9ICdcdCcpCisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rl
cikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7Ci0g
ICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQor
ICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJh
Y3RlcikpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKICAgICAgICAg
ZWxzZSBpZiAobm9ybWFsaXplTW9kZSA9PSBIYXJmQnV6elNoYXBlcjo6Tm9ybWFsaXplTWlycm9y
Q2hhcnMpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJNaXJyb3IoY2hhcmFjdGVyKTsK
QEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9u
c0ZvCiAKICAgICAgICAgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV0gPSBnbHlwaEluZm9zW2ld
LmNsdXN0ZXI7CiAKLSAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udDo6dHJlYXRBc1pl
cm9XaWR0aFNwYWNlKG1fbm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50Q2hhcmFjdGVySW5kZXhdKSkK
KyAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lk
dGhTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCiAgICAg
ICAgICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIAogICAgICAgICBpZiAoaXNDbHVz
dGVyRW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hhcmFjdGVySW5kZXgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNoYXBlci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIEhhcmZCdXp6U2hh
cGVyIHsKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBOb3JtYWxpemVNaXJyb3JD
aGFycwogICAgIH07CiAKLSAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250KiwgY29uc3QgVGV4
dFJ1biYpOworICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4
dFJ1biYpOwogICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CiAKICAgICBib29sIHNoYXBl
KEdseXBoQnVmZmVyKiA9IDApOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAKICAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0LCBmbG9hdCk7
CiAKLSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9u
dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VUNoYXJbXT4gbV9ub3JtYWxpemVkQnVmZmVyOwogICAg
IHVuc2lnbmVkIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKICAgICBjb25zdCBUZXh0UnVuJiBt
X3J1bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2Fj
aGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQAogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgog
I2ltcG9ydCAiUmVuZGVyVGhlbWVJT1MuaCIKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1Np
bXBsZUZvbnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0j
aW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZXJ2aWNl
c0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgog
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTQzLDEzICs0MywxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRMYXlvdXQgewogcHVibGljOgotICAg
IHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQp
CisgICAgc3RhdGljIGJvb2wgaXNOZWVkZWQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIHRleHQtPnN0eWxlKCkpOwotICAgICAg
ICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnQ6OkNvbXBsZXg7CisgICAgICAgIHJl
dHVybiBmb250LmNvZGVQYXRoKHJ1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAgICAgfQog
Ci0gICAgVGV4dExheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBmbG9h
dCB4UG9zKQorICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgICAgIDogbV9mb250KGZvbnQpCiAgICAgICAgICwg
bV9ydW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB4UG9zKSkKICAgICAgICAgLCBtX2Nv
bnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+KCZtX2ZvbnQs
IG1fcnVuLCB0cnVlKSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxiYWNrRm9u
dHMpOwogICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhT
b0ZhcigpOwotICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBGb250
Ojp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQorICAgICAgICBpZiAobV9mb250LndvcmRTcGFj
aW5nKCkgJiYgZnJvbSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkK
ICAgICAgICAgICAgIGJlZm9yZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgICAg
ICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUdseXBocywgZmFs
bGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1
bldpZHRoU29GYXIoKTsKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQqIHRleHQs
IGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxv
YXQgeFBvcykKICAgICB7CiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7CiAgICAgICAgIHJ1
bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSk7CkBAIC03OCwyNSArNzgs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJ1bjsKICAgICB9CiAKLSAgICAvLyBDb21w
bGV4VGV4dENvbnRyb2xsZXIgaGFzIG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9udCBhbmQgVGV4
dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnQgbV9mb250Owor
ICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBG
b250Q2FzY2FkZSBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgor
ICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICBUZXh0UnVuIG1fcnVuOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDb21wbGV4VGV4dENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07CiAKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAorUGFzc093blB0cjxUZXh0
TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGZsb2F0
IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAogewogICAgIGlmICghY29sbGFw
c2VXaGl0ZVNwYWNlIHx8ICFUZXh0TGF5b3V0Ojppc05lZWRlZCh0ZXh0LCAqdGhpcykpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dExheW91dCh0
ZXh0LCAqdGhpcywgeFBvcykpOwogfQogCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5
b3V0KiBsYXlvdXQpCit2b2lkIEZvbnRDYXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4dExheW91dCog
bGF5b3V0KQogewogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnQ6OndpZHRoKFRl
eHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitmbG9hdCBGb250Q2FzY2FkZTo6
d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKIHsKICAgICByZXR1
cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBAIC0xMTUsNyAr
MTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxvYQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
KQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9u
dENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3Jp
dGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1f
cnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0xNDQsNyArMTQ0LDcgQEAgQ29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRybwogICAgICAgICBtX2V4cGFuc2lv
blBlck9wcG9ydHVuaXR5ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBpc0FmdGVyRXhw
YW5zaW9uID0gbV9hZnRlckV4cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4
dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAg
IHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRM
LCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1f
cnVuLmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50LS07CiAKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
bmV4dENoID0gKihtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29t
cGxleFRleHRSdW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7CiAKLSAgICAgICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAgICAgICAgICBD
R0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udERhdGEuc3BhY2VHbHlwaCgpIDogZ2x5
cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1Np
emVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKICNp
ZiBQTEFURk9STShJT1MpCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmFkanVzdEdseXBocwogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyAmJiBtX3J1
bi5hbGxvd1RhYnMoKSkKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gbV9mb250LnRh
YldpZHRoKGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxX
aWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZvbnQ6
OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgeworICAgICAgICAg
ICAgZWxzZSBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRy
ZWF0QXNTcGFjZSkgewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwogICAgICAg
ICAgICAgICAgIGdseXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOwogICAgICAgICAgICAgfQpA
QCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlw
aHMKICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBtX2ZvbnQubGV0dGVyU3Bh
Y2luZygpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRpb24gYW5kIHdv
cmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZSB8fCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2
ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IHByZXZpb3VzRXhwYW5zaW9uID0gbV9leHBhbnNpb247CkBAIC02ODUsMTIgKzY4NSwx
MyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAg
ICAvLyBXZSBhZGp1c3QgdGhlIHdpZHRoIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhICJ3b3Jk
IiB0byBlbnN1cmUgYW4gaW50ZWdlciB3aWR0aC4gCiAgICAgICAgICAgICAvLyBGb3JjZSBjaGFy
YWN0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdvcmQgYm91bmRhcmllcyBmb3IgdGhl
IHJvdW5kaW5nIGhhY2sgCiAgICAgICAgICAgICAvLyB0byBiZSBpbnRlZ2VyIHdpZHRoLCBzbyB0
aGUgZm9sbG93aW5nIHdvcmRzIHdpbGwgc3RhcnQgb24gYW4gaW50ZWdlciBib3VuZGFyeS4gCi0g
ICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojppc1JvdW5k
aW5nSGFja0NoYXJhY3RlcihjaCkpIAorICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJv
dW5kaW5nKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoKSkgCiAg
ICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGNlaWxDR0Zsb2F0KGFkdmFuY2Uud2lkdGgp
OyAKIAogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBp
cyBhICJyb3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QgdGhlIAotICAgICAg
ICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4g
aW50ZWdlciBib3VuZGFyeS4gCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgIWxhc3RHbHlwaCAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0
Q2gpKSB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkpIHsgCisgICAg
ICAgICAgICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBh
biBpbnRlZ2VyIGJvdW5kYXJ5LgorICAgICAgICAgICAgYm9vbCBuZWVkc1JvdW5kaW5nRm9yQ2hh
cmFjdGVyID0gbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEdseXBoICYmIEZvbnRD
YXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0Q2gpOworICAgICAgICAgICAgaWYg
KG5lZWRzUm91bmRpbmdGb3JDaGFyYWN0ZXIgfHwgKG1fcnVuLmFwcGx5UnVuUm91bmRpbmcoKSAm
JiBsYXN0R2x5cGgpKSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCB0b3RhbFdpZHRoID0gd2lk
dGhTaW5jZUxhc3RDb21taXQgKyBhZHZhbmNlLndpZHRoOyAKICAgICAgICAgICAgICAgICB3aWR0
aFNpbmNlTGFzdENvbW1pdCA9IGNlaWxDR0Zsb2F0KHRvdGFsV2lkdGgpOyAKICAgICAgICAgICAg
ICAgICBDR0Zsb2F0IGV4dHJhV2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1pdCAtIHRvdGFsV2lk
dGg7IApAQCAtNzA5LDcgKzcxMCw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHMKICAgICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCArPSBhZHZhbmNl
LndpZHRoOyAKIAogICAgICAgICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBtYXJrcyBzaG91bGQg
cmVjZWl2ZSBhIHRleHQgZW1waGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21iaW5lIHdpdGggYSBz
cGFjZS4KLSAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZvbnQ6OmNhblJl
Y2VpdmVUZXh0RW1waGFzaXMoY2gpIHx8IChVX0dFVF9HQ19NQVNLKGNoKSAmIFVfR0NfTV9NQVNL
KSkpCisgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgKCFGb250Q2FzY2FkZTo6
Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaCkgfHwgKFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19N
X01BU0spKSkKICAgICAgICAgICAgICAgICBnbHlwaCA9IDA7CiAKICAgICAgICAgICAgIGFkdmFu
Y2UuaGVpZ2h0ICo9IC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsK
IGNsYXNzIFRleHRSdW47CiAKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBHbHlwaEl0ZXJhdGlvblN0
eWxlIHsgSW5jbHVkZVBhcnRpYQogLy8gY29tcGxleCBzY3JpcHRzIG9uIE9TIFguCiBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0Q29udHJvbGxl
cihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdE
aXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAgQ29tcGxleFRl
eHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5
VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBlbWl0IGdseXBocyB1cCB0byB0aGUgc3BlY2lmaWVk
IGNoYXJhY3Rlci4KICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9
IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0xMzgsNyArMTM4
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBtX3J1bkluZGljZXM7CiAg
ICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9JbmRleDsKIAot
ICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250Owog
ICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogICAgIGJvb2wgbV9pc0xUUk9ubHk7CiAgICAgYm9v
bCBtX21heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgog
I2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgi
CiAKQEAgLTQwLDE5ICs0MCwxOSBAQAogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDogTlNB
cnJheSB7CiAgICAgQHByaXZhdGUKLSAgICBjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udDsKKyAg
ICBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZSogX2ZvbnQ7CiAgICAgVUNoYXIzMiBfY2hhcmFj
dGVyOwogICAgIE5TVUludGVnZXIgX2NvdW50OwogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250
RGVzY3JpcHRvclJlZj4sIDE2PiBfZm9udERlc2NyaXB0b3JzOwogfQogCi0tIChpZClpbml0V2l0
aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJh
Y3RlcjsKKy0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZv
bnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJhY3RlcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRp
b24gV2ViQ2FzY2FkZUxpc3QKIAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpG
b250Kilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXIKKy0gKGlkKWluaXRXaXRoRm9u
dDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNo
YXJhY3RlcgogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtNjAsNyArNjAsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNv
cmU6OkZvbnQqCiAgICAgX2ZvbnQgPSBmb250OwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7
CiAKLSAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250
IGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCisgICAgLy8gQnkg
dGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENhc2NhZGUgaGFzIGFs
cmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKICAgICAvLyBGb250RGF0YSwg
c28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdoaWxlICghX2Zv
bnQtPmZhbGxiYWNrUmFuZ2VzQXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAgX2NvdW50Kys7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEku
aCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJT
aW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2ltcG9ydCAi
TlNGb250U1BJLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb250R2x5
cGhzLmgiCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBG
b250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4p
OwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBG
b250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleAogICAgIHNlbGVjdGlvblJlY3Quc2V0
V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9udDo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3Qg
Zm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFk
dmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRv
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRF
bXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAtNzUsNyAr
NzUsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0
dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9u
dCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAt
OTMsNyArOTMsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250CiAg
ICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZl
ciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgp
KSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpm
bG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhp
cywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVyZmxvdykgewpA
QCAtMTE2LDEzICsxMTYsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbgogICAgIHJldHVybiBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKIH0KIAotaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9h
dCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjpv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIHJldHVybiBjb250cm9sbGVyLm9m
ZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRlOjpmb250RGF0
YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7CiAgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMu
bW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0U1BJ
LmgiCkBAIC01OCwxMiArNTgsMTIgQEAgU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRHZXRUZXh0RWZm
ZWN0c0NhdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgRm9udDo6Y2FuUmV0dXJuRmFs
bGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZh
bGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogewog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyB2b2lkIHNldENH
Rm9udFJlbmRlcmluZ01vZGUoQ0dDb24KIH0KICNlbmRpZgogCi12b2lkIEZvbnQ6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwog
ICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTUyNiw3ICs1MjYsNyBAQCB2b2lkIE1h
Y0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZSgpCiAgICAgfSB3aGlsZSAobV9mb250RGF0
YS0+aXNTVkdGb250KCkgJiYgbV9pbmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAot
RGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0CitEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVy
c2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRl
eHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYg
KGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAg
LTUzNCw3ICs1MzQsNyBAQCBEYXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dp
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNl
dHNJblN0cmluZygpOwogICAgIGZsb2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAh
PSBGb250OjpDb21wbGV4KQorICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpD
b21wbGV4KQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRl
eHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAg
IGRlbHRhWCA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4u
bGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBEYXNoQXJyYXkgRm9u
dDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Ojpwcmlt
YXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCiAgICAgY29uc3QgYXV0byYgZm9u
dERhdGEgPSBwcmltYXJ5Rm9udERhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29yZUdy
YXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKLSNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgog
I2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0oSU9TKQpA
QCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hh
CiAgICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSAhPSBSZWd1
bGFyV2lkdGggfHwgZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAgICAgICAgLy8g
SWRlb2dyYXBocyBkb24ndCBoYXZlIGEgdmVydGljYWwgdmFyaWFudCBvciB3aWR0aCB2YXJpYW50
cy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltpXSkpCisgICAg
ICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4
ICszMiw4IEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0
U1BJLmgiCiAjaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQg
IkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNj
cmlwdGlvbi5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTEyNyw3ICsxMjcsNyBA
QCBzdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChIREMgCiAgICAgcmV0dXJuIHBh
dGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAogI2lu
Y2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAtNDEsMTcg
KzQxLDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ym9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKIHsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhz
SW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnQ6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZv
bnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZh
bmNlKGZyb20pOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVm
b3JlV2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0
CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAg
IGlmIChmb3JUZXh0RW1waGFzaXMpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0RW1w
aGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4KQEAgLTky
LDcgKzkyLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAg
IHJldHVybiBiZWZvcmVXaWR0aDsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZv
bnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAg
LTEwOSw3ICsxMDksNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250
CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVy
IGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVt
cGhhc2lzKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1
ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQu
eSgpKSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRl
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRo
aXMsIHJ1biwgZmFsbGJhY2tGb250cyk7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5n
dGgoKSk7CkBAIC0xMzMsMTAgKzEzMywxMCBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29t
cGxleFRleHQoY29uCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwogfQog
Ci1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK2lu
dCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhU
TUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVt
YmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgorICAgIC8vIHRvIEZv
bnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80
MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KICAgICBpbnQgeCA9IHN0YXRpY19jYXN0
PGludD4oeEZsb2F0KTsKIAogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlz
LCBydW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNj
cmliZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC00MSw3ICs0MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIHRoYXQgZG9lcyBzdHVmZiBpbiB0aGF0IG1ldGhv
ZCBpbnN0ZWFkIG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yLiAgSGF2ZSBh
ZHZhbmNlKCkKIC8vIHRha2UgdGhlIEdseXBoQnVmZmVyIGFzIGFuIGFyZyBzbyB0aGF0IHdlIGRv
bid0IGhhdmUgdG8gcG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVuCiAvLyBtZWFzdXJpbmcu
Ci1VbmlzY3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnQqIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzKQorVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihj
b25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCiAgICAgOiBtX2ZvbnQoKmZvbnQpCiAg
ICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykKQEAg
LTYzLDcgKzYzLDcgQEAgVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcgog
ICAgIGVsc2UgewogICAgICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOwogICAgICAgICBmb3IgKGlu
dCBzID0gMDsgcyA8IG1fcnVuLmxlbmd0aCgpOyBzKyspIHsKLSAgICAgICAgICAgIGlmIChGb250
Ojp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQorICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0
cmVhdEFzU3BhY2UobV9ydW5bc10pKQogICAgICAgICAgICAgICAgIG51bVNwYWNlcysrOwogICAg
ICAgICB9CiAKQEAgLTM1MSw3ICszNTEsNyBAQCBib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNo
YXBlQW5kUGxhY2VJCiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAx
KSk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFGb250Ojp0cmVhdEFzU3BhY2UoY2FuZGlk
YXRlU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjp0cmVhdEFz
U3BhY2UoY2FuZGlkYXRlU3BhY2UpKQogICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSAr
PSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVW5pc2NyaWJlQ29udHJvbGxlcl9o
CiAKICNpbmNsdWRlIDx1c3AxMC5oPgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVW5p
c2NyaWJlQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlcihjb25z
dCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDApOworICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENh
c2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBtZWFzdXJlL3BsYWNlIHVw
IHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgogICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXIqID0gMCk7CkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6ICAgIAogICAg
ICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMs
CiAgICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVz
KTsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9m
b250OwogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdp
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25z
LmgiCiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJG
b250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiUGFnZS5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbQkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0
ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJD
b3JlVGhyZWFkLmgiCiAjaW1wb3J0IDxJbWFnZUlPL0ltYWdlSU8uaD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAjaW1wb3J0
ICJCaXRtYXBJbWFnZS5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJG
b250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9u
LmgiCiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5o
IgpAQCAtMTU3LDEwICsxNTcsMTAgQEAgY29uc3QgZmxvYXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9
IDEwOwogCiAvLyBGSVhNRSAtIHdlIHNob3VsZCBtb3ZlIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBv
ZiBOU1N0cmluZyBleHRyYXMgdG8gV2ViQ29yZQogICAgIAotc3RhdGljIEZvbnQmIGZvbnRGcm9t
TlNGb250KE5TRm9udCAqZm9udCkKK3N0YXRpYyBGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQo
TlNGb250ICpmb250KQogewogICAgIHN0YXRpYyBOU0ZvbnQgKmN1cnJlbnRGb250OwotICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChGb250LCBjdXJyZW50UmVuZGVyZXIsICgpKTsK
KyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRm9udENhc2NhZGUsIGN1cnJlbnRS
ZW5kZXJlciwgKCkpOwogICAgIAogICAgIGlmIChbZm9udCBpc0VxdWFsOmN1cnJlbnRGb250XSkK
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJlcjsKQEAgLTE2OSw3ICsxNjksNyBAQCBzdGF0
aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250CiAgICAgY3VycmVudEZvbnQgPSBm
b250OwogICAgIENGUmV0YWluKGN1cnJlbnRGb250KTsKICAgICBGb250UGxhdGZvcm1EYXRhIGYo
Zm9udCwgW2ZvbnQgcG9pbnRTaXplXSk7Ci0gICAgY3VycmVudFJlbmRlcmVyID0gRm9udChmLCAh
W1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsK
KyAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250Q2FzY2FkZShmLCAhW1tOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICByZXR1cm4gY3VycmVu
dFJlbmRlcmVyOwogfQogCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIGZsb2F0IHdpZHRoV2l0
aEZvbnQoTlNTdHJpbmcgKnN0cgogICAgIFtzdHJpbmcgZ2V0Q2hhcmFjdGVyczpidWZmZXIuZGF0
YSgpXTsKICAgICAKICAgICBpZiAoY2FuVXNlRmFzdFJlbmRlcmVyKGJ1ZmZlci5kYXRhKCksIGxl
bmd0aCkpIHsKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQs
IFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
aXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9u
dFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgICAgIFRleHRSdW4g
cnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdI
YWNrcygpOwogICAgICAgICByZXR1cm4gd2ViQ29yZUZvbnQud2lkdGgocnVuKTsKQEAgLTIyNCw3
ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3QXRQb2ludChOU1N0cmluZyAqc3RyaW5nCiAgICAg
ICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4
dCwgMSwgLTEpOwogICAgICAgICAgICAgCi0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBs
YXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5n
VG9TY3JlZW5dLCBBbnRpYWxpYXNlZCk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNvcmVGb250
KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbbnNDb250ZXh0IGlz
RHJhd2luZ1RvU2NyZWVuXSwgQW50aWFsaWFzZWQpOwogICAgICAgICBUZXh0UnVuIHJ1bihidWZm
ZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKIAotICAgIHZp
cnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250
JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1
YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIExlbmd0aEJv
eCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJv
eCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKLSAgICB2aXJ0dWFsIExlbmd0
aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3Ro
Qm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVu
Z3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2
aXJ0dWFsIExlbmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRy
b2xQYXJ0IHBhcnQpIGNvbnN0IHsgcmV0dXJuIHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQ7IH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgVGhlbWUqIHBsYXRmb3JtVGhlbWUoKQogCiAvLyBI
ZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgYSBidW5jaCBvZiBkaWZmZXJlbnQgY29udHJvbCBwYXJ0
cy4KIAotc3RhdGljIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnQm
IGZvbnQpCitzdGF0aWMgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQpCiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsK
ICAgICBpZiAoZm9udFNpemUgPj0gMTYpCkBAIC0xNzIsNyArMTcyLDcgQEAgc3RhdGljIExlbmd0
aFNpemUgc2l6ZUZyb21OU0NvbnRyb2xTaXplKAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBMZW5ndGhTaXplIHNpemVGcm9tRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5n
dGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6OmFycmF5PElu
dFNpemUsIDM+JiBzaXplcykKK3N0YXRpYyBMZW5ndGhTaXplIHNpemVGcm9tRm9udChjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9v
bUZhY3RvciwgY29uc3Qgc3RkOjphcnJheTxJbnRTaXplLCAzPiYgc2l6ZXMpCiB7CiAgICAgcmV0
dXJuIHNpemVGcm9tTlNDb250cm9sU2l6ZShjb250cm9sU2l6ZUZvckZvbnQoZm9udCksIHpvb21l
ZFNpemUsIHpvb21GYWN0b3IsIHNpemVzKTsKIH0KQEAgLTI5Myw3ICsyOTMsNyBAQCBzdGF0aWMg
Y29uc3QgaW50KiBjaGVja2JveE1hcmdpbnMoTlNDb250CiAgICAgcmV0dXJuIG1hcmdpbnNbY29u
dHJvbFNpemVdOwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6ZSBjaGVja2JveFNpemUoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikK
K3N0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikKIHsKICAgICAv
LyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghem9vbWVkU2l6ZS53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKQEAg
LTMyMyw3ICszMjMsNyBAQCBzdGF0aWMgY29uc3QgaW50KiByYWRpb01hcmdpbnMoTlNDb250cm9s
CiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6
ZSByYWRpb1NpemUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6
ZSwgZmxvYXQgem9vbUZhY3RvcikKK3N0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9v
bUZhY3RvcikKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVj
aWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghem9vbWVkU2l6ZS53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRy
aW5zaWNPckF1dG8oKSkKQEAgLTU5Myw3ICs1OTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RkOjphcnJh
eTxJbnRTaXplLCAzPiYgc3RlCiAKIC8vIFdlIGRvbid0IHVzZSBjb250cm9sU2l6ZUZvckZvbnQo
KSBmb3Igc3RlcHBlcnMgYmVjYXVzZSB0aGUgc3RlcHBlciBoZWlnaHQKIC8vIHNob3VsZCBiZSBl
cXVhbCB0byBvciBsZXNzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdGV4dCBmaWVsZCBoZWlnaHQs
Ci1zdGF0aWMgTlNDb250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JGb250KGNvbnN0IEZv
bnQmIGZvbnQpCitzdGF0aWMgTlNDb250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JGb250
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4
ZWxTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDE4KQpAQCAtNjczLDcgKzY3Myw3IEBAIGlu
dCBUaGVtZU1hYzo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQKICAgICByZXR1cm4gVGhlbWU6
OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KHBhcnQpOwogfQogCi1Gb250RGVzY3JpcHRpb24g
VGhlbWVNYWM6OmNvbnRyb2xGb250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRy
b2xGb250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OiB7CkBAIC02OTEsNyArNjkxLDcgQEAgRm9udERlc2NyaXB0aW9uIFRoZW1l
TWFjOjpjb250cm9sRm9udChDbwogICAgIH0KIH0KIAotTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29u
dHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3Ro
U2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aFNpemUgVGhl
bWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKQEAg
LTcxMCw3ICs3MTAsNyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9s
CiAgICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QK
K0xlbmd0aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgpAQCAtNzI3
LDcgKzcyNyw3IEBAIExlbmd0aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZSgKICAg
ICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQg
em9vbUZhY3RvcikgY29uc3QKK0xlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7
CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKQEAgLTczOSw3ICs3MzksNyBAQCBMZW5n
dGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvCiAgICAgfQogfQogCi1MZW5ndGhC
b3ggVGhlbWVNYWM6OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dAorTGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0
IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2Ug
UHVzaEJ1dHRvblBhcnQ6IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRn
ZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dpZGdldE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9ydCAi
Q2hyb21lLmgiCiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1w
b3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIK
ICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9j
YWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFBMQVRGT1JNKElPUykKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsK
ICNlbmRpZgogCiBjbGFzcyBMb2NhbGUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIExvY2FsaXplZERh
dGVDYWNoZV9oCiAKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiBjbGFzcyBMb2NhbGl6ZWREYXRlQ2FjaGUgewog
cHVibGljOgogICAgIE5TRGF0ZUZvcm1hdHRlciAqZm9ybWF0dGVyRm9yRGF0ZVR5cGUoRGF0ZUNv
bXBvbmVudHM6OlR5cGUpOwotICAgIGZsb2F0IG1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVD
b21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250JiwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmKTsK
KyAgICBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOwogICAgIHZvaWQg
bG9jYWxlQ2hhbmdlZCgpOwogCiBwcml2YXRlOgpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgog
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIGZsb2F0PiBEYXRlVHlwZU1heFdpZHRoTWFwOwogICAg
IERhdGVUeXBlRm9ybWF0dGVyTWFwIG1fZm9ybWF0dGVyTWFwOwogICAgIERhdGVUeXBlTWF4V2lk
dGhNYXAgbV9tYXhXaWR0aE1hcDsKLSAgICBGb250IG1fZm9udDsKKyAgICBGb250Q2FzY2FkZSBt
X2ZvbnQ7CiAKICAgICBmcmllbmQgTG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2Fj
aGUoKTsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8TG9jYWxpemVkRGF0ZUNhY2hlPjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6
ZWREYXRlQ2FjaGUubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2Fj
aGUuaCIKIAotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBv
cnQgIlRleHRSdW4uaCIKICNpbXBvcnQgPG1hdGguaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CkBAIC01Miw3ICs1Miw2IEBAIHN0YXRpYyB2b2lkIF9sb2NhbGVDaGFuZ2VkKENGTm90aWZp
Y2F0aW8KIH0KIAogTG9jYWxpemVkRGF0ZUNhY2hlOjpMb2NhbGl6ZWREYXRlQ2FjaGUoKQotICAg
IDogbV9mb250KEZvbnQoKSkKIHsKICAgICAvLyBMaXN0ZW4gdG8gQ0YgTm90aWZpY2F0aW9ucyBm
b3IgbG9jYWxlIGNoYW5nZSwgYW5kIGNsZWFyIHRoZSBjYWNoZSB3aGVuIGl0IGRvZXMuCiAgICAg
Q0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExv
Y2FsQ2VudGVyKCksICh2b2lkKil0aGlzLCBfbG9jYWxlQ2hhbmdlZCwKQEAgLTg0LDE0ICs4Mywx
NCBAQCBOU0RhdGVGb3JtYXR0ZXIgKkxvY2FsaXplZERhdGVDYWNoZTo6Zm9yCiAgICAgcmV0dXJu
IGRhdGVGb3JtYXR0ZXI7CiB9CiAKLWZsb2F0IExvY2FsaXplZERhdGVDYWNoZTo6bWF4aW11bVdp
ZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSwgY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmIG1lYXN1cmVyKQorZmxvYXQgTG9jYWxpemVkRGF0
ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBl
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmIG1lYXN1
cmVyKQogewogICAgIGludCBrZXkgPSBzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpOwogICAgIGlmICht
X2ZvbnQgPT0gZm9udCkgewogICAgICAgICBpZiAobV9tYXhXaWR0aE1hcC5jb250YWlucyhrZXkp
KQogICAgICAgICAgICAgcmV0dXJuIG1fbWF4V2lkdGhNYXAuZ2V0KGtleSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgbV9mb250ID0gRm9udChmb250KTsKKyAgICAgICAgbV9mb250ID0gRm9udENh
c2NhZGUoZm9udCk7CiAgICAgICAgIG1fbWF4V2lkdGhNYXAuY2xlYXIoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgIkVsbGlwc2lzQm94LmgiCiAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC01NCw3ICs1NCw3IEBAIHZv
aWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgc2V0U2hhZG93
ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQo
KTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgp
OwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9u
ZSkgewogICAgICAgICBwYWludFNlbGVjdGlvbihjb250ZXh0LCBwYWludE9mZnNldCwgbGluZVN0
eWxlLCBmb250KTsKIApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50
TWFya3VwQm94KFBhaW50SW4KIEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQog
ewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsK
LSAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGNvbnN0IFJvb3RJ
bmxpbmVCb3gmIHJvb3RCb3ggPSByb290KCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFs
d2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAg
ICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCksIHkoKSArIHJvb3RC
b3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpLCAwLCByb290Qm94LnNl
bGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7CkBAIC0xMTksNyArMTE5
LDcgQEAgSW50UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiAgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiB9CiAKLXZvaWQgRWxsaXBzaXNCb3g6OnBh
aW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQp
Cit2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBz
dHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3Ig
YyA9IGJsb2NrRmxvdygpLnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludE1hcmt1cEJveChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIGludCBoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2hlaWdodDsgfQogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fc2VsZWN0aW9u
U3RhdGU7IH0KLSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9p
ZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYsIGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmKTsKICAgICBJbmxpbmVCb3gqIG1h
cmt1cEJveCgpIGNvbnN0OwogCiAgICAgYm9vbCBtX3Nob3VsZFBhaW50TWFya3VwQm94OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRk
VG9MaW5lKElubGluZUJveCoKICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZl
U2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxk
LT5iZWhhdmVzTGlrZVRleHQoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigp
LmlzTGluZUJyZWFrKCkgfHwgY2hpbGQtPnJlbmRlcmVyKCkucGFyZW50KCkgIT0gJnJlbmRlcmVy
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmlj
cygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udCgp
LmZvbnRNZXRyaWNzKCkpCisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS5mb250Q2Fz
Y2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAo
Y2hpbGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHx8IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQo
KQogICAgICAgICAgICAgICAgICAgICB8fCAocGFyZW50U3R5bGUudmVydGljYWxBbGlnbigpICE9
IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3goKSkgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFs
aWduKCkgIT0gQkFTRUxJTkUpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2Vu
ZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CkBAIC0xMzgsNyArMTM4
LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KgogICAgICAgICAg
ICAgICAgIGF1dG8mIGNoaWxkRmxvd0JveCA9IGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpjaGls
ZCk7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGNoaWxkJ3MgYml0LCBhbmQgdGhlbiBh
bHNvIGNoZWNrIGZvciBkaWZmZXJlbmNlcyBpbiBmb250LCBsaW5lLWhlaWdodCwgdmVydGljYWwt
YWxpZ24KICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkRmxvd0JveC5kZXNjZW5kYW50c0hhdmVT
YW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVu
dFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRM
aW5lR2FwKGNoaWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgICAgICAgICAg
ICAgIHx8ICFwYXJlbnRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRp
Y2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRN
ZXRyaWNzKCkpCiAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQo
KSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKQogICAgICAgICAgICAgICAgICAgICB8fCAocGFy
ZW50U3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3go
KSkgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAg
ICAgICAgICAgfHwgY2hpbGRTdHlsZS5oYXNCb3JkZXIoKSB8fCBjaGlsZFN0eWxlLmhhc1BhZGRp
bmcoKSB8fCBjaGlsZFN0eWxlLmhhc1RleHRDb21iaW5lKCkpCkBAIC0zODgsNyArMzg4LDcgQEAg
ZmxvYXQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hSYW5nZUluSW5saQogICAgICAgICAgICAgUmVu
ZGVyVGV4dCYgcmVuZGVyVGV4dCA9IHRleHRCb3gucmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlm
IChyZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGlmIChuZWVkc1dv
cmRTcGFjaW5nICYmIGlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdCh0ZXh0
Qm94LnN0YXJ0KCkpKSkKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gdGV4dEJv
eC5saW5lU3R5bGUoKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gdGV4dEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFj
aW5nKCk7CiAgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXds
aW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQodGV4dEJveC5lbmQoKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgdGV4dEJveC5zZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdCk7CkBAIC00
NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgog
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwog
ICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHls
ZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAg
fHwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxH
bHlwaHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsK
QEAgLTQ2MCw3ICs0NjAsNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBo
aWNCCiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKS5yZXF1
aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUodGV4dEJveERhdGFNYXApKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5s
aW5lU3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKQEAgLTg3Myw3ICs4NzMsNyBAQCBpbmxp
bmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzCiAKICAgICBib29sIGVtcGhhc2lz
TWFya0lzQWJvdmU7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4
dEVtcGhhc2lzTWFya05vbmUgJiYgdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3Zl
KGxpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSkpIHsKLSAgICAgICAgaW50IGVtcGhhc2lz
TWFya0hlaWdodCA9IGxpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGxpbmVTdHls
ZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVp
Z2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGxpbmVTdHls
ZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICBpZiAoZW1waGFzaXNNYXJrSXNB
Ym92ZSA9PSAhbGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkKICAgICAgICAg
ICAgIHRvcEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1pbih0b3BHbHlwaE92ZXJmbG93LCAtZW1waGFz
aXNNYXJrSGVpZ2h0KTsKICAgICAgICAgZWxzZQpAQCAtODgyLDcgKzg4Miw3IEBAIGlubGluZSB2
b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXMKIAogICAgIC8vIElmIGxldHRlci1zcGFj
aW5nIGlzIG5lZ2F0aXZlLCB3ZSBzaG91bGQgZmFjdG9yIHRoYXQgaW50byByaWdodCBsYXlvdXQg
b3ZlcmZsb3cuIChFdmVuIGluIFJUTCwgbGV0dGVyLXNwYWNpbmcgaXMKICAgICAvLyBhcHBsaWVk
IHRvIHRoZSByaWdodCwgc28gdGhpcyBpcyBub3QgYW4gaXNzdWUgd2l0aCBsZWZ0IG92ZXJmbG93
LgotICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5m
b250KCkubGV0dGVyU3BhY2luZygpKTsKKyAgICByaWdodEdseXBoT3ZlcmZsb3cgLT0gc3RkOjpt
aW4oMCwgKGludClsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5sZXR0ZXJTcGFjaW5nKCkpOwogCiAg
ICAgTGF5b3V0VW5pdCB0ZXh0U2hhZG93TG9naWNhbFRvcDsKICAgICBMYXlvdXRVbml0IHRleHRT
aGFkb3dMb2dpY2FsQm90dG9tOwpAQCAtMTUzNCwxMCArMTUzNCwxMCBAQCBMYXlvdXRVbml0IElu
bGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5uCiAgICAgICAgICAgICBib29sIGVtcGhhc2lzTWFy
a0lzQWJvdmU7CiAgICAgICAgICAgICBpZiAoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFy
aygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYmIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpj
aGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjaGlsZExpbmVTdHlsZSwgZW1waGFz
aXNNYXJrSXNBYm92ZSkgJiYgZW1waGFzaXNNYXJrSXNBYm92ZSkgewogICAgICAgICAgICAgICAg
IGlmICghY2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9w
KCkgLSBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0
eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCB0
b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5m
b250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFz
aXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChy
ZXN1bHQsIGFsbG93ZWRQb3NpdGlvbiAtIHRvcE9mRW1waGFzaXNNYXJrKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9tT2ZFbXBoYXNpc01h
cmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhh
c2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9n
aWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtI
ZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFy
ayAtIGFsbG93ZWRQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMTU4MywxMCArMTU4MywxMCBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVV
bmRlckFuCiAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqY2hpbGQpLmVtcGhh
c2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY2hpbGRMaW5lU3R5bGUsIGVtcGhhc2lzTWFya0lzQWJv
dmUpOwogICAgICAgICAgICAgaWYgKGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAh
PSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiAhZW1waGFzaXNNYXJrSXNBYm92ZSkgewogICAgICAg
ICAgICAgICAgIGlmICghY2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsg
PSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lz
TWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQt
PmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNN
YXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYm90dG9tT2ZFbXBoYXNp
c01hcmsgLSBhbGxvd2VkUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9n
aWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGls
ZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNo
aWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0
eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0gdG9wT2ZFbXBoYXNpc01hcmsp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ1LDE0ICsyNDUsMTQgQEAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0
QgogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotc3RhdGljIGNvbnN0IEZvbnQmIGZvbnRUb1VzZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyKQorc3Rh
dGljIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250VG9Vc2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENv
bWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpKSB7CiAgICAgICAgIGNv
bnN0IGF1dG8mIHRleHRDb21iaW5lUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4
dD4ocmVuZGVyZXIpOwogICAgICAgICBpZiAodGV4dENvbWJpbmVSZW5kZXJlci5pc0NvbWJpbmVk
KCkpCiAgICAgICAgICAgICByZXR1cm4gdGV4dENvbWJpbmVSZW5kZXJlci50ZXh0Q29tYmluZUZv
bnQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0eWxlLmZvbnQoKTsKKyAgICByZXR1cm4gc3R5bGUu
Zm9udENhc2NhZGUoKTsKIH0KIAogTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVj
dGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdApAQCAtMjY2LDcgKzI2Niw3
IEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb24KICAgICBMYXlvdXRV
bml0IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwogICAgIExheW91dFVuaXQg
c2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogCiAgICAg
U3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0g
ZVBvcyA9PSBtX2xlbiAmJiBoYXNIeXBoZW4oKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIHNlbGVjdGlvblBhaW50
U3R5bGUgPSB0ZXh0UGFpbnRTdHlsZTsKIAogICAgIC8vIFNldCBvdXIgZm9udC4KLSAgICBjb25z
dCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsK
ICAgICAvLyAxLiBQYWludCBiYWNrZ3JvdW5kcyBiZWhpbmQgdGV4dCBpZiBuZWVkZWQuIEV4YW1w
bGVzIG9mIHN1Y2ggYmFja2dyb3VuZHMgaW5jbHVkZSBzZWxlY3Rpb24KICAgICAvLyBhbmQgY29t
cG9zaXRpb24gdW5kZXJsaW5lcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VUZXh0Q2xpcCAmJiAh
aXNQcmludGluZykgewpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uU3RhcnRFbmQoaW4KICAgICBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwg
KGludCltX2xlbik7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQor
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQogewogI2lmIEVOQUJM
RShURVhUX1NFTEVDVElPTikKICAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCkBA
IC03MzcsNyArNzM3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFw
aAogI2VuZGlmCiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0
UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
aW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQogewogICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0Owog
ICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwpAQCAtMTA1OCw3
ICsxMDU4LDcgQEAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaQogICAg
IH0KIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3Jp
Z2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgZ3JhbW1hcikKIHsKICAgICAvLyBO
ZXZlciBwcmludCBzcGVsbGluZy9ncmFtbWFyIG1hcmtlcnMgKDUzMjc4ODcpCiAgICAgaWYgKHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpKQpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKAogICAgIGNvbnRleHQuZHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94
T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJU
eXBlKG1hcmtlci50eXBlKCkpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRN
YXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4
dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgTGF5b3V0VW5pdCBz
ZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsKIApAQCAtMTE1OSw3ICsx
MTU5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcgogICAgIH0K
IH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2Vy
KFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGb250JiBmb250KQordm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJl
cGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICAvLyBSZXBs
YWNlbWVudCBtYXJrZXJzIGFyZSBub3QgYWN0dWFsbHkgZHJhd24sIGJ1dCB0aGVpciByZWN0cyBu
ZWVkIHRvIGJlIGNvbXB1dGVkIGZvciBoaXQgdGVzdGluZy4KICAgICBMYXlvdXRVbml0IHRvcCA9
IHNlbGVjdGlvblRvcCgpOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94
Ojpjb21wdXRlUmVjdEZvclJlcGxhYwogICAgIG1hcmtlci5zZXRSZW5kZXJlZFJlY3QobWFya2Vy
UmVjdCk7CiB9CiAgICAgCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3Vu
ZCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkKIHsK
ICAgICBpZiAoIXJlbmRlcmVyKCkudGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMy
OSw3ICsxMzI5LDcgQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsbwog
ICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGxlbigpOwogCiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVy
KCkpOwogICAgIHJldHVybiBmb250Lm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4o
bGluZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKIH0KIApAQCAtMTM0Miw3ICsxMzQyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJv
eDo6cG9zaXRpb25Gb3JPZmZzZXQoaQogICAgICAgICByZXR1cm4gbG9naWNhbExlZnQoKTsKIAog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAg
ICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7Cisg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJl
cigpKTsKICAgICBpbnQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQg
LSBtX3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFk
ZCByaWdodEJlYXJpbmcgaGVyZT8KQEAgLTEzNTIsNyArMTM1Miw3IEBAIGZsb2F0IElubGluZVRl
eHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGkKICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBp
eGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLm1heFgoKTsKIH0KIAotVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25z
dAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFN0cmluZyogaHlwaGVuYXRlZFN0
cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICBBU1NFUlQocmVuZGVyZXIoKS50ZXh0KCkpOwogCkBA
IC0xMzY2LDcgKzEzNjYsNyBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4oCiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIHN0cmluZywgcmVu
ZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFydFBvcywgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcik7
CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVk
IG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1Rl
eHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBt
YXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CiB7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw4ICsxMDQsOCBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdDsKIAotICAgIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBT
dHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKLSAgICBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgU3Ry
aW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZm
ZXIgPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgU3RyaW5nLCB1bnNpZ25lZCBt
YXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBj
b25zdDsKIAogcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJp
ZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgp
KTsgfQpAQCAtMTQ4LDE3ICsxNDgsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgcG9z
aXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0
YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKKyAgICB2b2lkIHBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCBzdGFydFBv
cywgaW50IGVuZFBvcyk7CisgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udENhc2NhZGUmLCBib29sIGJhY2tncm91bmQpOwogICAgIHZvaWQgcGFpbnRDb21w
b3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBUZXh0RGVjb3JhdGlvbiwgVGV4dERlY29yYXRpb25TdHlsZSwgY29uc3QgU2hhZG93
RGF0YSosIFRleHRQYWludGVyJik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udCYsIENvbG9yIHRleHRDb2xvcik7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFy
a2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGJvb2wg
Z3JhbW1hcik7Ci0gICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9u
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIENvbG9yIHRleHRDb2xvcik7CisgICAgdm9p
ZCBwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udENhc2NhZGUmLCBib29sIGdyYW1tYXIpOworICAgIHZvaWQgcGFpbnRUZXh0TWF0
Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBS
ZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2Fz
Y2FkZSYpOwogCi0gICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAg
ICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1h
cmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMjUsNyArMjMyNSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmFkanVzdExvZ2ljYWxMZWYKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKICAgICAvLyBGSVhNRTog
U2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0
IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGlu
ZUdyaWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOwor
ICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgp
CiAgICAgICAgIHJldHVybiBsZWZ0OwogCkBAIC0yMzY1LDcgKzIzNjUsNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmlnCiAgICAgICAgIHJldHVybiByaWdodDsKIAog
ICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcgYXBwbHk/IFRoaXMgaXMgY29tcGxp
Y2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUgZWRnZT8KLSAgICBmbG9hdCBtYXhD
aGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4
Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKICAgICBpZiAo
IW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCkBAIC0zMDAzLDcgKzMwMDMs
NyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxlRm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgIG5l
d0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOwogICAg
ICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0YXJ0aW5nRm9udFNpemUp
OwogICAgICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlw
dGlvbik7Ci0gICAgICAgIHBzZXVkb1N0eWxlLT5mb250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5m
b250KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUo
KS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAKICAgICAgICAgaW50IGRlc2lyZWRDYXBIZWlnaHQgPSAocHNldWRvU3R5bGUtPmluaXRp
YWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5m
b250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAgICBpbnQgYWN0dWFsQ2FwSGVpZ2h0ID0g
cHNldWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CkBAIC0zMDEyLDcgKzMwMTIs
NyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxlRm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgICAg
ICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24u
c3BlY2lmaWVkU2l6ZSgpIC0gMSk7CiAgICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAtMSk7CiAgICAg
ICAgICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlv
bik7Ci0gICAgICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udCgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+
Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2Fz
Y2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7
CiAgICAgICAgICAgICBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3Mo
KS5jYXBIZWlnaHQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM2OTMsNyArMzY5Myw3IEBAIGNv
bnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY28KIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4
dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitzdGF0aWMg
aW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbiA9IExUUjsKICAgICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRl
cmluZygpID09IFZpc3VhbE9yZGVyOwpAQCAtMzcwOCw3ICszNzA4LDcgQEAgc3RhdGljIGlubGlu
ZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJu
YWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdz
KQorc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQog
ewogICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IExUUjsKICAgICBib29sIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyOwpAQCAt
MzcyNywyNCArMzcyNywyNCBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bkluCiAgICAgcmV0dXJuIHJ1bjsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewog
ICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgY2hhcmFj
dGVycywgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uKQogewogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwg
Zm9udCwgY2hhcmFjdGVycywgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1
biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAg
ICBpZiAodGV4dC0+aXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50
ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFjdGVyczgoKSwgdGV4dC0+dGV4dExlbmd0
aCgpLCBzdHlsZSwgZXhwYW5zaW9uKTsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVy
bmFsKGNvbnRleHQsIGZvbnQsIHRleHQtPmNoYXJhY3RlcnMxNigpLCB0ZXh0LT50ZXh0TGVuZ3Ro
KCksIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
UmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9u
KQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNv
bnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgQVNTRVJUKG9m
ZnNldCArIGxlbmd0aCA8PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpOwogICAgIGlmICh0ZXh0LT5pczhC
aXQoKSkKQEAgLTM3NTIsNyArMzc1Miw3IEBAIFRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4oUmUKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQs
IGZvbnQsIHRleHQtPmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCBleHBh
bnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
ck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMjIgKzIw
MiwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvYmotPmlzRmxvYXRpbmcoKSB8fCAob2Jq
LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhb2JqLT5zdHlsZSgpLmlzT3JpZ2luYWxEaXNw
bGF5SW5saW5lVHlwZSgpICYmICFvYmotPmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxl
JiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBSZW5kZXJTdHls
ZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dU
cmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHRS
dW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBS
ZW5kZXJUZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4
cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRS
dW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5k
ZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0
eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBSZW5kZXJUZXh0KiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9u
IHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1
biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNv
bnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAg
ICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCBj
b25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0g
VGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdF
eHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAg
ICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4
cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGlj
IFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZv
bnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5
bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBj
b250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJp
ZExlYWRpbmdFeHBhbnNpb24pOwogICAgIAogICAgIExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NDcsNyArMzk0Nyw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzdHJpcFRyYWlsaW5nU3BhY2UoZmwKICAgICAgICAgLy8gQ29sbGFw
c2UgYXdheSB0aGUgdHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgogICAgICAg
ICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnRyYWlsaW5n
U3BhY2VDaGlsZCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwotICAgICAgICBj
b25zdCBGb250JiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgpLmZvbnQoKTsgLy8gRklYTUU6IFRo
aXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IHJlbmRlclRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVz
IGZpcnN0LWxpbmUuCiAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHJl
bmRlclRleHQuc3R5bGUoKSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0aCArIGZv
bnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGds
eXBoT3ZlcmZsb3c7CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlKCpyZW5kZXJl
ci0+cGFyZW50KCksIGxpbmVJbmZvKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnRDYXNjYWRl
KCk7CiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgZ2x5cGggb3ZlcmZsb3cgaWYgdGhlIGJsb2NrJ3Mg
bGluZS1ib3gtY29udGFpbiB2YWx1ZSBpcyAiZ2x5cGhzIi4KICAgICBpZiAobGluZUJveC0+Zml0
c1RvR2x5cGhzKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qgc3RpY2sgb3V0IG9mIHRoZSBy
b290IGxpbmUncyBmb250IGJveCwgdGhlbiBkb24ndCBib3RoZXIgY29tcHV0aW5nIG91ciBnbHlw
aCBvdmVyZmxvdy4gVGhpcyBvcHRpbWl6YXRpb24KQEAgLTUwNSw3ICs1MDUsNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICAgICAgICAgICZ3
b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cywgJm92ZXJmbG93KTsKICAgICAgICAgICAgICAg
ICBVQ2hhciBjID0gcmVuZGVyZXItPmNoYXJhY3RlckF0KHdvcmRNZWFzdXJlbWVudC5zdGFydE9m
ZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHdvcmRMZW5ndGggPT0gMSAmJiAo
YyA9PSAnICcgfHwgYyA9PSAnXHQnKSkKLSAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0
aCArPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWVhc3VyZWRXaWR0aCArPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtZWFz
dXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAgICAgICAgICAgIGlmICghd29y
ZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CkBAIC03NDMsMTQgKzc0Mywx
NCBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAgICAgICAgICAg
ICBpZiAodGV4dEFsaWduID09IEpVU1RJRlkgJiYgcnVuICE9IHRyYWlsaW5nU3BhY2VSdW4pIHsK
ICAgICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCiAgICAgICAgICAgICAgICAg
ICAgIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpydW4tPmJveCgpKS5zZXRDYW5IYXZlTGVhZGlu
Z0V4cGFuc2lvbih0cnVlKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVz
SW5SdW4gPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5n
VmlldyhydW4tPm1fc3RhcnQsIHJ1bi0+bV9zdG9wKSwgcnVuLT5ib3goKS0+ZGlyZWN0aW9uKCks
IGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRp
ZXNJblJ1biA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRl
eHQuc3RyaW5nVmlldyhydW4tPm1fc3RhcnQsIHJ1bi0+bV9zdG9wKSwgcnVuLT5ib3goKS0+ZGly
ZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9w
cG9ydHVuaXRpZXMuYXBwZW5kKG9wcG9ydHVuaXRpZXNJblJ1bik7CiAgICAgICAgICAgICAgICAg
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBvcHBvcnR1bml0aWVzSW5SdW47CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChpbnQgbGVuZ3RoID0gcmVuZGVyVGV4dC50ZXh0TGVu
Z3RoKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXJ1bi0+bV9zdGFydCAmJiBuZWVkc1dvcmRT
cGFjaW5nICYmIGlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdChydW4tPm1f
c3RhcnQpKSkKLSAgICAgICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0
eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5lSW5mbykuZm9udCgpLndvcmRTcGFjaW5nKCk7
CisgICAgICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGxpbmVTdHlsZSgqcmVu
ZGVyVGV4dC5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsK
ICAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVu
ZGVyVGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3RvcCAtIDEpKSAmJiBydW4tPm1fc3RvcCA9PSBs
ZW5ndGg7CiAgICAgICAgICAgICB9CiAKQEAgLTc2OCw3ICs3NjgsNyBAQCBCaWRpUnVuKiBSZW5k
ZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBh
bnNpb24odHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZEp1c3RpZmll
ZFJ1YnkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9
IGRvd25jYXN0PFJlbmRlclRleHQ+KGxlYWZDaGlsZC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRp
cmVjdGlvbigpLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigp
LCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9w
cG9ydHVuaXRpZXMuYXBwZW5kKG9wcG9ydHVuaXRpZXNJblJ1bik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTkwNyw5ICsxOTA3LDkgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmNoZWNrTGluZXNGb3JUZXh0TwogewogICAgIC8vIERldGVybWluZSB0aGUgd2lk
dGggb2YgdGhlIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCiAgICAgLy8gRklYTUU6
IENTUzMgc2F5cyB0aGlzIGlzIGNvbmZpZ3VyYWJsZSwgYWxzbyBuZWVkIHRvIHVzZSAweDAwMkUg
KEZVTEwgU1RPUCkgaWYgaG9yaXpvbnRhbCBlbGxpcHNpcyBpcyAibm90IHJlbmRlcmFibGUiCi0g
ICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzU3RyLCAoJmhvcml6b250YWxFbGxp
cHNpcywgMSkpOwotICAgIGNvbnN0IEZvbnQmIGZpcnN0TGluZUZvbnQgPSBmaXJzdExpbmVTdHls
ZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZmlyc3RMaW5lRm9udCA9IGZpcnN0
TGluZVN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICBmbG9hdCBmaXJzdExpbmVFbGxpcHNpc1dp
ZHRoID0gZmlyc3RMaW5lRm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZpcnN0TGlu
ZUZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIGZpcnN0TGluZVN0eWxlKCkpKTsKICAgICBm
bG9hdCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5lRm9udCkgPyBmaXJzdExpbmVF
bGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZo
b3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OnNldFJlbmRl
cmVkVGV4dCgKICAgICBtX25lZWRzRm9udFVwZGF0ZSA9IHRydWU7CiB9CiAKLWZsb2F0IFJlbmRl
ckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAor
ZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIGlmIChtX2lzQ29tYmluZWQpCiAgICAgICAgIHJldHVy
biBmb250LnNpemUoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0
Ojpjb21iaW5lVGV4dCgpCiAgICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGggPSB3aWR0aCgwLCB0
ZXh0TGVuZ3RoKCksIG9yaWdpbmFsRm9udCgpLCAwLCBudWxscHRyLCAmZ2x5cGhPdmVyZmxvdyk7
CiAgICAgbV9pc0NvbWJpbmVkID0gY29tYmluZWRUZXh0V2lkdGggPD0gZW1XaWR0aDsKICAgICAK
LSAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IHN0eWxlKCkuZm9udCgpLmZvbnRTZWxl
Y3RvcigpOworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmZvbnRTZWxlY3RvcigpOwogCiAgICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAg
c2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZvbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGRlc2NyaXB0aW9uKTsgLy8gTmVlZCB0byBjaGFuZ2UgZm9udCBvcmllbnRhdGlvbiB0byBob3Jp
em9udGFsLgpAQCAtMTE3LDcgKzExNyw4IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJp
bmVUZXh0KCkKICAgICAgICAgc3RhdGljIGNvbnN0IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJp
YW50c1tdID0geyBIYWxmV2lkdGgsIFRoaXJkV2lkdGgsIFF1YXJ0ZXJXaWR0aCB9OwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHdpZHRoVmFyaWFudHMp
IDsgKytpKSB7CiAgICAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRXaWR0aFZhcmlhbnQod2lkdGhW
YXJpYW50c1tpXSk7Ci0gICAgICAgICAgICBGb250IGNvbXByZXNzZWRGb250ID0gRm9udChkZXNj
cmlwdGlvbiwgc3R5bGUoKS5mb250KCkubGV0dGVyU3BhY2luZygpLCBzdHlsZSgpLmZvbnQoKS53
b3JkU3BhY2luZygpKTsKKworICAgICAgICAgICAgRm9udENhc2NhZGUgY29tcHJlc3NlZEZvbnQo
ZGVzY3JpcHRpb24sIHN0eWxlKCkuZm9udENhc2NhZGUoKS5sZXR0ZXJTcGFjaW5nKCksIHN0eWxl
KCkuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpKTsKICAgICAgICAgICAgIGNvbXByZXNzZWRG
b250LnVwZGF0ZShmb250U2VsZWN0b3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmbG9h
dCBydW5XaWR0aCA9IFJlbmRlclRleHQ6OndpZHRoKDAsIHRleHRMZW5ndGgoKSwgY29tcHJlc3Nl
ZEZvbnQsIDAsIG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKQEAgLTEzNiw3ICsxMzcsNyBAQCB2
b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgICAgIHNob3VsZFVwZGF0
ZUZvbnQgPSBtX2NvbWJpbmVGb250U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihvcmlnaW5hbEZv
bnQoKS5mb250RGVzY3JpcHRpb24oKSk7CiAKICAgICBpZiAoc2hvdWxkVXBkYXRlRm9udCkKLSAg
ICAgICAgbV9jb21iaW5lRm9udFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7Cisg
ICAgICAgIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVj
dG9yKTsKIAogICAgIGlmIChtX2lzQ29tYmluZWQpIHsKICAgICAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJTdHJpbmcs
ICgmb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBSZW5kZXJDb21iaW5lVGV4dF9oCiAjZGVmaW5l
IFJlbmRlckNvbWJpbmVUZXh0X2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMzgsMTUgKzM4LDE1IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFkanVzdFRleHRPcmlnaW4oRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0KSBjb25zdDsKICAgICB2b2lkIGdldFN0cmluZ1RvUmVuZGVyKGludCwg
U3RyaW5nJiwgaW50JiBsZW5ndGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNDb21iaW5lZDsgfQotICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNv
bnN0IEZvbnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9Ci0gICAgY29uc3Qg
Rm9udCYgb3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9u
dCgpOyB9Ci0gICAgY29uc3QgRm9udCYgdGV4dENvbWJpbmVGb250KCkgY29uc3QgeyByZXR1cm4g
bV9jb21iaW5lRm9udFN0eWxlLT5mb250KCk7IH0KKyAgICBmbG9hdCBjb21iaW5lZFRleHRXaWR0
aChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkgY29uc3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0K
KyAgICBjb25zdCBGb250Q2FzY2FkZSYgb3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFy
ZW50KCktPnN0eWxlKCkuZm9udENhc2NhZGUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiB0
ZXh0Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUtPmZvbnRD
YXNjYWRlKCk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0ZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBGb250JiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29tYmluZVRleHQiOyB9CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyZWRU
ZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAK
LSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJM
YXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveDo6YXBwbHlMCiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIGVsbGlwc2lzQW5kU3BhY2VTdHIsIChlbGxpcHNpc0FuZFNwYWNlLCAyKSk7
CiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVs
bGlwc2lzU3RyLCAoJmhvcml6b250YWxFbGxpcHNpcywgMSkpOwogICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbGluZVN0eWxlID0gbnVtVmlzaWJsZUxpbmVzID09IDEgPyBmaXJzdExpbmVTdHls
ZSgpIDogc3R5bGUoKTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZS5mb250
KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNj
YWRlKCk7CiAKICAgICAgICAgLy8gR2V0IGVsbGlwc2lzIHdpZHRoLCBhbmQgaWYgdGhlIGxhc3Qg
Y2hpbGQgaXMgYW4gYW5jaG9yLCBpdCB3aWxsIGdvIGFmdGVyIHRoZSBlbGxpcHNpcywgc28gYWRk
IGluIGEgc3BhY2UgYW5kIHRoZSBhbmNob3Igd2lkdGggdG9vCiAgICAgICAgIExheW91dFVuaXQg
dG90YWxXaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkN1cnNvci5o
IgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTI5OCw3ICsyOTgsNyBA
QCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkCiAgICAgRmxvYXRSZWN0
IGluZGljYXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAg
RmxvYXRSZWN0IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9u
dDsKICAgICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIGlmICgh
Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkocGFpbnRPZmZzZXQsIGNvbnRlbnRSZWN0LCBpbmRp
Y2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBhcnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4
dFdpZHRoKSkKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpz
ZXRVbmF2YWlsYWJsCiAgICAgcmVwYWludCgpOwogfQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9y
UmVjdCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVj
dCwgRm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdAorYm9v
bCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBG
bG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwg
RmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiBmb250LCBUZXh0UnVuJiBydW4sIGZs
b2F0JiB0ZXh0V2lkdGgpIGNvbnN0CiB7CiAgICAgYm9vbCBpbmNsdWRlc0Fycm93ID0gc2hvdWxk
VW5hdmFpbGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0b24oZG9jdW1lbnQoKSwgbV9wbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbik7CiAKQEAgLTM2MSw3ICszNjEsNyBAQCBib29sIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChG
b250V2VpZ2h0Qm9sZCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoZnJh
bWUoKS5zZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoMTIpOwotICAgIGZvbnQgPSBGb250KGZvbnREZXNjcmlwdGlvbiwg
MCwgMCk7CisgICAgZm9udCA9IEZvbnRDYXNjYWRlKGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAg
ICAgZm9udC51cGRhdGUoMCk7CiAKICAgICBydW4gPSBUZXh0UnVuKG1fdW5hdmFpbGFibGVQbHVn
aW5SZXBsYWNlbWVudFRleHQpOwpAQCAtMzkxLDcgKzM5MSw3IEBAIExheW91dFJlY3QgUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OnVuYXZhaWwKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAg
ICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0
OwotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVu
KCIiLCAwKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKGdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KGFjY3VtdWxhdGVkT2Zmc2V0LCBjb250ZW50UmVjdCwgaW5kaWNhdG9yUmVjdCwg
cmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkpCkBA
IC01ODIsNyArNTgyLDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJblVuYXZhaWxh
YgogICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVu
dFRleHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAg
IEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRX
aWR0aDsKICAgICByZXR1cm4gZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoSW50UG9pbnQoKSwg
Y29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50VGV4dFJlY3QsIGFycm93UmVj
dCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFVuYXZhaWxhYmxlUGx1Z2lu
SW5kaWNhdG9ySXNQcmVzc2VkKGJvb2wpOwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2lu
SW5kaWNhdG9yKGNvbnN0IE1vdXNlRXZlbnQmKSBjb25zdDsKICAgICBib29sIGlzSW5VbmF2YWls
YWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBn
ZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwg
RmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9u
dCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdDsKKyAgICBib29sIGdldFJlcGxh
Y2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
RmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJl
Y3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250Q2FzY2Fk
ZSYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IHVu
YXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yQm91bmRzKGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgZmlu
YWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogCiAjaW5j
bHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogCiAgICAgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewogICAgICAgICBjb25zdCBTdHJpbmcm
IGRpc3BsYXllZEZpbGVuYW1lID0gZmlsZVRleHRWYWx1ZSgpOwotICAgICAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIGRpc3BsYXllZEZpbGVuYW1lLCBzdHlsZSgpLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBSZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVjdERp
cmVjdGlvbk92ZXJyaWRlKTsKICAgICAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygp
OwogCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29t
cHV0ZUludAogICAgIC8vICh1c2luZyAiMCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KICAg
ICBjb25zdCBVQ2hhciBjaGFyYWN0ZXIgPSAnMCc7CiAgICAgY29uc3QgU3RyaW5nIGNoYXJhY3Rl
ckFzU3RyaW5nID0gU3RyaW5nKCZjaGFyYWN0ZXIsIDEpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKTsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciB0aGlzIGNv
bnN0X2Nhc3QgYnkgbWFraW5nIGNvbnN0cnVjdFRleHRSdW4gdGFrZSBhIGNvbnN0IFJlbmRlck9i
amVjdCouCiAgICAgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqIHJlbmRlcmVyID0gY29uc3RfY2Fz
dDxSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KHRoaXMpOwogICAgIGZsb2F0IG1pbkRlZmF1bHRM
YWJlbFdpZHRoID0gZGVmYXVsdFdpZHRoTnVtQ2hhcnMgKiBmb250LndpZHRoKGNvbnN0cnVjdFRl
eHRSdW4ocmVuZGVyZXIsIGZvbnQsIGNoYXJhY3RlckFzU3RyaW5nLCBzdHlsZSgpLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CkBAIC0yNzEsOSArMjcxLDkgQEAgU3RyaW5nIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4dAogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQo
KS5maWxlcygpKTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKGlucHV0RWxlbWVudCgpLmZp
bGVzKCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRy
dW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwgbWF4RmlsZW5hbWVXaWR0aCgp
LCBzdHlsZSgpLmZvbnQoKSwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsK
KyAgICAgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShpbnB1dEVsZW1l
bnQoKS5kaXNwbGF5U3RyaW5nKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwogI2VuZGlmCi0g
ICAgcmV0dXJuIHRoZW1lKCkuZmlsZUxpc3ROYW1lRm9yV2lkdGgoaW5wdXRFbGVtZW50KCkuZmls
ZXMoKSwgc3R5bGUoKS5mb250KCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCku
bXVsdGlwbGUoKSk7CisgICAgcmV0dXJuIHRoZW1lKCkuZmlsZUxpc3ROYW1lRm9yV2lkdGgoaW5w
dXRFbGVtZW50KCkuZmlsZXMoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLCBtYXhGaWxlbmFtZVdp
ZHRoKCksIGlucHV0RWxlbWVudCgpLm11bHRpcGxlKCkpOwogfQogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFJl
ZjxSZW5kZXJTdHlsZT4gUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXQKICAgICBuZXdTdHlsZS5nZXQo
KS5zZXRUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0V2lkdGgo
TGVuZ3RoKDEwMCwgUGVyY2VudCkpOwogICAgIG5ld1N0eWxlLmdldCgpLnNldEhlaWdodChMZW5n
dGgoMTAwLCBQZXJjZW50KSk7Ci0gICAgbmV3U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZSgwKTsK
KyAgICBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShudWxscHRyKTsKICAgICBy
ZXR1cm4gbmV3U3R5bGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGdWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyAr
ODYsNyBAQCBzdGF0aWMgUmVmPFJlbmRlclN0eWxlPiBjcmVhdGVGdWxsU2NyZWVuCiAgICAgZnVs
bHNjcmVlblN0eWxlLmdldCgpLnNldFpJbmRleChJTlRfTUFYKTsKIAogICAgIGZ1bGxzY3JlZW5T
dHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uKCkpOwotICAgIGZ1
bGxzY3JlZW5TdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIGZ1bGxzY3JlZW5TdHls
ZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShudWxscHRyKTsKIAogICAgIGZ1bGxzY3JlZW5T
dHlsZS5nZXQoKS5zZXREaXNwbGF5KEZMRVgpOwogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5z
ZXRKdXN0aWZ5Q29udGVudChKdXN0aWZ5Q2VudGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAs
OCBAQAogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgpAQCAtMTkyLDcgKzE5Miw3IEBA
IGJvb2wgUmVuZGVySW1hZ2U6OnNldEltYWdlU2l6ZUZvckFsdFRleHQKIAogICAgIC8vIHdlIGhh
dmUgYW4gYWx0IGFuZCB0aGUgdXNlciBtZWFudCBpdCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50
ZWQpCiAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgIEludFNpemUgcGFkZGVkVGV4dFNpemUo
cGFkZGluZ1dpZHRoICsgc3RkOjptaW4oY2VpbGYoZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX2FsdFRleHQsIHN0eWxlKCkpKSksIG1heEFsdFRl
eHRXaWR0aCksIHBhZGRpbmdIZWlnaHQgKyBzdGQ6Om1pbihmb250LmZvbnRNZXRyaWNzKCkuaGVp
Z2h0KCksIG1heEFsdFRleHRIZWlnaHQpKTsKICAgICAgICAgaW1hZ2VTaXplID0gaW1hZ2VTaXpl
LmV4cGFuZGVkVG8ocGFkZGVkVGV4dFNpemUpOwogICAgIH0KQEAgLTQ0NCw3ICs0NDQsNyBAQCB2
b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgICAgICBpZiAo
IW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRv
Y3VtZW50KCkuZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhtX2FsdFRleHQpOwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS5jb2xvclNwYWNlKCkpOwotICAgICAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAg
ICAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRN
ZXRyaWNzKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmlj
cy5hc2NlbnQoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBhbHRUZXh0T2Zmc2V0ID0g
cGFpbnRPZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJJ
bmxpbmUgJiYgcGFyZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAgICAg
ICAgfHwgc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAgfHwgc3R5
bGUoKS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUKLSAgICAgICAg
fHwgKGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFz
SWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250KCkuZm9udE1ldHJp
Y3MoKSkKKyAgICAgICAgfHwgKGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHlsZS0+Zm9udENhc2Nh
ZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKHN0
eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpKQogICAgICAgICB8fCBwYXJlbnRTdHls
ZS0+bGluZUhlaWdodCgpICE9IHN0eWxlKCkubGluZUhlaWdodCgpKSkKICAgICAgICAgfHwgKGZs
b3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSk7IC8vIEZJ
WE1FOiBFbmFibGUgdGhlIG9wdGltaXphdGlvbiBvbmNlIHdlIG1ha2Ugb3ZlcmZsb3cgY29tcHV0
YXRpb24gZm9yIGN1bGxlZCBpbmxpbmVzIGluIHJlZ2lvbnMuCiAKQEAgLTIyNCw3ICsyMjQsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgICAgIC8vIEhh
dmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50
U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIFJlbmRlclN0eWxl
JiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgYWx3YXlzQ3JlYXRlTGlu
ZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxB
c2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpKQor
ICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGls
ZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgIHx8IGNoaWxk
U3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgICAgICB8fCBwYXJlbnRT
dHlsZS0+bGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpOwogICAgIH0KQEAg
LTU3NCw4ICs1NzQsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94
CiAgICAgICAgICAgICBpZiAocmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAg
ICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByZW5kZXJCb3guaW5saW5l
Qm94V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5maXJz
dExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGludCBs
b2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5m
b250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250
TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9
IGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOworICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5s
aW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWlu
ZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5m
b250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QocmVuZGVyQm94
LmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gcmVuZGVyQm94Lm1hcmdpbkxlZnQoKSwgbG9naWNh
bFRvcCwgcmVuZGVyQm94LndpZHRoKCkgKyByZW5kZXJCb3guaG9yaXpvbnRhbE1hcmdpbkV4dGVu
dCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNTkwLDcgKzU5
MCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAg
ICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IHJlbmRlcklubGluZS5maXJz
dExpbmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExpbmUgPSBjaGlsZExpbmUtPm5leHRMaW5lQm94
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9
IGNoaWxkTGluZS0+cm9vdCgpOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZp
cnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5
bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2lj
YWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBs
b2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKQEAgLTYxMCw4ICs2MTAsOCBAQCB2b2lkIFJlbmRlcklu
bGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAgICAgICAgICBmb3IgKElubGluZVRleHRC
b3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LmZpcnN0VGV4dEJveCgpOyBjaGlsZFRleHQ7IGNoaWxk
VGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIGNvbnN0
IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RM
aW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7
Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSAr
IChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29u
dGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICAgICAg
ICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNz
KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94Lmxv
Z2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRS
ZWN0KEZsb2F0UmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dp
Y2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTYy
Miw3ICs2MjIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIGEgaGVscGVyIHRvIHNoYXJl
IHRoZXNlIHdpdGggdGV4dCBwYXRoLgogICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVC
b3gmIHJvb3RCb3ggPSBpbmxpbmVCb3gtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250
YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94Lmxp
bmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUu
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250
Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2Fz
Y2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmFkZFJlY3QoRmxvYXRSZWN0KGlubGluZUJveC0+eCgpLCBsb2dpY2FsVG9wLCBpbmxpbmVCb3gt
PmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MiwxNCArMTEyLDE0IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgSFRN
TEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4
dDsKLSAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAg
ICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAg
ICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgdGV4dCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVu
dGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTE9w
dEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgdGV4dCA9IGRvd25j
YXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwogICAg
ICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9u
KCk7CiAgICAgICAgICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwg
aXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250
Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5n
KCkpOwogICAgICAgICAgICAgICAgIGl0ZW1Gb250LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0
eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTM0Nyw3
ICszNDcsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50CiAgICAg
fQogfQogCi1zdGF0aWMgTGF5b3V0U2l6ZSBpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KFRleHRSdW4g
dGV4dFJ1biwgUmVuZGVyU3R5bGUqIGl0ZW1TdHlsZSwgRm9udCBpdGVtRm9udCwgTGF5b3V0UmVj
dCBpdGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1l
bnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBp
dGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAgICBFVGV4dEFsaWduIGFj
dHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAgICAgLy8gRklYTUU6IEZp
cmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8KQEAgLTQwMCwxNCArNDAw
LDE0IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgY29sb3JTcGFjZSk7CiAKICAg
ICBUZXh0UnVuIHRleHRSdW4oaXRlbVRleHQsIDAsIDAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdF
eHBhbnNpb24sIGl0ZW1TdHlsZS0+ZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoaXRlbVN0eWxlLT51
bmljb2RlQmlkaSgpKSwgdHJ1ZSwgVGV4dFJ1bjo6Tm9Sb3VuZGluZyk7Ci0gICAgRm9udCBpdGVt
Rm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpOwogICAgIExheW91dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3Qo
cGFpbnRPZmZzZXQsIGxpc3RJbmRleCk7CiAgICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1l
bnQodGV4dFJ1biwgaXRlbVN0eWxlLCBpdGVtRm9udCwgcikpOwogCiAgICAgaWYgKGlzPEhUTUxP
cHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpKSB7CiAgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGQuc2V0V2VpZ2h0
KGQuYm9sZGVyV2VpZ2h0KCkpOwotICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQu
bGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgaXRlbUZv
bnQgPSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250Lndv
cmRTcGFjaW5nKCkpOwogICAgICAgICBpdGVtRm9udC51cGRhdGUoZG9jdW1lbnQoKS5lbnN1cmVT
dHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5o
IgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTEzMTQsNyAr
MTMxNCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBp
ZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5
bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSk7CiAKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKQEAgLTE1
MjksNyArMTUyOSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgp
LmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2Nh
ZGUoKTsKIAogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gMDsKICAgICBFTGlzdFN0eWxl
VHlwZSB0eXBlID0gc3R5bGUoKS5saXN0U3R5bGVUeXBlKCk7CkBAIC0xNzU3LDcgKzE3NTcsNyBA
QCBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgQXN0ZXJpc2tzOgogICAgICAgICBjYXNlIEZvb3Rub3Rlczog
ewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAg
ICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAg
ICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRo
aXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRUZXh0UnVuRmxhZ3Mp
OwogICAgICAgICAgICAgcmVsYXRpdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBmb250LndpZHRoKHJ1
biksIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTE4NTEsNyArMTg1MSw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVN
YXIKICAgICAgICAgY2FzZSBVcmR1OgogICAgICAgICAgICAgaWYgKG1fdGV4dC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAgICAgICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgVGV4dFJ1biBydW4g
PSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX3RleHQsIHN0eWxl
KCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFk
aW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKICAgICAgICAgICAgIGludCBpdGVt
V2lkdGggPSBmb250LndpZHRoKHJ1bik7CiAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsy
XSA9IHsgbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLnZhbHVlKCkpLCAnICcgfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUmVuZGVyTWVudUxp
c3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWwKICAgICBpZiAobV9pbm5lckJsb2NrKSAvLyBSZW5kZXJC
bG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBzdHlsZS4KICAgICAg
ICAgYWRqdXN0SW5uZXJTdHlsZSgpOwogCi0gICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHls
ZSB8fCBvbGRTdHlsZS0+Zm9udCgpICE9IHN0eWxlKCkuZm9udCgpOworICAgIGJvb2wgZm9udENo
YW5nZWQgPSAhb2xkU3R5bGUgfHwgb2xkU3R5bGUtPmZvbnRDYXNjYWRlKCkgIT0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpOwogICAgIGlmIChmb250Q2hhbmdlZCkgewogICAgICAgICB1cGRhdGVPcHRp
b25zV2lkdGgoKTsKICAgICAgICAgbV9uZWVkc09wdGlvbnNXaWR0aFVwZGF0ZSA9IGZhbHNlOwpA
QCAtMjIyLDEzICsyMjIsMTMgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dp
ZHRoKAogICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBvcHRpb25TdHlsZSA9IGVsZW1lbnQt
PmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgICAgICAgICBvcHRpb25XaWR0aCArPSBtaW5pbXVt
VmFsdWVGb3JMZW5ndGgob3B0aW9uU3R5bGUtPnRleHRJbmRlbnQoKSwgMCk7CiAgICAgICAgICAg
ICBpZiAoIXRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIFRleHRSdW4gcnVu
ID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgdGV4dCwgc3R5bGUo
KSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRp
bmdFeHBhbnNpb24sIERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgICAgIG9wdGlv
bldpZHRoICs9IGZvbnQud2lkdGgocnVuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1h
eE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0aW9uV2lkdGgsIG9wdGlvbldpZHRoKTsKICAg
ICAgICAgfSBlbHNlIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgVGV4dFJ1biBydW4g
PSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgp
LCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGlu
Z0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICBtYXhPcHRpb25X
aWR0aCA9IHN0ZDo6bWF4KG1heE9wdGlvbldpZHRoLCBmb250LndpZHRoKHJ1bikpOwogICAgICAg
ICB9CkBAIC01MjMsNyArNTIzLDcgQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0
ZW1TdHlsZQogICAgIGdldEl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdEluZGV4LCBpdGVtQmFja2dy
b3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yKTsKIAogICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpIDogZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwotICAgIHJldHVybiBzdHlsZSA/IFBvcHVw
TWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250KCksIHN0eWxlLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSwKKyAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBpdGVtQmFja2dyb3VuZENvbG9y
LCBzdHlsZS0+Zm9udENhc2NhZGUoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAog
ICAgICAgICBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlLT50ZXh0SW5kZW50
KCksIHN0eWxlLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZS0+dW5pY29kZUJpZGkoKSks
CiAgICAgICAgIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3IgPyBQb3B1cE1lbnVTdHlsZTo6
Q3VzdG9tQmFja2dyb3VuZENvbG9yIDogUG9wdXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5k
Q29sb3IpIDogbWVudVN0eWxlKCk7CiB9CkBAIC01NjQsNyArNTY0LDcgQEAgUG9wdXBNZW51U3R5
bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZVRvVXNlID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5zdHlsZSgpIDogc3R5bGUoKTsK
ICAgICBJbnRSZWN0IGFic0JvdW5kcyA9IGFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdU
cmFuc2Zvcm1zKCk7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlVG9Vc2UudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZVRvVXNlLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksCi0gICAgICAgIHN0eWxlVG9V
c2UuZm9udCgpLCBzdHlsZVRvVXNlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNl
LmRpc3BsYXkoKSA9PSBOT05FLAorICAgICAgICBzdHlsZVRvVXNlLmZvbnRDYXNjYWRlKCksIHN0
eWxlVG9Vc2UudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09
IE5PTkUsCiAgICAgICAgIHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpICYmIHN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0UGFydCwgc3R5bGVUb1VzZS50ZXh0SW5kZW50KCksCiAgICAgICAg
IHN0eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSwg
UG9wdXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgIFBvcHVwTWVu
dVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVTaXplKHN0eWxlVG9Vc2UsIGFi
c0JvdW5kcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVu
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBSZW5k
ZXJSdWJ5UnVuOjpsYXlvdXQoKQogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYm
IHJ0LT5zdHlsZSgpLnJ1YnlQb3NpdGlvbigpID09IFJ1YnlQb3NpdGlvbkludGVyQ2hhcmFjdGVy
KSB7CiAgICAgICAgIC8vIEJvcG9tb2ZvLiBXZSBuZWVkIHRvIG1vdmUgdGhlIFJlbmRlclJ1YnlU
ZXh0IG92ZXIgdG8gdGhlIHJpZ2h0IHNpZGUgYW5kIGNlbnRlciBpdAogICAgICAgICAvLyB2ZXJ0
aWNhbGx5IHJlbGF0aXZlIHRvIHRoZSBiYXNlLgotICAgICAgICBjb25zdCBGb250JiBmb250ID0g
c3R5bGUoKS5mb250KCk7Ci0gICAgICAgIGZsb2F0IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgo
Zm9udC5sZXR0ZXJTcGFjaW5nKCksIDIuMGYgKiBydC0+c3R5bGUoKS5mb250KCkuZm9udE1ldHJp
Y3MoKS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpOworICAgICAgICBmbG9hdCBkaXN0YW5jZUJldHdlZW5CYXNlID0gbWF4
KGZvbnQubGV0dGVyU3BhY2luZygpLCAyLjBmICogcnQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5m
b250TWV0cmljcygpLmhlaWdodCgpKTsKICAgICAgICAgc2V0V2lkdGgod2lkdGgoKSArIGRpc3Rh
bmNlQmV0d2VlbkJhc2UgLSBmb250LmxldHRlclNwYWNpbmcoKSk7CiAgICAgICAgIGlmIChSZW5k
ZXJSdWJ5QmFzZSogcmIgPSBydWJ5QmFzZSgpKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGZp
cnN0TGluZVRvcCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsy
NjAsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0CiAKIFBvcHVw
TWVudVN0eWxlIFJlbmRlclNlYXJjaEZpZWxkOjptZW51U3R5bGUoKSBjb25zdAogewotICAgIHJl
dHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpLCBzdHlsZSgpLmZvbnQoKSwgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVklT
SUJMRSwKKyAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLCBzdHlsZSgp
LnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZSgpLmRpc3BsYXkoKSA9PSBO
T05FLCB0cnVlLCBzdHlsZSgpLnRleHRJbmRlbnQoKSwgc3R5bGUoKS5kaXJlY3Rpb24oKSwgaXNP
dmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6Q3VzdG9tQmFj
a2dyb3VuZENvbG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCArMjI5LDggQEAgYm9vbCBSZW5k
ZXJUZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0CiBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVV
c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoc3R5
bGUuZm9udCgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkpCisgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlw
dGlvbigpOworICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNT
cGVjaWZpZWRGb250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1Niw3ICsyNTYsNyBA
QCB2b2lkIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmCiAgICAgaWYgKCFvbGRT
dHlsZSkgewogICAgICAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJh
Y2tzbGFzaEFzWWVuU3ltYm9sKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gbV91c2VCYWNr
c2xhc2hBc1llblN5bWJvbDsKLSAgICB9IGVsc2UgaWYgKG9sZFN0eWxlLT5mb250KCkudXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woKSAhPSBuZXdTdHlsZS5mb250KCkudXNlQmFja3NsYXNoQXNZZW5T
eW1ib2woKSkgeworICAgIH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnRDYXNjYWRlKCkudXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woKSAhPSBuZXdTdHlsZS5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sKCkpIHsKICAgICAgICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IGNv
bXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9
IHRydWU7CiAgICAgfQpAQCAtNDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6
bG9jYWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0
KGxlZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYgZiwgaW50
IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6
d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50IGxlbiwg
ZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29t
YmluZVRleHQ+KCp0aGlzKSkgewogICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29t
YmluZVRleHQgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNTQ0LDcg
KzU0NCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKICAgICBB
U1NFUlQobV90ZXh0KTsKICAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKm1fdGV4dC5pbXBsKCk7CiAg
ICAgaWYgKHRleHRbMF0gPT0gJyAnIHx8ICh0ZXh0WzBdID09ICdcbicgJiYgIXN0eWxlLnByZXNl
cnZlTmV3bGluZSgpKSB8fCB0ZXh0WzBdID09ICdcdCcpIHsKLSAgICAgICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgor
ICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7IC8v
IEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgaWYgKHN0cmlwRnJvbnRT
cGFjZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwogICAgICAgICAg
ICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4odGhpcywgZm9udCwgJnNwYWNlLCAxLCBzdHlsZSkpOwpAQCAtNTYwLDcgKzU2MCw3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKIAogICAgIC8vIENvbXB1
dGUgb3VyIG1heCB3aWR0aHMgYnkgc2Nhbm5pbmcgdGhlIHN0cmluZyBmb3IgbmV3bGluZXMuCiAg
ICAgaWYgKGhhc0JyZWFrKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZS5mb250KCk7
IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICAgICAgY29uc3QgRm9udENh
c2NhZGUmIGYgPSBzdHlsZS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZp
cnN0LWxpbmUuCiAgICAgICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKICAgICAgICAgYmVnaW5N
YXhXID0gbWF4VzsKICAgICAgICAgZW5kTWF4VyA9IG1heFc7CkBAIC02MzcsMTMgKzYzNywxMyBA
QCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgIG1fa25v
d25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzID0gdHJ1ZTsKIH0KIAotc3RhdGlj
IGlubGluZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9u
dCYgZm9udCkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIHJldHVybiBmb250LndpZHRoKFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS5oeXBoZW5TdHJp
bmcoKS5zdHJpbmcoKSwgc3R5bGUpKTsKIH0KIAotc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVu
dFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEZvbnQmIGZvbnQsIFN0cmluZ1ZpZXcgd29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgs
IHVuc2lnbmVkIG1pbmltdW1TdWZmaXhMZW5ndGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5
cGhPdmVyZmxvdykKK3N0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0
KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQg
bWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93
KQogewogICAgIHN1ZmZpeFN0YXJ0ID0gMDsKICAgICBpZiAod29yZC5sZW5ndGgoKSA8PSBtaW5p
bXVtU3VmZml4TGVuZ3RoKQpAQCAtNzAxLDcgKzcwMSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICBtX2hhc0VuZFdTID0gZmFsc2U7CiAKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBzdHlsZS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7IC8vIEZJWE1F
OiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICBmbG9hdCB3b3JkU3BhY2luZyA9IGZvbnQu
d29yZFNwYWNpbmcoKTsKICAgICBpbnQgbGVuID0gdGV4dExlbmd0aCgpOwogICAgIExhenlMaW5l
QnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKG1fdGV4dCwgc3R5bGUubG9jYWxlKCksIG1hcExp
bmVCcmVha1RvSXRlcmF0b3JNb2RlKHN0eWxlLmxpbmVCcmVhaygpKSk7CkBAIC0xMjE1LDEwICsx
MjE1LDEwIEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICAg
ICAgbGVuID0gdGV4dExlbmd0aCgpIC0gZnJvbTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBs
aW5lU3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKLSAgICBy
ZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udCgpLCB4UG9zLCBmYWxsYmFja0Zv
bnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5
bGUuZm9udENhc2NhZGUoKSwgeFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9
CiAKLWZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwg
Y29uc3QgRm9udCYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxv
YXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBG
b250Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIEFTU0VSVChmcm9tICsgbGVuIDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVu
Z3RoKCkpCkBAIC0xMjI2LDcgKzEyMjYsNyBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNp
Z25lZCBmcm9tLCB1CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHls
ZSgpOwogICAgIGZsb2F0IHc7Ci0gICAgaWYgKCZmID09ICZzdHlsZS5mb250KCkpIHsKKyAgICBp
ZiAoJmYgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkpIHsKICAgICAgICAgaWYgKCFzdHlsZS5wcmVz
ZXJ2ZU5ld2xpbmUoKSAmJiAhZnJvbSAmJiBsZW4gPT0gdGV4dExlbmd0aCgpICYmICghZ2x5cGhP
dmVyZmxvdyB8fCAhZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcykpIHsKICAgICAgICAgICAg
IGlmIChmYWxsYmFja0ZvbnRzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGdseXBoT3ZlcmZs
b3cpOwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAgYm9vbCBSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNl
U2ltcGxlRm9udAogewogICAgIGlmIChpc0FsbEFTQ0lJKCkgfHwgbV90ZXh0LmlzOEJpdCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2Rl
UGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnQ6OlNpbXBsZTsKKyAgICByZXR1
cm4gRm9udENhc2NhZGU6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY2hhcmFjdGVyczE2KCksIGxl
bmd0aCgpKSA9PSBGb250Q2FzY2FkZTo6U2ltcGxlOwogfQogCiB2b2lkIFJlbmRlclRleHQ6Om1v
bWVudGFyaWx5UmV2ZWFsTGFzdFR5cGVkQ2hhcmFjdGVyKHVuc2lnbmVkIG9mZnNldEFmdGVyTGFz
dFR5cGVkQ2hhcmFjdGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0LmltcGwoKS0+bGVuZ3RoKCk7IH0g
Ly8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKICAgICB2b2lkIHBvc2l0
aW9uTGluZUJveChJbmxpbmVUZXh0Qm94Jik7CiAKLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udCYsIGZsb2F0IHhQb3MsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZs
b3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAw
KSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IGxlbiwgZmxvYXQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBj
b25zdDsKIAogICAgIGZsb2F0IG1pbkxvZ2ljYWxXaWR0aCgpIGNvbnN0OwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0
IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGUgZmluYWwgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRl
c3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0
aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hl
KGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
LCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQogICAgIGJvb2wgY29tcHV0ZVVzZUJhY2tzbGFzaEFz
WWVuU3ltYm9sKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0
LDEyICsxNzQsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0RWxlbQog
ZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgoKQogewogICAgIGZs
b2F0IHdpZHRoOwotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5mYXN0QXZlcmFnZUNoYXJXaWR0aElm
QXZhaWxhYmxlKHdpZHRoKSkKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZhc3RBdmVy
YWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQogICAgICAgICByZXR1cm4gd2lkdGg7CiAK
ICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKICAgICBjb25zdCBTdHJpbmcgc3RyID0gU3RyaW5n
KCZjaCwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIFRleHRS
dW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3RyLCBzdHlsZSgpLCBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKICAgICB0ZXh0UnVuLmRpc2FibGVSb3Vu
ZGluZ0hhY2tzKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1bik7CkBAIC0xODksNyAr
MTg5LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OnNjYWxlRW1Ub1VuaXRzKAogewogICAg
IC8vIFRoaXMgbWF0Y2hlcyB0aGUgdW5pdHNQZXJFbSB2YWx1ZSBmb3IgTVMgU2hlbGwgRGxnIGFu
ZCBDb3VyaWVyIE5ldyBmcm9tIHRoZSAiaGVhZCIgZm9udCB0YWJsZS4KICAgICBmbG9hdCB1bml0
c1BlckVtID0gMjA0OC4wZjsKLSAgICByZXR1cm4gcm91bmRmKHN0eWxlKCkuZm9udCgpLnNpemUo
KSAqIHggLyB1bml0c1BlckVtKTsKKyAgICByZXR1cm4gcm91bmRmKHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5zaXplKCkgKiB4IC8gdW5pdHNQZXJFbSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxX
aWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBA
IGZsb2F0IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpnZXRBdmUKICAgICAvLyBTaW5jZSBM
dWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0
aGUgd2lkdGgKICAgICAvLyBvZiBDb3VyaWVyIE5ldywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4
dGFyZWFzIGluIElFLCBGaXJlZm94IGFuZCBTYWZhcmkgV2luLgogICAgIC8vIDEyMjkgaXMgdGhl
IGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBmb3IgQ291cmllciBOZXcuCi0g
ICAgaWYgKHN0eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQor
ICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdy
YW5kZSIpCiAgICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cygxMjI5KTsKICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOSw3ICszMTksNyBAQCBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omdl
dEF2CiAgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJl
YXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKICAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGlu
Z3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KICAgICAv
LyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBmb3IgTVMg
U2hlbGwgRGxnLgotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5maXJzdEZhbWlseSgpID09ICJMdWNp
ZGEgR3JhbmRlIikKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCkg
PT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsK
ICNlbmRpZgogCkBAIC0zMzgsMTUgKzMzOCwxNSBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6CiAgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gMC5mOwogCiAjaWYgIVBM
QVRGT1JNKElPUykKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9u
dCgpLmZpcnN0RmFtaWx5KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKTsKICAgICAvLyBTaW5jZSBMdWNpZGEgR3Jh
bmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgK
ICAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBp
biBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAo
aW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDQw
MjcgaXMgdGhlICh4TWF4IC0geE1pbikgdmFsdWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxlIGZv
ciBNUyBTaGVsbCBEbGcuCiAgICAgaWYgKGZhbWlseSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAg
ICAgIG1heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKDQwMjcpOwotICAgIGVsc2UgaWYgKHN0
eWxlKCkuZm9udCgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQotICAgICAgICBtYXhDaGFy
V2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldp
ZHRoKCkpOworICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5oYXNWYWxpZEF2ZXJh
Z2VDaGFyV2lkdGgoKSkKKyAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CiAjZW5kaWYKIAog
ICAgIC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRoLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5
bGVSZXNvbAogICAgIGNhc2UgQnV0dG9uUGFydDogewogICAgICAgICAvLyBCb3JkZXIKICAgICAg
ICAgTGVuZ3RoQm94IGJvcmRlckJveChzdHlsZS5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS5ib3Jk
ZXJSaWdodFdpZHRoKCksIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLmJvcmRlckxl
ZnRXaWR0aCgpKTsKLSAgICAgICAgYm9yZGVyQm94ID0gbV90aGVtZS0+Y29udHJvbEJvcmRlcihw
YXJ0LCBzdHlsZS5mb250KCksIGJvcmRlckJveCwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICAgICAgYm9yZGVyQm94ID0gbV90aGVtZS0+Y29udHJvbEJvcmRlcihwYXJ0LCBzdHlsZS5mb250
Q2FzY2FkZSgpLCBib3JkZXJCb3gsIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlm
IChib3JkZXJCb3gudG9wKCkudmFsdWUoKSAhPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlLmJvcmRl
clRvcFdpZHRoKCkpKSB7CiAgICAgICAgICAgICBpZiAoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkp
CiAgICAgICAgICAgICAgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyQm94LnRvcCgp
LnZhbHVlKCkpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0
eWxlKFN0eWxlUmVzb2wKICAgICAgICAgfQogCiAgICAgICAgIC8vIFBhZGRpbmcKLSAgICAgICAg
TGVuZ3RoQm94IHBhZGRpbmdCb3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHls
ZS5mb250KCksIHN0eWxlLnBhZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICAgICAgTGVuZ3RoQm94IHBhZGRpbmdCb3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0
LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5wYWRkaW5nQm94KCksIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7CiAgICAgICAgIGlmIChwYWRkaW5nQm94ICE9IHN0eWxlLnBhZGRpbmdCb3goKSkK
ICAgICAgICAgICAgIHN0eWxlLnNldFBhZGRpbmdCb3gocGFkZGluZ0JveCk7CiAKQEAgLTE1NCwy
NSArMTU0LDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAg
ICAgICAgLy8gV2lkdGggLyBIZWlnaHQKICAgICAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQg
aGVyZSBhcmUgYWZmZWN0ZWQgYnkgdGhlIHpvb20uCiAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBp
cyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8g
YWNjb3VudC4KLSAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRy
b2xTaXplKHBhcnQsIHN0eWxlLmZvbnQoKSwgTGVuZ3RoU2l6ZShzdHlsZS53aWR0aCgpLCBzdHls
ZS5oZWlnaHQoKSksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUg
Y29udHJvbFNpemUgPSBtX3RoZW1lLT5jb250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250Q2FzY2Fk
ZSgpLCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGNvbnRyb2xTaXplLndpZHRoKCkgIT0gc3R5bGUu
d2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldFdpZHRoKGNvbnRyb2xTaXplLndpZHRoKCkp
OwogICAgICAgICBpZiAoY29udHJvbFNpemUuaGVpZ2h0KCkgIT0gc3R5bGUuaGVpZ2h0KCkpCiAg
ICAgICAgICAgICBzdHlsZS5zZXRIZWlnaHQoY29udHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAvLyBNaW4tV2lkdGggLyBNaW4tSGVpZ2h0Ci0gICAgICAgIExl
bmd0aFNpemUgbWluQ29udHJvbFNpemUgPSBtX3RoZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFy
dCwgc3R5bGUuZm9udCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhT
aXplIG1pbkNvbnRyb2xTaXplID0gbV90aGVtZS0+bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIHN0
eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmICht
aW5Db250cm9sU2l6ZS53aWR0aCgpICE9IHN0eWxlLm1pbldpZHRoKCkpCiAgICAgICAgICAgICBz
dHlsZS5zZXRNaW5XaWR0aChtaW5Db250cm9sU2l6ZS53aWR0aCgpKTsKICAgICAgICAgaWYgKG1p
bkNvbnRyb2xTaXplLmhlaWdodCgpICE9IHN0eWxlLm1pbkhlaWdodCgpKQogICAgICAgICAgICAg
c3R5bGUuc2V0TWluSGVpZ2h0KG1pbkNvbnRyb2xTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgLy8gRm9udAotICAgICAgICBGb250RGVzY3JpcHRpb24gY29udHJvbEZv
bnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKSk7Ci0gICAgICAgIGlmIChjb250cm9sRm9udCAhPSBzdHlsZS5mb250KCkuZm9u
dERlc2NyaXB0aW9uKCkpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250ID0g
bV90aGVtZS0+Y29udHJvbEZvbnQocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgaWYgKGNvbnRyb2xGb250ICE9IHN0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIE5vdyB1cGRhdGUgb3Vy
IGZvbnQuCiAgICAgICAgICAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGNvbnRyb2xG
b250KSkKLSAgICAgICAgICAgICAgICBzdHlsZS5mb250KCkudXBkYXRlKDApOworICAgICAgICAg
ICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKDApOwogICAgICAgICB9CiAgICAgICAg
IC8vIFJlc2V0IG91ciBsaW5lLWhlaWdodAogICAgICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKQEAgLTEyNTcsNyArMTI1Nyw3IEBAIFN0
cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3REZWZhdWx0TGFiZWwKICAgICByZXR1cm4gZmlsZUJ1
dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxl
TGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnQmIGZv
bnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKK1N0cmluZyBS
ZW5kZXJUaGVtZTo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNB
bGxvd2VkKSBjb25zdAogewogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0RGVmYXVsdExhYmVsKGJvb2wgbXVsdGlwbGVGaWxlc0Fs
bG93ZWQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNv
bnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVz
QWxsb3dlZCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgo
Y29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0aCwgYm9vbCBtdWx0
aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7CiAKICAgICBlbnVtIEZpbGVVcGxvYWREZWNvcmF0aW9u
cyB7IFNpbmdsZUZpbGUsIE11bHRpcGxlRmlsZXMgfTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRG
aWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgLyppbnB1dFJlbmRl
cmVyKi8sIGNvbnN0IFJlbmRlck9iamVjdCYgLypidXR0b25SZW5kZXJlciovLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JiwgSWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgeyBy
ZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAjaW1wb3J0
ICJEYXRlQ29tcG9uZW50cy5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkZsb2F0
Um91bmRlZFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgor
I2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFt
ZVZpZXcuaCIKICNpbXBvcnQgIkdyYWRpZW50LmgiCkBAIC01NDUsNyArNTQ1LDcgQEAgc3RhdGlj
IHZvaWQgYWRqdXN0U2VsZWN0TGlzdEJ1dHRvblN0eWxlKAogICAgIAogY2xhc3MgUmVuZGVyVGhl
bWVNZWFzdXJlVGV4dENsaWVudCA6IHB1YmxpYyBNZWFzdXJlVGV4dENsaWVudCB7CiBwdWJsaWM6
Ci0gICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudChjb25zdCBGb250JiBmb250LCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorICAgIFJl
bmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgICAg
IDogbV9mb250KGZvbnQpCiAgICAgICAgICwgbV9yZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KQog
ICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCkBAIC01NTcsNyArNTU3LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9mb250LndpZHRoKHJ1bik7CiAgICAgfQogcHJpdmF0ZToKLSAgICBjb25z
dCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBSZW5k
ZXJPYmplY3QmIG1fcmVuZGVyT2JqZWN0OwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3N0eWxl
OwogfTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEVsZW1lbnRC
dXR0b25TdHlsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgdGhlIHdpZHRoIGFu
ZCBzZXQgdGhlIGJveC1zaXppbmcgdG8gY29udGVudC1ib3ggdG8gbm90IGNvbmZsaWN0IHdpdGgg
dGhlIHBhZGRpbmcuCi0gICAgRm9udCBmb250ID0gc3R5bGUuZm9udCgpOworICAgIEZvbnRDYXNj
YWRlIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIAogICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoZm9udC5wcmltYXJ5
Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSw3ICsxNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50U25hcHNob3R0
ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBm
aWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lk
dGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9u
dENhc2NhZGUmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5k
ZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVy
LCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpz
ZXRGb250RnJvbUNvbnRyb2xTCiAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAKICAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAg
ICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKDApOwogfQogCiBOU0NvbnRyb2xTaXplIFJl
bmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdApAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgTlNUZXh0RmllbGRDZWxsKiBSZW5kZXJUaGVt
ZU1hYzo6dGV4dEZpZQogICAgIHJldHVybiBtX3RleHRGaWVsZC5nZXQoKTsKIH0KIAotU3RyaW5n
IFJlbmRlclRoZW1lTWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmls
ZUxpc3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxs
b3dlZCkgY29uc3QKK1N0cmluZyBSZW5kZXJUaGVtZU1hYzo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgo
Y29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHdp
ZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAogewogICAgIGlmICh3aWR0aCA8
PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw3
ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAKICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAg
IGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8
fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRp
bmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKSk7CisgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3Qg
Rm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJpY3Mo
KTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudChi
YXNlbGluZVR5cGUoKSk7CkBAIC0xMDE3LDcgKzEwMTcsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxp
bmVCb3g6OnZlcnRpY2FsUG9zaXRpCiAgICAgCiAgICAgaWYgKHZlcnRpY2FsQWxpZ24gIT0gQkFT
RUxJTkUpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudExpbmVTdHlsZSA9IGZp
cnN0TGluZSA/IHBhcmVudC0+Zmlyc3RMaW5lU3R5bGUoKSA6IHBhcmVudC0+c3R5bGUoKTsKLSAg
ICAgICAgY29uc3QgRm9udCYgZm9udCA9IHBhcmVudExpbmVTdHlsZS5mb250KCk7CisgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcGFyZW50TGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7
CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJp
Y3MoKTsKICAgICAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTcgKzE4NCwxNyBAQCBib29sIGNhblVzZUZvcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAg
ICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBo
YXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAgYXV0byYg
cHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCk7CiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5
cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJp
bmVUZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1
b3RlKCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKICAgICAgICAgICAgIHx8IHRl
eHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKHN0eWxlLmZvbnQoKS5jb2RlUGF0aChUZXh0UnVuKHRleHRSZW5kZXJlci50
ZXh0KCkpKSAhPSBGb250OjpTaW1wbGUpCisgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgp
LmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpT
aW1wbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghY2FuVXNlRm9y
VGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250RGF0YSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIFNpbXBsZUxpbmVMYXlvdXQgewogCiBGbG93Q29udGVudHM6OlN0eWxlOjpTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnQoKSkKKyAgICA6IGZv
bnQoc3R5bGUuZm9udENhc2NhZGUoKSkKICAgICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24o
KSkKICAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkK
ICAgICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2lmbmRlZiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzX2gKICNkZWZpbmUg
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKQEAgLTYzLDcg
KzYzLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgIGV4cGxpY2l0IFN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKLSAgICAgICAgY29uc3QgRm9udCYgZm9udDsKKyAg
ICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQ7CiAgICAgICAgIEVUZXh0QWxpZ24gdGV4dEFs
aWduOwogICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZTsKICAgICAgICAgYm9vbCBwcmVz
ZXJ2ZU5ld2xpbmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbAogICAgIGJvb2wgZGVidWdCb3JkZXJzRW5hYmxlZCA9IGZsb3cuZnJhbWUoKS5z
ZXR0aW5ncygpLnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCk7CiAKICAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSAqcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29uc3Qg
Rm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFBhaW50U3R5bGUgdGV4dFBhaW50U3R5bGUg
PSBjb21wdXRlVGV4dFBhaW50U3R5bGUoZmxvdy5mcmFtZSgpLCBzdHlsZSwgcGFpbnRJbmZvKTsK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgdGV4dFBh
aW50U3R5bGUuc3Ryb2tlV2lkdGggPiAwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDggQEAgUnVuUmVzb2x2ZXI6OlJ1
blJlc29sdmVyKGNvbnN0IFJlbmRlckJsbwogICAgICwgbV9saW5lSGVpZ2h0KGxpbmVIZWlnaHRG
cm9tRmxvdyhmbG93KSkKICAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmVGcm9tRmxvdyhmbG93KSkK
ICAgICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZShmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZv
cmUoKSkKLSAgICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSkKLSAgICAsIG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNz
KCkuZGVzY2VudCgpKQorICAgICwgbV9hc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSkKKyAgICAsIG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSkKIHsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1
c3ROb2RlU2l6ZQogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoYXZlcmFnZVNpemUpOwogICAgICAgICAgICAgc3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51
cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZv
bnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShh
dXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVj
dG9yKCkpOwogICAgICAgICAgICAgdGV4dC0+cGFyZW50KCktPnNldFN0eWxlKHN0eWxlLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBw
YXJlbnRSZW5kZXJlciA9IHRleHQtPnBhcmVudCgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wg
VGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAgIGlmIChsaXN0
TWFya2VyUmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUobGlzdE1hcmtl
clJlbmRlcmVyLT5zdHlsZSgpKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgc3R5bGUtPmZvbnQoKS51
cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZv
bnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRT
ZWxlY3RvcigpKTsKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPigq
bGlzdE1hcmtlclJlbmRlcmVyKS5zZXRTdHlsZShzdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgVGV4dEF1
dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAgICAgICBuZXdQYXJlbnRT
dHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgobGluZUhlaWdodCwgRml4ZWQpKTsKICAgICAgICAg
ICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChsaW5lSGVpZ2h0
TGVuZ3RoKTsKICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZv
bnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZl
cigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9u
dENhc2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVS
ZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgICAgICBwYXJlbnRSZW5kZXJl
ci0+c2V0U3R5bGUobmV3UGFyZW50U3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFRleHRBdXRvU2l6aW5nVmFs
dWU6OnJlc2V0KCkKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
b3JpZ2luYWxTaXplKTsKICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBj
bG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHRleHQtPnN0eWxlKCkpOwogICAgICAgICAgICAgc3R5
bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgc3R5
bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVS
ZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVy
KCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgdGV4dC0+cGFyZW50KCktPnNldFN0eWxl
KHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFJlc2V0IHRo
ZSBsaW5lIGhlaWdodCBvZiB0aGUgcGFyZW50LgpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgVGV4
dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBuZXdQYXJlbnRTdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUocGFyZW50U3R5bGUp
OwogICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldExpbmVIZWlnaHQob3JpZ2luYWxMaW5l
SGVpZ2h0KTsKICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250KCkudXBk
YXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250
U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51
cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZv
bnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQ
YXJlbnRTdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHRQYWludGVy
OjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgcGFpbnRTZWxlY3Rl
ZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udCYg
Zm9udCwKK1RleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJh
dGVseSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsCiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRl
eHRSdW4sIGludCBlbmRQb3NpdGlvbkluVGV4dEJveFN0cmluZywgaW50IGxlbmd0aCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRl
eHQsIFRleHRSdW4mIHRleHRSdW4sCiAgICAgRmxvYXRSZWN0JiBib3hSZWN0LCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBTaGFkb3dEYXRhKiB0
ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFkb3csCiAgICAgYm9vbCB0
ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgdGV4dFBhaW50U3R5bGUsIFRleHRQ
YWludFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxlKQpAQCAtNTYsNyArNTYsNyBAQCBUZXh0UGFp
bnRlcjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0CiB7CiB9CiAKLXN0YXRpYyB2b2lkIGRy
YXdUZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBo
YXNpc01hcmssCitzdGF0aWMgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKICAgICBpbnQgZW1waGFz
aXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgaW50IGZyb20sIGNv
bnN0IGludCB0bykKIHsKICAgICBpZiAoZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKQEAgLTExMyw3
ICsxMTMsNyBAQCBTaGFkb3dBcHBsaWVyOjp+U2hhZG93QXBwbGllcigpCiAgICAgICAgIG1fY29u
dGV4dC5jbGVhclNoYWRvdygpOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLAorc3RhdGljIHZv
aWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBlbXBoYXNpc01hcmssCiAgICAgaW50IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsCiAgICAgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93LCBib29sIHN0cm9rZWQsIGJvb2wgaG9yaXpvbnRhbCkKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihj
CiAKIGNsYXNzIFRleHRQYWludGVyIHsKIHB1YmxpYzoKLSAgICBUZXh0UGFpbnRlcihHcmFwaGlj
c0NvbnRleHQmLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVk
VGV4dFNlcGFyYXRlbHksIGNvbnN0IEZvbnQmLAorICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29u
dGV4dCYsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0
U2VwYXJhdGVseSwgY29uc3QgRm9udENhc2NhZGUmLAogICAgIGludCBzdGFydFBvc2l0aW9uSW5U
ZXh0UnVuLCBpbnQgZW5kUG9zaXRpb25JblRleHRCb3hTdHJpbmcsIGludCBsZW5ndGgsIGNvbnN0
IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBSZW5kZXJDb21iaW5lVGV4dCosCiAgICAgVGV4
dFJ1biYsIEZsb2F0UmVjdCYgYm94UmVjdCwgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGVt
cGhhc2lzTWFya09mZnNldCwgY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdywgY29uc3QgU2hh
ZG93RGF0YSogc2VsZWN0aW9uU2hhZG93LAogICAgIGJvb2wgdGV4dEJveElzSG9yaXpvbnRhbCwg
VGV4dFBhaW50U3R5bGUmIG5vblNlbGVjdGlvblBhaW50U3R5bGUsIFRleHRQYWludFN0eWxlJiBz
ZWxlY3Rpb25QYWludFN0eWxlKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBTaGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRvdzsKICAgICBib29sIG1fcGFpbnRTZWxlY3Rl
ZFRleHRPbmx5OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHk7Ci0gICAg
Y29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAg
aW50IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsKICAgICBpbnQgbV9lbmRQb3NpdGlvbkluVGV4
dFJ1bjsKICAgICBpbnQgbV9sZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2lu
Z0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4NiwxMyArNDg2LDEz
IEBAIGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJZk5lZWRlZChSZW5kZXIKICAgICBkb3duY2Fz
dDxSZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51cGRhdGVDb3VudGVyKCk7CiB9CiAKLWlubGlu
ZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZv
bnQmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDApCitpbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVy
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBy
ZW5kZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5n
KCksIHN0eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgdGV4
dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29u
c3QgRm9udCYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFw
c2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9u
dHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCitBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0
aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xs
YXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tG
b250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogCkBAIC01MDEsNyArNTAxLDcgQEAgQUxXQVlTX0lOTElO
RSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dAogICAgICAgICByZXR1cm4gdGV4dC0+d2lkdGgo
ZnJvbSwgbGVuLCBmb250LCB4UG9zLCAmZmFsbGJhY2tGb250cywgJmdseXBoT3ZlcmZsb3cpOwog
CiAgICAgaWYgKGxheW91dCkKLSAgICAgICAgcmV0dXJuIEZvbnQ6OndpZHRoKCpsYXlvdXQsIGZy
b20sIGxlbiwgJmZhbGxiYWNrRm9udHMpOworICAgICAgICByZXR1cm4gRm9udENhc2NhZGU6Ondp
ZHRoKCpsYXlvdXQsIGZyb20sIGxlbiwgJmZhbGxiYWNrRm9udHMpOwogCiAgICAgVGV4dFJ1biBy
dW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LCBmcm9t
LCBsZW4sIHN0eWxlKTsKICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0LT50ZXh0TGVu
Z3RoKCkgLSBmcm9tKTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBpbmxpbmUgdm9pZCBlbnN1cmVDaGFy
YWN0ZXJHZXRzTGluZUJveChMCiAgICAgbGluZU1pZHBvaW50U3RhdGUuc3RvcElnbm9yaW5nU3Bh
Y2VzKElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IucmVuZGVyZXIoKSwg
dGV4dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQoKSkpOwogfQogCi1pbmxpbmUgdm9pZCB0cnlI
eXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRl
ZExpbmVzLCBpbnQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXNMaW1pdCwgaW50IG1pbmltdW1Q
cmVmaXhMaW1pdCwgaW50IG1pbmltdW1TdWZmaXhMaW1pdCwgdW5zaWduZWQgbGFzdFNwYWNlLCB1
bnNpZ25lZCBwb3MsIGZsb2F0IHhQb3MsIGludCBhdmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVk
UGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcs
IElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGludCBuZXh0QnJlYWthYmxlLCBib29sJiBoeXBo
ZW5hdGVkKQoraW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmll
ciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1dGl2ZUh5
cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWluaW11bVN1
ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQgeFBvcywg
aW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRl
U3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3ImIGxpbmVCcmVh
aywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCiB7CiAgICAgLy8gTWFwICdo
eXBoZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06IGF1dG87JyB0byAyLgogICAgIHVuc2lnbmVk
IG1pbmltdW1QcmVmaXhMZW5ndGg7CkBAIC02MTUsMTIgKzYxNSwxMiBAQCBpbmxpbmUgYm9vbCBC
cmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgfQogCiAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlID0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBtX2xpbmVJbmZvKTsK
LSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBib29sIGlzRml4ZWRQaXRjaCA9
IGZvbnQuaXNGaXhlZFBpdGNoKCk7CiAgICAgYm9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBo
ZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29yZTo6Y2FuSHlwaGVuYXRlKHN0eWxlLmxvY2Fs
ZSgpKTsKIAogICAgIHVuc2lnbmVkIGxhc3RTcGFjZSA9IG1fY3VycmVudC5vZmZzZXQoKTsKLSAg
ICBmbG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250KCkud29yZFNwYWNpbmco
KTsKKyAgICBmbG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250Q2FzY2FkZSgp
LndvcmRTcGFjaW5nKCk7CiAgICAgZmxvYXQgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSAwOwogICAg
IGZsb2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVtZW50ID0gMDsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBSZW5kZXJUZXh0SW5mbyB7CiAgICAgUmVu
ZGVyVGV4dCogbV90ZXh0OwogICAgIE93blB0cjxUZXh0TGF5b3V0PiBtX2xheW91dDsKICAgICBM
YXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKLSAgICBjb25zdCBGb250
KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9udDsKIH07CiAKIGNsYXNzIExp
bmVCcmVha2VyIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxp
bmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
TGluZUlubGluZUhlYWRlcnMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCBpbmxpbmUgYm9vbCByZXF1aXJlc0xpbmVCb3hGb3JDb250ZW50KGNvCiAgICAg
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSA9IGxpbmVTdHlsZSgqcGFyZW50LCBs
aW5lSW5mbyk7CiAgICAgICAgIGlmIChmbG93U3R5bGUubGluZUhlaWdodCgpICE9IHBhcmVudFN0
eWxlLmxpbmVIZWlnaHQoKQogICAgICAgICAgICAgfHwgZmxvd1N0eWxlLnZlcnRpY2FsQWxpZ24o
KSAhPSBwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkKLSAgICAgICAgICAgIHx8ICFwYXJlbnRT
dHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGlu
ZUdhcChmbG93U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpKQorICAgICAgICAgICAgfHwgIXBh
cmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnRE
ZXNjZW50QW5kTGluZUdhcChmbG93U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3
IEBAIGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiBzdHIKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh1bml0ID09ICJlbSIpIHsKLSAgICAgICAgbGVuZ3Ro
VmFsdWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZvbnQoKS5zaXplKCk7CisgICAgICAgIGxlbmd0
aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh1bml0ID09ICJleCIpIHsKQEAgLTI5Myw3
ICsyOTMsNyBAQCBib29sIHBhcnNlTWF0aE1MTmFtZWRTcGFjZShjb25zdCBTdHJpbmcmCiAgICAg
ICAgICAgICBsZW5ndGggPSAtNzsgICAgICAgIAogICAgIH0KICAgICBpZiAobGVuZ3RoKSB7Ci0g
ICAgICAgIGxlbmd0aFZhbHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnQoKS5zaXplKCkgLyAxODsK
KyAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXpl
KCkgLyAxODsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE5MSw4ICsxMTkxLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3Bl
cmF0b3JQcgogICAgICAgICBtX29wZXJhdG9yRmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7CiAKICAgICAv
LyBMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSBpcyBzcGVjaWZpZWQgYXMgbXVsdGlwbGUgb2Yg
MS8xOGVtLgotICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9u
dCgpLnNpemUoKSAvIDE4OwotICAgIG1fdHJhaWxpbmdTcGFjZSA9IGVudHJ5LT5yc3BhY2UgKiBz
dHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBtX2xlYWRpbmdTcGFjZSA9IGVudHJ5LT5s
c3BhY2UgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CisgICAgbV90cmFpbGlu
Z1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAx
ODsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVz
KCkKQEAgLTEyMjksOSArMTIyOSw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9w
ZXJhdG9yUHIKICAgICAgICAgbV9vcGVyYXRvckZsYWdzICY9IE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6RmVuY2UgfCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlNlcGFyYXRvcjsgLy8gVGhp
cyByZXNldHMgYWxsIGJ1dCB0aGUgRmVuY2UgYW5kIFNlcGFyYXRvciBwcm9wZXJ0aWVzLgogICAg
IGVsc2UKICAgICAgICAgbV9vcGVyYXRvckZsYWdzID0gMDsgLy8gVGhpcyByZXNldHMgYWxsIHRo
ZSBvcGVyYXRvciBwcm9wZXJ0aWVzLgotICAgIG1fbGVhZGluZ1NwYWNlID0gNSAqIHN0eWxlKCku
Zm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgbGVhZGluZyBzcGFjZSB0byAidGhpY2tt
YXRoc3BhY2UiLgotICAgIG1fdHJhaWxpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXpl
KCkgLyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIu
Ci0gICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250KCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWlu
c2l6ZSB0byAiMWVtIi4KKyAgICBtX2xlYWRpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuc2l6ZSgpIC8gMTg7IC8vIFRoaXMgc2V0cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21h
dGhzcGFjZSIuCisgICAgbV90cmFpbGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUo
KS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5nIHNwYWNlIHRvICJ0aGlja21hdGhz
cGFjZSIuCisgICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKTsgLy8g
VGhpcyBzZXRzIG1pbnNpemUgdG8gIjFlbSIuCiAgICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5
b3V0VW5pdDsgLy8gVGhpcyBzZXRzIG1heHNpemUgdG8gImluZmluaXR5Ii4KIAogICAgIGlmICht
X3RleHRDb250ZW50KSB7CkBAIC0xMzU1LDcgKzEzNTUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpjb21wdXRlUHJlZmVyCiAgICAgICAgIFJlbmRlck1hdGhNTFRva2VuOjpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICBpZiAoaXNJbnZpc2libGVPcGVyYXRv
cigpKSB7CiAgICAgICAgICAgICAvLyBJbiBzb21lIGZvbnRzLCBnbHlwaHMgZm9yIGludmlzaWJs
ZSBvcGVyYXRvcnMgaGF2ZSBub256ZXJvIHdpZHRoLiBDb25zZXF1ZW50bHksIHdlIHN1YnRyYWN0
IHRoYXQgd2lkdGggaGVyZSB0byBhdm9pZCB3aWRlIGdhcHMuCi0gICAgICAgICAgICBHbHlwaERh
dGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250
ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENh
c2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgZmFsc2UpOwogICAg
ICAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IGFkdmFuY2VGb3JHbHlwaChkYXRhKTsKICAgICAg
ICAgICAgIEFTU0VSVChnbHlwaFdpZHRoIDw9IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoIC09IGdseXBoV2lkdGg7CkBA
IC0xMzY0LDcgKzEzNjQsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJl
ZmVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxl
KCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRo
ID0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CiAgICAg
ICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCkBAIC0xNTIxLDcgKzE1
MjEsNyBAQCBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2VtCiAgICAgaWYg
KCFib3R0b20uZ2x5cGgpCiAgICAgICAgIGJvdHRvbS5nbHlwaCA9IGV4dGVuc2lvbi5nbHlwaDsK
IAotICAgIHRvcC5mb250RGF0YSA9ICZzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsK
KyAgICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogICAgIGV4dGVuc2lvbi5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKICAgICBib3R0b20u
Zm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgaWYgKG1pZGRsZS5nbHlwaCkKQEAgLTE1Mzgs
OCArMTUzOCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKIAog
ICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUo
KSk7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udERhdGEoKTsKLSAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250
KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgR2x5cGhEYXRhIGJhc2VHbHlw
aCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIGlmICghcHJpbWFyeUZv
bnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERh
dGEpCiAgICAgICAgIHJldHVybiBkYXRhOwogCkBAIC0xNTcwLDggKzE1NzAsOCBAQCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlEYXRhIGRhdGE7
CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1h
cnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIEdseXBo
RGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hh
cmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSk7CiAgICAgCiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpICYmIGJh
c2VHbHlwaC5mb250RGF0YSA9PSAmcHJpbWFyeUZvbnREYXRhKSB7CiAgICAgICAgIFZlY3RvcjxH
bHlwaD4gc2l6ZVZhcmlhbnRzOwpAQCAtMTYxOCwxMiArMTYxOCwxMiBAQCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgICAgICAgICByZXR1cm4gZGF0YTsKIAog
ICAgICAgICAvLyBXZSBjb252ZXJ0IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRv
IGEgbGlzdCBvZiBnbHlwaCBkYXRhLgotICAgICAgICBHbHlwaERhdGEgdG9wID0gc3R5bGUoKS5m
b250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBm
YWxzZSk7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgpLmZvbnQoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNl
KTsKLSAgICAgICAgR2x5cGhEYXRhIGJvdHRvbSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZv
ckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOworICAgICAg
ICBHbHlwaERhdGEgdG9wID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJh
Y3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOworICAgICAgICBHbHlwaERh
dGEgZXh0ZW5zaW9uID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihzdHJldGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOworICAgICAgICBHbHlw
aERhdGEgYm90dG9tID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOwogICAgICAgICBHbHlwaERh
dGEgbWlkZGxlOwogICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIpCi0g
ICAgICAgICAgICBtaWRkbGUgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
c3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1pZGRs
ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlD
aGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsKICAgICAgICAgYXNzZW1ibHlEYXRhLnNldEds
eXBoQXNzZW1ibHlNb2RlKHRvcCwgZXh0ZW5zaW9uLCBib3R0b20sIG1pZGRsZSk7CiAgICAgfQog
CkBAIC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVT
dHlsZSgpCiAgICAgICAgIG1fc3RyZXRjaHlEYXRhID0gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcihtX3RleHRDb250ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0
cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBHbHlwaERh
dGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4
dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgICAgIEds
eXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7
CiAgICAgICAgIGZsb2F0IGJhc2VTaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgo
YmFzZUdseXBoKSA6IGFkdmFuY2VGb3JHbHlwaChiYXNlR2x5cGgpOwogICAgICAgICBpZiAoc3Ry
ZXRjaFNpemUoKSA8PSBiYXNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4MDIsNyAr
MTgwMiw3IEBAIExheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2wKIAogICAg
IEdseXBoQnVmZmVyIGJ1ZmZlcjsKICAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9u
dERhdGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5
cGhzKHN0eWxlKCkuZm9udCgpLCAqZGF0YS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcmlnaW4p
OworICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpk
YXRhLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1cm4gZ2x5cGhQ
YWludFJlY3Q7CiB9CkBAIC0xODk4LDcgKzE4OTgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpwYWludChQYWludEluCiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9
IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgICAgIEZsb2F0
UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQo
KSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBpbmZv
LmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCksICptX3N0cmV0Y2h5RGF0YS52YXJp
YW50KCkuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOworICAgICAgICBp
bmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9zdHJldGNo
eURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk4MCw3ICsxOTgwLDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbgogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhN
TE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IoKQogewotICAgIGNvbnN0IGF1dG8mIHByaW1h
cnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0
IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKTsKICAgICBpZiAoIXByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpKQogICAgICAgICBy
ZXR1cm4gMDsKIApAQCAtMTk4OSw3ICsxOTg5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6dHJhaWxpbgogICAgIExheW91dFVuaXQgd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsK
IAogICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd05vcm1hbCkgewotICAgICAg
ICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0
ZXh0Q29udGVudCgpLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgICAg
ICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2Fs
T3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJhZGlj
YWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0
b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQg
ZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhh
dmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNhbCBkZXB0
aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93QmFzZWxp
bmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcgKzgzLDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFTU0VSVChw
cmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0
CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkp
IHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhE
YXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVp
Z2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGlj
YWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNp
YmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxlKCku
Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk5LDE3ICsxOTksMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHls
ZSgpCiAKICAgICAvLyBXZSBzZXQgc29tZSBjb25zdGFudHMgdG8gZHJhdyB0aGUgcmFkaWNhbCwg
YXMgZGVmaW5lZCBpbiB0aGUgT3BlblR5cGUgTUFUSCB0YWJsZXMuCiAKLSAgICBtX3J1bGVUaGlj
a25lc3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udCgpLnNpemUoKTsKKyAgICBtX3J1bGVUaGlja25l
c3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7CiAKICAgICAvLyBGSVhN
RTogVGhlIHJlY29tbWVuZGVkIGRlZmF1bHQgZm9yIG1fdmVydGljYWxHYXAgaW4gZGlzcGxheXN0
eWxlIGlzIHJ1bGUgdGhpY2tuZXNzICsgMS80IHgtaGVpZ2h0IChodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICBtX3ZlcnRpY2FsR2FwID0gMTEgKiBt
X3J1bGVUaGlja25lc3MgLyA0OwogICAgIG1fZXh0cmFBc2NlbmRlciA9IG1fcnVsZVRoaWNrbmVz
czsKLSAgICBMYXlvdXRVbml0IGtlcm5CZWZvcmVEZWdyZWUgPSA1ICogc3R5bGUoKS5mb250KCku
c2l6ZSgpIC8gMTg7Ci0gICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHls
ZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBMYXlvdXRVbml0IGtlcm5CZWZvcmVEZWdyZWUg
PSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OworICAgIExheW91dFVuaXQg
a2VybkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4
OwogICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0gMC42ZjsKIAotICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwot
ICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
Lm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgaWYgKGF1dG8qIG1hdGhEYXRh
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IG1fdmVydGljYWxHYXAgc2hvdWxkIHVzZSBSYWRpY2FsRGlzcGxh
eVN0eWxlVmVydGljYWwgaW4gZGlzcGxheSBtb2RlIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICAgICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRh
LT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRp
Y2FsVmVydGljYWxHYXApOwogICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRoRGF0YS0+Z2V0
TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1
bGVUaGlja25lc3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxUb2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxUb2tlbjo6dXBkYXRl
U3R5bGUoKQogICAgICAgICAvLyBUaGlzIHRyaWVzIHRvIGVtdWxhdGUgdGhlIGRlZmF1bHQgbWF0
aHZhcmlhbnQgdmFsdWUgb24gPG1pPiB1c2luZyB0aGUgQ1NTIGZvbnQtc3R5bGUgcHJvcGVydHku
CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIHdoZW4gbWF0aHZhcmlh
bnQgaXMgaW1wbGVtZW50ZWQgKGh0dHA6Ly93a2J1Zy84NTczNSkgYW5kIHdoZW4gZm9udHMgd2l0
aCBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMgY2hhcmFjdGVycyBhcmUgbW9yZSBw
b3B1bGFyLgogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKG5ld1N0eWxl
LmdldCgpLmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgICAgIEZv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS5m
b250U2VsZWN0b3IoKTsKICAgICAgICAgaWYgKCFtX2NvbnRhaW5zRWxlbWVudCAmJiBlbGVtZW50
KCkudGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3BhY2UoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKS5s
ZW5ndGgoKSA9PSAxICYmICF0b2tlbkVsZW1lbnQuaGFzQXR0cmlidXRlKG1hdGh2YXJpYW50QXR0
cikpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRJdGFsaWNPbik7
CiAgICAgICAgIGlmIChuZXdTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKSkKLSAgICAgICAgICAgIG5ld1N0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoZm9udFNl
bGVjdG9yKTsKKyAgICAgICAgICAgIG5ld1N0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRl
KGZvbnRTZWxlY3Rvcik7CiAgICAgfQogCiAgICAgd3JhcHBlci0+c2V0U3R5bGUoV1RGOjptb3Zl
KG5ld1N0eWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgiCkBAIC0yOTMs
NyArMjkzLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6aW5oZXJpdGVkTm90RXF1YWwoY29ucwogfQog
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi1pbmxpbmUgdW5zaWduZWQgY29tcHV0
ZUZvbnRIYXNoKGNvbnN0IEZvbnQmIGZvbnQpCitpbmxpbmUgdW5zaWduZWQgY29tcHV0ZUZvbnRI
YXNoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1sy
XSA9IHsKICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGZvbnQuZm9udERlc2NyaXB0aW9u
KCkuZmlyc3RGYW1pbHkoKS5pbXBsKCkpLApAQCAtMzE1LDcgKzMxNSw3IEBAIHVpbnQzMl90IFJl
bmRlclN0eWxlOjpoYXNoRm9yVGV4dEF1dG9zaXoKICAgICBoYXNoIF49IHJhcmVJbmhlcml0ZWRE
YXRhLT5uYnNwTW9kZTsKICAgICBoYXNoIF49IHJhcmVJbmhlcml0ZWREYXRhLT5saW5lQnJlYWs7
CiAgICAgaGFzaCBePSBXVEY6OkZsb2F0SGFzaDxmbG9hdD46Omhhc2goaW5oZXJpdGVkLT5zcGVj
aWZpZWRMaW5lSGVpZ2h0LnZhbHVlKCkpOwotICAgIGhhc2ggXj0gY29tcHV0ZUZvbnRIYXNoKGlu
aGVyaXRlZC0+Zm9udCk7CisgICAgaGFzaCBePSBjb21wdXRlRm9udEhhc2goaW5oZXJpdGVkLT5m
b250Q2FzY2FkZSk7CiAgICAgaGFzaCBePSBpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3Nw
YWNpbmc7CiAgICAgaGFzaCBePSBpbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nOwog
ICAgIGhhc2ggXj0gaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uOwpAQCAtMzM5LDcgKzMz
OSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmVxdWFsRm9yVGV4dEF1dG9zaXppbmcKICAgICAgICAg
JiYgcmFyZUluaGVyaXRlZERhdGEtPmxpbmVCcmVhayA9PSBvdGhlci0+cmFyZUluaGVyaXRlZERh
dGEtPmxpbmVCcmVhawogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNlY3VyaXR5
ID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNlY3VyaXR5CiAgICAgICAgICYmIGlu
aGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdodCA9PSBvdGhlci0+aW5oZXJpdGVkLT5zcGVjaWZp
ZWRMaW5lSGVpZ2h0Ci0gICAgICAgICYmIGluaGVyaXRlZC0+Zm9udC5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLT5pbmhlcml0ZWQtPmZvbnQpCisgICAgICAgICYmIGluaGVyaXRlZC0+Zm9u
dENhc2NhZGUuZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci0+aW5oZXJpdGVkLT5mb250Q2Fz
Y2FkZSkKICAgICAgICAgJiYgaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nID09
IG90aGVyLT5pbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKICAgICAgICAgJiYg
aW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZyA9PSBvdGhlci0+aW5oZXJpdGVkLT52
ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICAmJiBpbmhlcml0ZWRfZmxhZ3MuX2JveF9k
aXJlY3Rpb24gPT0gb3RoZXItPmluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbgpAQCAtNTUx
LDcgKzU1MSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGMKICNp
ZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgfHwgaW5oZXJpdGVkLT5zcGVj
aWZpZWRMaW5lSGVpZ2h0ICE9IG90aGVyLmluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdodAog
I2VuZGlmCi0gICAgICAgIHx8IGluaGVyaXRlZC0+Zm9udCAhPSBvdGhlci5pbmhlcml0ZWQtPmZv
bnQKKyAgICAgICAgfHwgaW5oZXJpdGVkLT5mb250Q2FzY2FkZSAhPSBvdGhlci5pbmhlcml0ZWQt
PmZvbnRDYXNjYWRlCiAgICAgICAgIHx8IGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3Bh
Y2luZyAhPSBvdGhlci5pbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKICAgICAg
ICAgfHwgaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZyAhPSBvdGhlci5pbmhlcml0
ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgIHx8IGluaGVyaXRlZF9mbGFncy5f
Ym94X2RpcmVjdGlvbiAhPSBvdGhlci5pbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJlY3Rpb24KQEAg
LTExODQsNyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5cGhl
blMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0cmlu
ZywgKCZoeXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1cm4g
Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBo
ZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKKyAgICByZXR1cm4gZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5n
IDogaHlwaGVuTWludXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5
bGU6OnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSBjb25zdApAQCAtMTM0MCwyMCArMTM0MCwyMCBA
QCBjb25zdCBBbmltYXRpb24qIFJlbmRlclN0eWxlOjp0cmFuc2l0aW9uCiAgICAgcmV0dXJuIDA7
CiB9CiAKLWNvbnN0IEZvbnQmIFJlbmRlclN0eWxlOjpmb250KCkgY29uc3QgeyByZXR1cm4gaW5o
ZXJpdGVkLT5mb250OyB9Ci1jb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LmZvbnRNZXRyaWNzKCk7IH0KLWNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5mb250RGVzY3JpcHRpb24oKTsgfQorY29uc3QgRm9u
dENhc2NhZGUmIFJlbmRlclN0eWxlOjpmb250Q2FzY2FkZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVy
aXRlZC0+Zm9udENhc2NhZGU7IH0KK2NvbnN0IEZvbnRNZXRyaWNzJiBSZW5kZXJTdHlsZTo6Zm9u
dE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnRNZXRy
aWNzKCk7IH0KK2NvbnN0IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZvbnREZXNjcmlw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0
aW9uKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpzcGVjaWZpZWRGb250U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsgfQogZmxvYXQgUmVuZGVy
U3R5bGU6OmNvbXB1dGVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24o
KS5jb21wdXRlZFNpemUoKTsgfQotaW50IFJlbmRlclN0eWxlOjpmb250U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGluaGVyaXRlZC0+Zm9udC5waXhlbFNpemUoKTsgfQoraW50IFJlbmRlclN0eWxlOjpm
b250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUucGl4ZWxTaXpl
KCk7IH0KIAogY29uc3QgTGVuZ3RoJiBSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcoKSBjb25zdCB7
IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+d29yZFNwYWNpbmc7IH0KLWZsb2F0IFJlbmRlclN0
eWxlOjpsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LmxldHRl
clNwYWNpbmcoKTsgfQorZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcoKSBjb25zdCB7
IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmxldHRlclNwYWNpbmcoKTsgfQogCiBib29s
IFJlbmRlclN0eWxlOjpzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiB2
KQogewotICAgIGlmIChpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgewot
ICAgICAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnQgPSBGb250KHYsIGluaGVyaXRlZC0+Zm9u
dC5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udC53b3JkU3BhY2luZygpKTsKKyAgICBp
ZiAoaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSAhPSB2KSB7CisgICAg
ICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENhc2NhZGUgPSBGb250Q2FzY2FkZSh2LCBpbmhl
cml0ZWQtPmZvbnRDYXNjYWRlLmxldHRlclNwYWNpbmcoKSwgaW5oZXJpdGVkLT5mb250Q2FzY2Fk
ZS53b3JkU3BhY2luZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTE0MDQsNyArMTQwNCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldFdvcmRT
cGFjaW5nKExlbmd0aCAKICAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gMDsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBQZXJjZW50OgotICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2YWx1ZS5w
ZXJjZW50KCkgKiBmb250KCkuc3BhY2VXaWR0aCgpIC8gMTAwOworICAgICAgICBmb250V29yZFNw
YWNpbmcgPSB2YWx1ZS5wZXJjZW50KCkgKiBmb250Q2FzY2FkZSgpLnNwYWNlV2lkdGgoKSAvIDEw
MDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaXhlZDoKICAgICAgICAgZm9udFdvcmRTcGFj
aW5nID0gdmFsdWUudmFsdWUoKTsKQEAgLTE0MTcsMTEgKzE0MTcsMTEgQEAgdm9pZCBSZW5kZXJT
dHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIAogICAgICAgICBmb250V29yZFNwYWNpbmcgPSAw
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250LnNl
dFdvcmRTcGFjaW5nKGZvbnRXb3JkU3BhY2luZyk7CisgICAgaW5oZXJpdGVkLmFjY2VzcygpLT5m
b250Q2FzY2FkZS5zZXRXb3JkU3BhY2luZyhmb250V29yZFNwYWNpbmcpOwogICAgIHJhcmVJbmhl
cml0ZWREYXRhLmFjY2VzcygpLT53b3JkU3BhY2luZyA9IFdURjo6bW92ZSh2YWx1ZSk7CiB9CiAK
LXZvaWQgUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcoZmxvYXQgdikgeyBpbmhlcml0ZWQu
YWNjZXNzKCktPmZvbnQuc2V0TGV0dGVyU3BhY2luZyh2KTsgfQordm9pZCBSZW5kZXJTdHlsZTo6
c2V0TGV0dGVyU3BhY2luZyhmbG9hdCB2KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENhc2Nh
ZGUuc2V0TGV0dGVyU3BhY2luZyh2KTsgfQogCiB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6
ZShmbG9hdCBzaXplKQogewpAQCAtMTQzNCw3ICsxNDM0LDcgQEAgdm9pZCBSZW5kZXJTdHlsZTo6
c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogICAgIGVsc2UKICAgICAgICAgc2l6ZSA9IHN0ZDo6bWlu
KG1heGltdW1BbGxvd2VkRm9udFNpemUsIHNpemUpOwogCi0gICAgRm9udFNlbGVjdG9yKiBjdXJy
ZW50Rm9udFNlbGVjdG9yID0gZm9udCgpLmZvbnRTZWxlY3RvcigpOworICAgIEZvbnRTZWxlY3Rv
ciogY3VycmVudEZvbnRTZWxlY3RvciA9IGZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CiAg
ICAgRm9udERlc2NyaXB0aW9uIGRlc2MoZm9udERlc2NyaXB0aW9uKCkpOwogICAgIGRlc2Muc2V0
U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShzaXplKTsKQEAg
LTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0IHNp
emUKICNlbmRpZgogCiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGRlc2MpOwotICAgIGZvbnQoKS51
cGRhdGUoY3VycmVudEZvbnRTZWxlY3Rvcik7CisgICAgZm9udENhc2NhZGUoKS51cGRhdGUoY3Vy
cmVudEZvbnRTZWxlY3Rvcik7CiB9CiAKIHZvaWQgUmVuZGVyU3R5bGU6OmdldFNoYWRvd0V4dGVu
dChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIExheW91dFVuaXQgJnRvcCwgTGF5b3V0VW5pdCAm
cmlnaHQsIExheW91dFVuaXQgJmJvdHRvbSwgTGF5b3V0VW5pdCAmbGVmdCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENvbnRlbnREYXRhOwog
Y2xhc3MgQ291bnRlckNvbnRlbnQ7CiBjbGFzcyBDdXJzb3JMaXN0OwogY2xhc3MgRmlsdGVyT3Bl
cmF0aW9uczsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEZvbnRNZXRy
aWNzOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1hc2tJbWFnZU9wZXJhdGlvbjsKQEAgLTY4OSw3
ICs2ODksNyBAQCBwdWJsaWM6CiAgICAgRUNsZWFyIGNsZWFyKCkgY29uc3QgeyByZXR1cm4gbm9u
aW5oZXJpdGVkX2ZsYWdzLmNsZWFyKCk7IH0KICAgICBFVGFibGVMYXlvdXQgdGFibGVMYXlvdXQo
KSBjb25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MudGFibGVMYXlvdXQoKTsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29u
c3Q7CiAgICAgZmxvYXQgc3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVJbmhlcml0ZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBpbmxp
bmUgU3R5bGVJbmhlcml0ZWREYXRhOjpTdHlsZUluaGVyaXRlCiAjaWYgRU5BQkxFKElPU19URVhU
X0FVVE9TSVpJTkcpCiAgICAgLCBzcGVjaWZpZWRMaW5lSGVpZ2h0KG8uc3BlY2lmaWVkTGluZUhl
aWdodCkKICNlbmRpZgotICAgICwgZm9udChvLmZvbnQpCisgICAgLCBmb250Q2FzY2FkZShvLmZv
bnRDYXNjYWRlKQogICAgICwgY29sb3Ioby5jb2xvcikKICAgICAsIHZpc2l0ZWRMaW5rQ29sb3Io
by52aXNpdGVkTGlua0NvbG9yKQogewpAQCAtNjcsNyArNjcsNyBAQCBib29sIFN0eWxlSW5oZXJp
dGVkRGF0YTo6b3BlcmF0b3I9PShjb25zCiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcp
CiAgICAgICAgICYmIHNwZWNpZmllZExpbmVIZWlnaHQgPT0gby5zcGVjaWZpZWRMaW5lSGVpZ2h0
CiAjZW5kaWYKLSAgICAgICAgJiYgZm9udCA9PSBvLmZvbnQKKyAgICAgICAgJiYgZm9udENhc2Nh
ZGUgPT0gby5mb250Q2FzY2FkZQogICAgICAgICAmJiBjb2xvciA9PSBvLmNvbG9yCiAgICAgICAg
ICYmIHZpc2l0ZWRMaW5rQ29sb3IgPT0gby52aXNpdGVkTGlua0NvbG9yCiAgICAgICAgICYmIGhv
cml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0gby5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJp
dGVkRGF0YS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNkZWZpbmUgU3R5bGVJbmhlcml0ZWREYXRhX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTGVu
Z3RoLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgTGVuZ3RoIHNwZWNpZmllZExp
bmVIZWlnaHQ7CiAjZW5kaWYKIAotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250
Q2FzY2FkZTsKICAgICBDb2xvciBjb2xvcjsKICAgICBDb2xvciB2aXNpdGVkTGlua0NvbG9yOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSwx
MyArMjI1LDEzIEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6dXBkYXRlU2NhbGVkRm8KICAg
ICBjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKCp0aGlzLCBzdHlsZSgpLCBtX3NjYWxpbmdG
YWN0b3IsIG1fc2NhbGVkRm9udCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29t
cHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0JiBzY2FsaW5nRmFjdG9yLCBGb250JiBzY2Fs
ZWRGb250KQordm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2NhbGVkRm9udEZv
clN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnRDYXNjYWRlJiBzY2FsZWRGb250KQogewog
ICAgIC8vIEFsdGVyIGZvbnQtc2l6ZSB0byB0aGUgcmlnaHQgb24tc2NyZWVuIHZhbHVlIHRvIGF2
b2lkIHNjYWxpbmcgdGhlIGdseXBocyB0aGVtc2VsdmVzLCBleGNlcHQgd2hlbiBHZW9tZXRyaWNQ
cmVjaXNpb24gaXMgc3BlY2lmaWVkCiAgICAgc2NhbGluZ0ZhY3RvciA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNhbGN1bGF0ZVNjcmVlbkZvbnRTaXplU2NhbGluZ0ZhY3RvcihyZW5kZXJlcik7CiAg
ICAgaWYgKHNjYWxpbmdGYWN0b3IgPT0gMSB8fCAhc2NhbGluZ0ZhY3RvciB8fCBzdHlsZS5mb250
RGVzY3JpcHRpb24oKS50ZXh0UmVuZGVyaW5nTW9kZSgpID09IEdlb21ldHJpY1ByZWNpc2lvbikg
ewogICAgICAgICBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICAgICAgc2NhbGVkRm9udCA9IHN0eWxl
LmZvbnQoKTsKKyAgICAgICAgc2NhbGVkRm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFJlbmRlclNWR0lu
bGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYmV0dGVy
IGhhbmRsZSB0aGUgY2FzZSB3aGVuIHdlIGNvbXB1dGUgdmVyeSBzbWFsbCBmb250cyBiZWxvdyAo
YmVsb3cgMXB0KS4KICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpj
b21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0KGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFNpemUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCks
IHNjYWxpbmdGYWN0b3IsIHJlbmRlcmVyLmRvY3VtZW50KCkpKTsKIAotICAgIHNjYWxlZEZvbnQg
PSBGb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAgc2NhbGVkRm9udCA9IEZvbnRDYXNj
YWRlKGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgc2NhbGVkRm9udC51cGRhdGUocmVuZGVy
ZXIuZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcg
QEAKICNpZm5kZWYgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCiAjZGVmaW5lIFJlbmRlclNWR0lubGlu
ZVRleHRfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtNDEsOSArNDEsOSBAQCBwdWJsaWM6CiAgICAgU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXMqIGxheW91dEF0dHJpYnV0ZXMoKSB7IHJldHVybiAmbV9sYXlv
dXRBdHRyaWJ1dGVzOyB9CiAKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsaW5nRmFjdG9yOyB9Ci0gICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRG
b250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9CiAgICAgdm9pZCB1cGRhdGVTY2Fs
ZWRGb250KCk7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0JiBzY2FsaW5nRmFj
dG9yLCBGb250JiBzY2FsZWRGb250KTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlTmV3U2NhbGVk
Rm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxv
YXQmIHNjYWxpbmdGYWN0b3IsIEZvbnRDYXNjYWRlJiBzY2FsZWRGb250KTsKIAogICAgIC8vIFBy
ZXNlcnZlcyBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gZm9yIHRoZSB1c2UgaW4gRFJULiBJdCBr
bm93cyBob3cgdG8gcm91bmQgYW5kIGRvZXMgYSBiZXR0ZXIgam9iIHRoYW4gZW5jbG9zaW5nSW50
UmVjdC4KICAgICBGbG9hdFJlY3QgZmxvYXRMaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CkBAIC02
NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5l
VGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zY2FsaW5n
RmFjdG9yOwotICAgIEZvbnQgbV9zY2FsZWRGb250OworICAgIEZvbnRDYXNjYWRlIG1fc2NhbGVk
Rm9udDsKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyBtX2xheW91dEF0dHJpYnV0ZXM7CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYs
NyBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjCiAgICAgZmxvYXQg
c2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChz
Y2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSByZW5kZXJlcigp
LnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCA9IHJlbmRl
cmVyKCkuc2NhbGVkRm9udCgpOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBzY2FsZWRGb250TWV0
cmljcyA9IHNjYWxlZEZvbnQuZm9udE1ldHJpY3MoKTsKICAgICBGbG9hdFBvaW50IHRleHRPcmln
aW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkK
QEAgLTE3Miw3ICsxNzIsNyBAQCBMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2Vs
ZWN0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZXh0U2hvdWxkQmVQYWludGVkKGNvbnN0IFJlbmRl
clNWR0lubGluZVRleHQmIHRleHRSZW5kZXJlcikKIHsKLSAgICAvLyBGb250OjpwaXhlbFNpemUo
KSwgcmV0dXJucyBGb250RGVzY3JpcHRpb246OmNvbXB1dGVkUGl4ZWxTaXplKCksIHdoaWNoIHJl
dHVybnMgImludCh4ICsgMC41KSIuCisgICAgLy8gRm9udENhc2NhZGU6OnBpeGVsU2l6ZSgpLCBy
ZXR1cm5zIEZvbnREZXNjcmlwdGlvbjo6Y29tcHV0ZWRQaXhlbFNpemUoKSwgd2hpY2ggcmV0dXJu
cyAiaW50KHggKyAwLjUpIi4KICAgICAvLyBJZiB0aGUgYWJzb2x1dGUgZm9udCBzaXplIG9uIHNj
cmVlbiBpcyBiZWxvdyB4PTAuNSwgZG9uJ3QgcmVuZGVyIGFueXRoaW5nLgogICAgIHJldHVybiB0
ZXh0UmVuZGVyZXIuc2NhbGVkRm9udCgpLnBpeGVsU2l6ZSgpOwogfQpAQCAtNDE5LDcgKzQxOSw3
IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFIKICAgICAgICAgICAg
ICAgICAsIGRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBkaXJPdmVycmlkZSgpIHx8IHN0
eWxlLT5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUg
Ki8pOwogCi0gICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250
KCkpCisgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZH
Rm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRp
bmdIYWNrcygpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgcG9zaXRp
b25PZmZzZXRGb3JEZWMKICAgICByZXR1cm4gMC4wZjsKIH0KIAotc3RhdGljIGlubGluZSBmbG9h
dCB0aGlja25lc3NGb3JEZWNvcmF0aW9uKFRleHREZWNvcmF0aW9uLCBjb25zdCBGb250JiBmb250
KQorc3RhdGljIGlubGluZSBmbG9hdCB0aGlja25lc3NGb3JEZWNvcmF0aW9uKFRleHREZWNvcmF0
aW9uLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICAvLyBGSVhNRTogRm9yIFNWRyBG
b250cyB3ZSBuZWVkIHRvIHVzZSB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSA8Zm9udC1m
YWNlPiBpZiBzcGVjaWZpZWQuCiAgICAgLy8gQ29tcGF0aWJsZSB3aXRoIEJhdGlrL09wZXJhCkBA
IC01MzUsNyArNTM1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25X
aQogICAgIFJlbmRlclN0eWxlJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVuZGVyZXIu
c3R5bGUoKTsKIAogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSAxOwotICAgIEZvbnQgc2NhbGVk
Rm9udDsKKyAgICBGb250Q2FzY2FkZSBzY2FsZWRGb250OwogICAgIFJlbmRlclNWR0lubGluZVRl
eHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNv
cmF0aW9uU3R5bGUsIHNjYWxpbmdGYWN0b3IsIHNjYWxlZEZvbnQpOwogICAgIEFTU0VSVChzY2Fs
aW5nRmFjdG9yKTsKIApAQCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0V2l0aFNoYWQKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVyZXIoKS5z
Y2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAgY29uc3Qg
Rm9udCYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7CiAgICAgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3R5bGUtPnRleHRTaGFkb3coKTsKIAogICAgIEZsb2F0
UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQg
U1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGkKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0ZXh0LT50ZXh0KCkpLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCk7CiAKICAgICBTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZyBzcGFjaW5nTGF5b3V0KGZvbnQpOwogICAgIFNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZSBiYXNlbGluZUxheW91dChmb250KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAs
NyArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENv
bnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtMjgsNyArMjgsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6U1ZH
VGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnQmIGZvbnQpCitTVkdUZXh0TGF5b3V0
RW5naW5lQmFzZWxpbmU6OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZShjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICA6IG1fZm9udChmb250KQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRD
YXNjYWRlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFNW
R1JlbmRlclN0eWxlOwpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBTVkdUZXh0TWV0cmljczsKIGNs
YXNzIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKTsKIHB1YmxpYzoKLSAgICBTVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9udCYpOworICAgIFNWR1RleHRMYXlvdXRFbmdpbmVC
YXNlbGluZShjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAgZmxvYXQgY2FsY3VsYXRlQmFzZWxp
bmVTaGlmdChjb25zdCBTVkdSZW5kZXJTdHlsZSosIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQp
IGNvbnN0OwogICAgIGZsb2F0IGNhbGN1bGF0ZUFsaWdubWVudEJhc2VsaW5lU2hpZnQoYm9vbCBp
c1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0OwpA
QCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEVBbGlnbm1lbnRCYXNlbGlu
ZSBkb21pbmFudEJhc2VsaW5lVG9BbGlnbm1lbnRCYXNlbGluZShib29sIGlzVmVydGljYWxUZXh0
LCBjb25zdCBSZW5kZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3Q7CiAKLSAgICBjb25zdCBG
b250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgiCiAKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdM
ZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIApAQCAtMzIsNyAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250JiBmb250KQorU1ZHVGV4
dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250KQogICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX2xhc3RDaGFyYWN0
ZXIoMCkKIHsKQEAgLTk4LDcgKzk4LDcgQEAgZmxvYXQgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmc6OmNhbGN1bAogCiAgICAgZmxvYXQgc3BhY2luZyA9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkg
KyBrZXJuaW5nOwogICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICYmIGxhc3RDaGFyYWN0ZXIgJiYg
bV9mb250LndvcmRTcGFjaW5nKCkpIHsKLSAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZSgq
Y3VycmVudENoYXJhY3RlcikgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3Rlcikp
CisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVy
KSAmJiAhRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3RlcikpCiAgICAgICAg
ICAgICBzcGFjaW5nICs9IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CiBjbGFzcyBTVkdFbGVtZW50Owog
CkBAIC0zMiwxMyArMzIsMTMgQEAgY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFNWR1RleHRMYXlv
dXRFbmdpbmVTcGFjaW5nIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZyk7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmco
Y29uc3QgRm9udCYpOworICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0IEZvbnRD
YXNjYWRlJik7CiAKICAgICBmbG9hdCBjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wgaXNWZXJ0aWNh
bFRleHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBoKTsKICAgICBm
bG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nQW5kU3BhY2luZyhjb25zdCBTVkdSZW5kZXJTdHlsZSos
IFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQsIGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVy
KTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENh
c2NhZGUmIG1fZm9udDsKICAgICBjb25zdCBVQ2hhciogbV9sYXN0Q2hhcmFjdGVyOwogCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3MoUmVuZGVyU1ZHCiAgICAg
ZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHRSZW5kZXJlci5zY2FsaW5nRmFjdG9yKCk7CiAgICAg
QVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHRl
eHRSZW5kZXJlci5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZv
bnQgPSB0ZXh0UmVuZGVyZXIuc2NhbGVkRm9udCgpOwogICAgIGludCBsZW5ndGggPSAwOwogCiAg
ICAgLy8gQ2FsY3VsYXRlIHdpZHRoL2hlaWdodCB1c2luZyB0aGUgc2NhbGVkIGZvbnQsIGRpdmlk
ZSB0aGlzIHJlc3VsdCBieSB0aGUgc2NhbGluZ0ZhY3RvciBhZnRlcndhcmRzLgpAQCAtNzAsNyAr
NzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1Y3RUZXh0UnVuCiAgICAgICAg
ICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgaXNPdmVycmlk
ZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAg
IGlmIChzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYg
KHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAg
ICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC05MSw3
ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2gKIAogU1ZH
VGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWR0lubGluZVRleHQmIHRleHQsIHVu
c2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGZsb2F0IHdpZHRoLCBjb25zdCBTdHJp
bmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7CisgICAgYm9vbCBuZWVkc0NvbnRl
eHQgPSB0ZXh0LnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gdGV4dC5zY2FsaW5nRmFjdG9yKCk7CiAg
ICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVp
bGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsOSBAQCB2b2lkIFNWR1RleHRN
ZXRyaWNzQnVpbGRlcjo6aW5pdGlhbGl6ZU1lCiAgICAgbV9jb21wbGV4U3RhcnRUb0N1cnJlbnRN
ZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3MoKTsKICAgICBtX3RvdGFsV2lkdGggPSAwOwogCi0gICAg
Y29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHRleHQuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBzY2FsZWRGb250ID0gdGV4dC5zY2FsZWRGb250KCk7CiAgICAgbV9ydW4gPSBT
VkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0KTsKLSAgICBtX2lzQ29tcGxleFRl
eHQgPSBzY2FsZWRGb250LmNvZGVQYXRoKG1fcnVuKSA9PSBGb250OjpDb21wbGV4OworICAgIG1f
aXNDb21wbGV4VGV4dCA9IHNjYWxlZEZvbnQuY29kZVBhdGgobV9ydW4pID09IEZvbnRDYXNjYWRl
OjpDb21wbGV4OwogCiAgICAgaWYgKG1faXNDb21wbGV4VGV4dCkKICAgICAgICAgbV9zaW1wbGVX
aWR0aEl0ZXJhdG9yID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0
aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250CiAgICAgcmV0dXJuIHN2Z0ZvbnRE
YXRhOwogfQogCi1mbG9hdCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVz
aW5nU1ZHRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hh
cnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBTVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5
cGhOYW1lKSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQoJmZvbnQsIHJ1bik7CiAgICAg
R2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogICAgIH0KIH0KIAotc3RhdGljIEdseXBoRGF0
YSBtaXNzaW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMgR2x5cGhEYXRh
IG1pc3NpbmdHbHlwaEZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnREYXRh
KCk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEuaXNTVkdGb250KCkpCkBAIC0zMDEsNyArMzAx
LDcgQEAgc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JGb250KGNvbgogICAgIHJldHVy
biBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRh
KTsKIH0KIAotR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY29uc3QgRm9udCYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVD
aGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkK
K0dseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVUNo
YXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWdu
ZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKQog
ewogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBmb250LmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
aGFyYWN0ZXIsIG1pcnJvciwgQXV0b1ZhcmlhbnQpOwogICAgIGlmICghZ2x5cGhEYXRhLmdseXBo
KQpAQCAtMzQyLDcgKzM0Miw3IEBAIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dDo6Z2wKICAgICAvLyBUaGUgYmVoYXZpb3IgZG9lcyBub3Qgc2VlbSB0byBiZSBzcGVjaWZpZWQu
IEZvciBzaW1wbGljaXR5IHdlIGRvbid0IHRyeSB0byByZXNvbHZlIGZvbnQgZmFsbGJhY2tzIGNv
bnRleHQtc2Vuc2l0aXZlbHkuCiAgICAgRm9udERlc2NyaXB0aW9uIGZhbGxiYWNrRGVzY3JpcHRp
b24gPSBmb250LmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZhbGxiYWNrRGVzY3JpcHRpb24uc2V0
RmFtaWxpZXMoVmVjdG9yPEF0b21pY1N0cmluZz4geyBzYW5zU2VyaWZGYW1pbHkgfSk7Ci0gICAg
Rm9udCBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlvbiwgZm9udC5sZXR0ZXJTcGFjaW5n
KCksIGZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgRm9udENhc2NhZGUgZmFsbGJhY2tGb250KGZh
bGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250LndvcmRTcGFjaW5n
KCkpOwogICAgIGZhbGxiYWNrRm9udC51cGRhdGUoZm9udC5mb250U2VsZWN0b3IoKSk7CiAKICAg
ICByZXR1cm4gZmFsbGJhY2tGb250LmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIG1p
cnJvciwgQXV0b1ZhcmlhbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVmIFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKICNkZWZpbmUgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHRfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiVGV4dFJ1bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw5ICs0Miw5IEBA
IHB1YmxpYzoKICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZTsgfQogICAgIHZvaWQgc2V0
QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZSogb2JqZWN0KSB7IG1fYWN0
aXZlUGFpbnRpbmdSZXNvdXJjZSA9IG9iamVjdDsgfQogCi0gICAgdmlydHVhbCBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIz
MiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQm
IGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3Qg
Rm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWly
cm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmlu
ZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSos
IGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9u
dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5n
JiBnbHlwaE5hbWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0
aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNo
YXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgV2lkdGhJdGVy
YXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHlsZS5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIApAQCAtODksNyArODksNyBAQCBHbHlwaE92ZXJmbG93
IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvCiAgICAgZmxvYXQgd2F2eU9mZnNldDsKICAgICAg
ICAgCiAgICAgVGV4dERlY29yYXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUgPSBsaW5lU3R5bGUu
dGV4dERlY29yYXRpb25TdHlsZSgpOwotICAgIGZsb2F0IGhlaWdodCA9IGxpbmVTdHlsZS5mb250
KCkuZm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOworICAgIGZsb2F0IGhlaWdodCA9IGxpbmVT
dHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKTsKICAgICBHbHlw
aE92ZXJmbG93IG92ZXJmbG93UmVzdWx0OwogICAgIAogICAgIGlmIChkZWNvcmF0aW9uU3R5bGUg
PT0gVGV4dERlY29yYXRpb25TdHlsZVdhdnkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L0lubGluZVRleHRCb3hTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L0lubGluZVRleHRCb3hTdHlsZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogI2lmbmRlZiBJbmxpbmVUZXh0Qm94U3R5bGVfaAogI2RlZmluZSBJbmxpbmVUZXh0Qm94
U3R5bGVfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgUmVmPFJlbmRlclN0
eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29ucwogICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAKICAgICBDU1NGb250U2VsZWN0b3Iq
IGZvbnRTZWxlY3RvciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpID8gZG9jdW1l
bnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCktPmZvbnRTZWxlY3RvcigpIDogbnVsbHB0cjsKLSAg
ICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKyAgICBk
b2N1bWVudFN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiAK
ICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc4LDcgKzk3
OCw3IEBAIHZvaWQgcmVzb2x2ZVRyZWUoRG9jdW1lbnQmIGRvY3VtZW50LCBDaGEKICAgICAgICAg
aWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LnNldHRpbmdzKCkpIHsKICAgICAgICAg
ICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBkb2N1bWVudC5zdHlsZVJlc29sdmVy
SWZFeGlzdHMoKTsKICAgICAgICAgICAgIGlmIChzZXR0aW5ncy0+Zm9udEZhbGxiYWNrUHJlZmVy
c1BpY3RvZ3JhcGhzKCkgJiYgc3R5bGVSZXNvbHZlcikKLSAgICAgICAgICAgICAgICBkb2N1bWVu
dFN0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkp
OworICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS51cGRh
dGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
U3R5bGU6OkNoYW5nZSBkb2N1bWVudENoYW5nZSA9IGRldGVybWluZUNoYW5nZShkb2N1bWVudFN0
eWxlLmdldCgpLCBkb2N1bWVudC5yZW5kZXJWaWV3KCktPnN0eWxlKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOSArMjgwLDkgQEAg
dm9pZCBjb21wdXRlTm9ybWFsaXplZFNwYWNlcyhjb25zdCBUZXh0UgogICAgIGlmIChub3JtYWxp
emVkU3BhY2VzU3RyaW5nQ2FjaGUubGVuZ3RoKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJ1
bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJ1bi5pczhC
aXQoKSkKLSAgICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udDo6bm9ybWFs
aXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzOCgpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKKyAg
ICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udENhc2NhZGU6Om5vcm1hbGl6
ZVNwYWNlcyhydW4uY2hhcmFjdGVyczgoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CiAgICAg
ZWxzZQotICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBGb250Ojpub3JtYWxp
emVTcGFjZXMocnVuLmNoYXJhY3RlcnMxNigpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKKyAg
ICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udENhc2NhZGU6Om5vcm1hbGl6
ZVNwYWNlcyhydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwogICAg
IGlmIChtaXJyb3IpCiAgICAgICAgIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IGNyZWF0
ZVN0cmluZ1dpdGhNaXJyb3JlZENoYXJhY3RlcnMobm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdI
S2VybkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHRm9udEZhY2VTcmNFbGVtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDggQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRm9udC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRm9udENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2Fz
Y2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KQEAgLTQ2Mywx
MiArNDYzLDEyIEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3UKIAog
dm9pZCBXZWJQcm9jZXNzOjpzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChib29sIGFs
d2F5c1VzZUNvbXBsZXhUZXh0KQogewotICAgIFdlYkNvcmU6OkZvbnQ6OnNldENvZGVQYXRoKGFs
d2F5c1VzZUNvbXBsZXhUZXh0ID8gV2ViQ29yZTo6Rm9udDo6Q29tcGxleCA6IFdlYkNvcmU6OkZv
bnQ6OkF1dG8pOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRDb2RlUGF0aChhbHdheXNV
c2VDb21wbGV4VGV4dCA/IFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpDb21wbGV4IDogV2ViQ29yZTo6
Rm9udENhc2NhZGU6OkF1dG8pOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFNob3VsZFVzZUZv
bnRTbW9vdGhpbmcoYm9vbCB1c2VGb250U21vb3RoaW5nKQogewotICAgIFdlYkNvcmU6OkZvbnQ6
OnNldFNob3VsZFVzZVNtb290aGluZyh1c2VGb250U21vb3RoaW5nKTsKKyAgICBXZWJDb3JlOjpG
b250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKHVzZUZvbnRTbW9vdGhpbmcpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwMiw3ICs4MDIsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNv
bnN0CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRv
UmVtb3ZlOwogICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZv
clNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewotICAgICAgICAgICAgQ1RG
b250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgp
OworICAgICAgICAgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKICAgICAgICAgICAgIENURm9udFN5bWJvbGljVHJh
aXRzIHRyYWl0cyA9IGZvbnQgPyBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSA6IDA7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0cmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNz
Q29jb2EubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ0ZO
ZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRm9udC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeUNhY2hl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeVByZXNzdXJlSGFuZGxlci5oPgpAQCAtMTk0LDcg
KzE5NCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHIKICAgICBt
X2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCA9IFdURjo6bW92ZShwYXJhbWV0ZXJzLmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdQb3J0KTsKICAgICBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkID0g
cGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZDsKICAgICBtX3Nob3VsZEZvcmNlU2Ny
ZWVuRm9udFN1YnN0aXR1dGlvbiA9IHBhcmFtZXRlcnMuc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vi
c3RpdHV0aW9uOwotICAgIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCA/IEtlcm5pbmcg
fCBMaWdhdHVyZXMgOiAwKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0RGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFibGVLZXJuaW5nQW5kTGlnYXR1cmVzQnlEZWZh
dWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOwogCiAgICAgTWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpSZWxpZWZMb2dnZXI6OnNldExvZ2dpbmdFbmFibGVkKHBhcmFtZXRlcnMuc2hvdWxkRW5h
YmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZMb2dnaW5nKTsKIApJbmRleDogU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5o
IgogCiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5oPgpAQCAtOTIsNyArOTIsNyBAQCAt
ICh2b2lkKV93ZWJfZHJhd0F0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgCiAgICAgICAgIGlmICghZmxp
cHBlZCkKICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwog
Ci0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBw
b2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBmb250U21vb3RoaW5n
SXNBbGxvd2VkID8gQXV0b1Ntb290aGluZyA6IEFudGlhbGlhc2VkKTsKKyAgICAgICAgRm9udENh
c2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVd
KSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBmb250U21vb3RoaW5nSXNBbGxvd2Vk
ID8gQXV0b1Ntb290aGluZyA6IEFudGlhbGlhc2VkKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7
CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCAtIChmbG9hdClfd2ViX3dpZHRoV2l0aEZvbnQ6KE5TRm9u
dCAqKWZvCiAgICAgW3NlbGYgZ2V0Q2hhcmFjdGVyczpidWZmZXIuZGF0YSgpXTsKIAogICAgIGlm
IChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBG
b250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSks
ICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0p
OworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQs
IFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
aXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwg
bGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJl
dHVybiB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJTdHJpbmdUcnVuY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJTdHJpbmdUcnVuY2F0b3IubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViU3RyaW5nVHJ1bmNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwyMSArMjksMjEgQEAKICNpbXBvcnQgIldlYlN0cmluZ1RydW5jYXRvci5oIgogCiAjaW1wb3J0
ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250UGxhdGZvcm1E
YXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmluZ1RydW5jYXRvci5oPgogI2ltcG9ydCA8cnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgog
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKLXN0YXRpYyBXZWJDb3JlOjpGb250JiBm
b250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCitzdGF0aWMgV2ViQ29yZTo6Rm9udENhc2NhZGUm
IGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPE5TRm9udD4+IGN1cnJlbnROU0ZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFdlYkNvcmU6OkZvbnQ+IGN1cnJlbnRGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxXZWJDb3JlOjpGb250Q2FzY2FkZT4gY3VycmVudEZvbnQ7CiAgICAgaWYgKFtmb250IGlz
RXF1YWw6Y3VycmVudE5TRm9udC5nZXQoKS5nZXQoKV0pCiAgICAgICAgIHJldHVybiBjdXJyZW50
Rm9udDsKICAgICBjdXJyZW50TlNGb250LmdldCgpID0gZm9udDsKLSAgICBjdXJyZW50Rm9udC5n
ZXQoKSA9IFdlYkNvcmU6OkZvbnQoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9u
dCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJh
d2luZ1RvU2NyZWVuXSk7CisgICAgY3VycmVudEZvbnQuZ2V0KCkgPSBXZWJDb3JlOjpGb250Q2Fz
Y2FkZShXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAh
W1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsK
ICAgICByZXR1cm4gY3VycmVudEZvbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQog
CiAgICAgICAgIFBvcHVwTWVudVN0eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1TdHlsZShpKTsK
ICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAgICBpZiAoc3R5
bGUuZm9udCgpICE9IEZvbnQoKSkgeworICAgICAgICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnRD
YXNjYWRlKCkpIHsKICAgICAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKICAgICAgICAgICAgIGlmICghZm9udCkgewogICAg
ICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEo
KS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OTAsNyArMTQ5MCw3IEBAIC0gKEJPT0wpX3Zp
ZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5kUmUKIAogKyAodm9pZClfc2V0QWx3YXlzVXNlc0Nv
bXBsZXhUZXh0Q29kZVBhdGg6KEJPT0wpZgogewotICAgIEZvbnQ6OnNldENvZGVQYXRoKGYgPyBG
b250OjpDb21wbGV4IDogRm9udDo6QXV0byk7CisgICAgRm9udENhc2NhZGU6OnNldENvZGVQYXRo
KGYgPyBGb250Q2FzY2FkZTo6Q29tcGxleCA6IEZvbnRDYXNjYWRlOjpBdXRvKTsKIH0KIAogKyAo
dm9pZClfc2V0QWxsb3dzUm91bmRpbmdIYWNrczooQk9PTClhbGxvd3NSb3VuZGluZ0hhY2tzCkBA
IC0zMTY4LDEyICszMTY4LDEyIEBAIC0gKEJPT0wpX2Rhc2hib2FyZEJlaGF2aW9yOihXZWJEYXNo
Ym9hcmQKIAogKyAodm9pZClfc2V0U2hvdWxkVXNlRm9udFNtb290aGluZzooQk9PTClmCiB7Ci0g
ICAgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGYpOworICAgIEZvbnRDYXNjYWRlOjpzZXRT
aG91bGRVc2VTbW9vdGhpbmcoZik7CiB9CiAKICsgKEJPT0wpX3Nob3VsZFVzZUZvbnRTbW9vdGhp
bmcKIHsKLSAgICByZXR1cm4gRm9udDo6c2hvdWxkVXNlU21vb3RoaW5nKCk7CisgICAgcmV0dXJu
IEZvbnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhpbmcoKTsKIH0KIAogI2lmICFQTEFURk9STShJ
T1MpCkBAIC00NzEwLDcgKzQ3MTAsNyBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICBncmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViR3JhbW1hckNoZWNraW5n
RW5hYmxlZF07CiAjZW5kaWYKIAotICAgIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVk
QnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOworICAgIEZv
bnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhbZGVmYXVsdHMgYm9vbEZv
cktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERlZmF1bHRzS2V5
XSA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAg
YXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkID0gW3NlbGYgX3Nob3VsZEF1dG9tYXRp
Y1F1b3RlU3Vic3RpdHV0aW9uQmVFbmFibGVkXTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244688</attachid>
            <date>2015-01-15 05:39:57 -0800</date>
            <delta_ts>2015-01-15 05:50:02 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-9.patch</filename>
            <type>text/plain</type>
            <size>421642</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZv
bnQoKS5maXJzdEZhbWlseSgpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQo
OCkgPT0gIi13ZWJraXQtIikKICAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFt
ZS5zdWJzdHJpbmcoOCk7CiAKICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1F
KSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpbnQgZm9udFdlaWdodCA9
IC0xOwotICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIHN3aXRjaCAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6
CiAgICAgICAgIGZvbnRXZWlnaHQgPSAxMDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKIAogICAgIHJl
c3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfVU5ERVJMSU5FKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
ICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpID8gInNpbmdsZSIgOiAibm9uZSIpOwogCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAi
aXRhbGljIiA6ICJub3JtYWwiKTsKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwg
c3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3JtYWwiKTsKIAog
ICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmli
dXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERl
Y29yYXRpb24oKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpID8gInRydWUiIDogImZhbHNl
Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgogI2ltcG9ydCAiQ2hyb21l
LmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpAQCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8K
LSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3Ig
PSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4
dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1w
b3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgi
CiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRN
TEFuY2hvckVsZW1lbnQuaCIKQEAgLTg0OCw3ICs4NDgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCBy
YW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNz
aWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNvbG9y
cwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRyYWdJbWFnZS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAi
SFRNTE5hbWVzLmgiCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBh
dXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAj
ZWxzZQogLSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVm
KV9mb250CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
cmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJGbG9hdFBvaW50Lmgi
Ci0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKQEAgLTcxLDcgKzcxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiB1c2luZyBXZWJDb3JlOjpGbG9hdFBvaW50OwotdXNpbmcgV2ViQ29yZTo6Rm9udDsKK3VzaW5n
IFdlYkNvcmU6OkZvbnRDYXNjYWRlOwogdXNpbmcgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Owog
dXNpbmcgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTA0LDggKzE1MDQsOCBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChD
CiBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNl
cGFyYXRlZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+Zm9udCgpLmZh
bWlseUNvdW50KCk7ICsraSkKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQodmFsdWVGb3JGYW1p
bHkoc3R5bGUtPmZvbnQoKS5mYW1pbHlBdChpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+Zm9udENhc2NhZGUoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWls
eUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKQEAgLTI1NDUsNyArMjU0NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWMKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdvcmRCcmVhazoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29y
ZFNwYWNpbmc6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHls
ZS0+Zm9udCgpLndvcmRTcGFjaW5nKCksIHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5n
KCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgogICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1dyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
aXIuaCIKICNpbmNsdWRlICJSR0JDb2xvci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVy
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZjxMb2FkRm9udENhbGxiYWNrPihuZXcgTG9hZEZvbnRDYWxsYmFjayhu
dW1Mb2FkaW5nLCBmb250TG9hZGVyLCBsb2FkQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNrPiBjcmVhdGVGcm9t
UGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYgZm9udExvYWRlciwg
Y29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNr
PiBjcmVhdGVGcm9tUGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYg
Zm9udExvYWRlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBvbnN1Y2Nlc3M7CiAgICAgICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+
IG9uZXJyb3I7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBGb250TG9hZGVyOjpsb2FkRm9udChj
b25zdCBEaWN0aW9uYQogICAgIFN0cmluZyBmb250U3RyaW5nOwogICAgIGlmICghcGFyYW1zLmdl
dCgiZm9udCIsIGZvbnRTdHJpbmcpKQogICAgICAgICByZXR1cm47Ci0gICAgRm9udCBmb250Owor
ICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJp
bmcsIGZvbnQpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+
IGNhbGxiYWNrID0gTG9hZEZvbnRDYWxsYmFjazo6Y3JlYXRlRnJvbVBhcmFtcyhwYXJhbXMsICp0
aGlzLCBmb250KTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250
KGNvbnN0IERpY3Rpb25hCiBib29sIEZvbnRMb2FkZXI6OmNoZWNrRm9udChjb25zdCBTdHJpbmcm
IGZvbnRTdHJpbmcsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzZWNvbmQg
cGFyYW1ldGVyICh0ZXh0KSBpcyBpZ25vcmVkLgotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZvbnRTdHlsZShmb250U3RyaW5nLCBmb250KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250
LmZhbWlseUNvdW50KCk7IGkrKykgewpAQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSgKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShpZCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoaWQp
LmdldCgpKTsKIH0KIAotYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0
cmluZyYgZm9udFN0cmluZywgRm9udCYgZm9udCkKK2Jvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZv
bnRTdHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnRDYXNjYWRlJiBmb250KQogewog
ICAgIC8vIEludGVycHJldCBmb250U3RyaW5nIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2ZvbnQn
IGF0dHJpYnV0ZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuCiAgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9u
dFN0eWxlKGNvbnN0IAogCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZWZhdWx0Rm9u
dERlc2NyaXB0aW9uKTsKIAotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlLT5mb250KCku
Zm9udFNlbGVjdG9yKCkpOworICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250
IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMzE5
LDcgKzMxOSw3IEBAIGJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKICAg
ICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoc3R5bGVSZXNvbHZlciwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZSk7
CiAKLSAgICBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmb250ID0gc3R5bGUtPmZvbnRDYXNj
YWRlKCk7CiAgICAgZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2U7CiBjbGFzcyBEaWN0
aW9uYXJ5OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZvbnQ7CitjbGFz
cyBGb250Q2FzY2FkZTsKIGNsYXNzIExvYWRGb250Q2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBl
bmRpbmdFdmVudHNUaW1lckZpcmVkKCkgeyBmaXJlUGVuZGluZ0V2ZW50cygpOyB9CiAgICAgdm9p
ZCBzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2b2lkIGZpcmVQZW5kaW5n
RXZlbnRzKCk7Ci0gICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYsIEZvbnQm
KTsKKyAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udENhc2NhZGUm
KTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVTaGUKIHsKICAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgdGhpcyk7CiAgICAgaWYgKGF1dG8gcmVuZGVyVmlldyA9IGRvY3VtZW50KCku
cmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnQoKS51cGRhdGUo
Zm9udFNlbGVjdG9yKCkpOworICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIAogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdmlld3BvcnRTdHlsZVJlc29sdmVyKCktPnJlc29sdmUoKTsKQEAgLTc0OCw3
ICs3NDgsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAg
ICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewogICAgICAgICAgICAgc19zdHlsZU5v
dFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwogICAgICAg
ICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3Ip
OworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwogICAgICAgICByZXR1cm4gKnNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC0xMDMxLDkgKzEwMzEsOSBAQCBSZWY8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTCiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBh
cmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBz
dHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7
CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBt
X3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgcmV0
dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvclpvb21DaGFuZ2Uo
c3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNo
YW5nZShzdHlsZSk7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwor
ICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgaWYg
KG1fc3RhdGUuZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKCkpCiAgICAgICAgIHN0eWxlLT5zZXRI
YXNWaWV3cG9ydFVuaXRzKHRydWUpOwogICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0yMTg1LDcgKzIxODUsNyBAQCBp
bmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAKICAgICAvLyBDaGluZXNl
IGFuZCBKYXBhbmVzZSBsYWNrIHdvcmQgYm91bmRhcnkgbWFya3MsIGFuZCB0aGVyZSBpcyBubyBj
bGVhciBhZ3JlZW1lbnQgb24gd2hhdCBjb25zdGl0dXRlcwogICAgIC8vIGEgd29yZCwgc28gdHJl
YXQgdGhlIHBvc2l0aW9uIGJlZm9yZSBhbnkgQ0pLIGNoYXJhY3RlciBhcyBhIHdvcmQgc3RhcnQu
Ci0gICAgaWYgKEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woZmlyc3RDaGFyYWN0ZXIpKQor
ICAgIGlmIChGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJjaFN0
YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFbGVtZW50Lmgi
CiAjaW1wb3J0ICJFbGVtZW50VHJhdmVyc2FsLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVy
LmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgpAQCAtMTExNCw3ICsxMTE0LDcgQEAgc3RhdGlj
IFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0YXRpYyBQbGF0Zm9y
bUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdGF0
aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250
ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEwIEBAIE5TQXR0cmlidXRl
ZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5n
bGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChz
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3Vn
aCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
ICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpXSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKICAgICAgICAgICAgIFthdHRy
cy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSFRNTENvbnZlcnRlci5oIgpAQCAtMjEzLDcgKzIxMyw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVz
dWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkgewogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTIz
NSw3ICsyMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAg
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVu
ZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJp
bWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJp
bWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpA
QCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0Zv
clMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAgIGlm
IChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50
LmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAi
RnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKQEAgLTExNSw3ICsxMTUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpm
b250Rm9yU2VsCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9u
dCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUp
CiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9y
U2VsCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhh
dmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQg
PSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9u
dCkgewpAQCAtMTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclMKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0Zv
bnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAo
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkg
JiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xv
cjo6YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDUsNyArMjEwNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihkZWZhdWx0Rm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dCgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBuZXdTdHls
ZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKQEAgLTIxMjIsNyArMjEyMiw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBzdHlsZVJlc29s
dmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogCi0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9yKCkpOwogICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKICAgICBzdHlsZVJlc29sdmVyLmZvbnRT
ZWxlY3RvcigpLT5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcygmbW9kaWZpYWJsZVN0
YXRlKCkpOwpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdUZXh0SQogICAgIGlmIChmaWxsICYmIGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1pl
cm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBhY2Nl
c3NGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBhY2Nlc3NGb250KCk7CiAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwog
CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gdGV4dDsKQEAgLTIzNzIsMTAgKzIzNzIsMTAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKGxvY2F0aW9uLngoKSAtIG1hc2tSZWN0LngoKSwg
bG9jYXRpb24ueSgpIC0gbWFza1JlY3QueSgpKTsKICAgICAgICAgICAgIC8vIFdlIGRyYXcgd2hl
biBmb250V2lkdGggaXMgMCBzbyBjb21wb3NpdGluZyBvcGVyYXRpb25zIChlZywgYSAiY29weSIg
b3ApIHN0aWxsIHdvcmsuCiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoKGZvbnRXaWR0aCA+IDAgPyAod2lkdGggLyBmb250V2lkdGgpIDogMCksIDEpKTsKLSAg
ICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBG
bG9hdFBvaW50KDAsIDApLCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAg
ICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBGbG9h
dFBvaW50KDAsIDApLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUo
LW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250
ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwpAQCAtMjM5OCwxNSArMjM5OCwxNSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAgICBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNv
bXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBs
b2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAg
ICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250OjpVc2VG
YWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRl
eHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7
CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgewotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhdyh0ZXh0UmVjdCk7CiAgICAgfQogfQpAQCAtMjQyNiw3ICsyNDI2LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmluZmxhdGVTdAogICAgIHJlY3QuaW5mbGF0ZShk
ZWx0YSk7CiB9CiAKLWNvbnN0IEZvbnQmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YWNjZXNz
Rm9udCgpCitjb25zdCBGb250Q2FzY2FkZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nl
c3NGb250KCkKIHsKICAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAKICAgICAgICAgU3RyaW5nIG1f
dW5wYXJzZWRGb250OwotICAgICAgICBGb250IG1fZm9udDsKKyAgICAgICAgRm9udENhc2NhZGUg
bV9mb250OwogICAgICAgICBib29sIG1fcmVhbGl6ZWRGb250OwogICAgIH07CiAKQEAgLTMwOCw3
ICszMDgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0
cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCA9
IDAsIGJvb2wgdXNlTWF4V2lkdGggPSBmYWxzZSk7CiAKLSAgICBjb25zdCBGb250JiBhY2Nlc3NG
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGFjY2Vzc0ZvbnQoKTsKIAogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxNZW5jbG9zZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIFN0cmluZyBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OmxvbmdEaXZM
ZWYKICAgICBUZXh0UnVuIHJ1bihjbG9zaW5nQnJhY2UuaW1wbCgpLCBjbG9zaW5nQnJhY2UubGVu
Z3RoKCkpOwogICAgIE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKG5vZGUgJiYg
bm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBwYWRk
aW5nLmFwcGVuZE51bWJlcihmb250LndpZHRoKHJ1bikpOwogICAgICAgICBwYWRkaW5nLmFwcGVu
ZExpdGVyYWwoInB4Iik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEdlbmVyaWNGYW1pbGll
cy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudVN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51U3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBQb3B1cE1lbnVTdHlsZV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBvcHVwTWVudVNpemVNaW5pCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udCYg
Zm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFw
cGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24s
IGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tn
cm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1l
bnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVT
aXplTm9ybWFsKQorICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgdmlz
aWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5n
dGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHRE
aXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBl
ID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVj
dFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKICAg
ICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAgICAsIG1fYmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQpCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2ZvcmVncm91bmRDb2xvcjsgfQogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIGNvbnN0
IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQogICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25lKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25lOyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0QXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7IH0KQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2xvciBtX2ZvcmVncm91bmRDb2xv
cjsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBGb250IG1fZm9udDsKKyAgICBG
b250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgYm9vbCBtX2lzRGlz
cGxheU5vbmU7CiAgICAgYm9vbCBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRy
b2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CkBAIC00Miw3ICs0Miw3IEBAIExlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250
cm9sUGEKICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ1NTIHN5c3RlbSBjb2xvcnMg
YW5kIGZvbnRzCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihUaGVtZUNvbG9yKSBjb25z
dCB7IHJldHVybiBDb2xvcigpOyB9Ci0gICAgdmlydHVhbCBGb250IHN5c3RlbUZvbnQoVGhlbWVG
b250LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCB7IHJldHVybiBGb250KCk7IH0KKyAgICB2aXJ0
dWFsIEZvbnRDYXNjYWRlIHN5c3RlbUZvbnQoVGhlbWVGb250LCBGb250RGVzY3JpcHRpb24mKSBj
b25zdCB7IHJldHVybiBGb250Q2FzY2FkZSgpOyB9CiAgICAgCiAgICAgLy8gSG93IGZhc3QgdGhl
IGNhcmV0IGJsaW5rcyBpbiB0ZXh0IGZpZWxkcy4KICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiAwLjU7IH0KQEAgLTgyLDE3ICs4MiwxNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5bGVzIG9m
IGNvbnRyb2xzLgogICAgIAogICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3VsdCBzaG91
bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IC8qem9vbUZh
Y3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdmly
dHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5m
b250RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9v
bWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBh
bHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIExlbmd0
aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9v
bWVkU2l6ZTsgfQorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9vbWVkU2l6ZTsgfQogICAgIAogICAg
IC8vIFJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29y
ZGluYXRlcy4gIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KICAgICAKICAgICAv
LyBBbGxvd3MgdGhlIHRoZW1lIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIu
Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29u
c3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAgICAgCiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hp
dGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGcmFtZVZp
ZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIGFsbG93IGNvbXBp
bGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBo
YXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBjbGFzcyBkZWZpbml0aW9uCi10ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRM
YXlvdXQqIHB0cikKLXsKLSAgICBXZWJDb3JlOjpGb250OjpkZWxldGVMYXlvdXQocHRyKTsKLX0K
LQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLQotY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFj
a0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLAotICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAg
IDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotfTsKLQotc3RhdGljIGJvb2wgaXNEcmF3
bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gcnVuLnJlbmRl
cmluZ0NvbnRleHQoKTsKLX0KLQotc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiogc2V0OwotICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHNldCA9IG5ldyBIYXNoU2V0
PEF0b21pY1N0cmluZz47Ci0gICAgICAgIHNldC0+YWRkKCJNUyBQR290aGljIik7Ci0gICAgICAg
IFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwg
MHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBzZXQtPmFk
ZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5p
Y29kZU5hbWVNU1BHb3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsK
LSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywg
MHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWlj
U3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1l
TVNQTWluY2hvKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBHb3RoaWMiKTsKLSAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4
MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0
cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNH
b3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIE1pbmNobyIpOwotICAgICAgICBVQ2hh
ciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBF
LCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TTWluY2hvKSkpOwotCi0gICAgICAg
IHNldC0+YWRkKCJNZWlyeW8iKTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9
IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUF9OwotICAgICAgICBzZXQtPmFkZChBdG9t
aWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVN
ZWlyeW8pKSk7Ci0gICAgfQotICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0K
LUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOwotCi1UeXBlc2V0dGluZ0Zl
YXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAo
Q3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLUZvbnQ6OkZvbnQoKQotICAgIDogbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBt
X3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQot
ICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDApCi17Ci19Ci0KLUZvbnQ6OkZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNp
bmcpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKLSAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZk
LmZpcnN0RmFtaWx5KCkpKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlz
IGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0
ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCi0gICAgLCBtX2xldHRlclNwYWNpbmcoMCkKLSAg
ICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFs
c2UpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSkKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50
ZXJGb250KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9v
dGhpbmdNb2RlKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQo
KSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKLSNlbmRpZgotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9y
UGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwg
bV93b3JkU3BhY2luZygwKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERh
dGEuZm9udCgpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250
R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9u
dFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdl
dFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdl
aWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50ZXJGb250KCkpOwotICAgIG1fZ2x5cGhzID0g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxl
Y3Rvci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikK
LSAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQotICAgICwg
bV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCi0gICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9s
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQot
ICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0Zl
YXR1cmVzKCkpCi17Ci19Ci0KLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhl
cikKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwot
ICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7Ci0gICAgbV9sZXR0ZXJTcGFjaW5nID0gb3Ro
ZXIubV9sZXR0ZXJTcGFjaW5nOwotICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNl
dHRpbmdGZWF0dXJlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgRm9udDo6b3BlcmF0
b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3Jp
cHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dv
cmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVyLm1fZ2x5cGhzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDYW4gdGhl
c2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lw
ZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVj
dG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBv
dGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewotICAgIC8vIFRo
aXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2Fj
aGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCi0gICAgRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCAzPiBmYW1pbGllczsKLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKLSAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdz
OwotfTsKLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhz
Q2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQotICAgICAgICA6IGtleShXVEY6Om1v
dmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShnKSkKLSAgICB7IH0KLSAgICBGb250
R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7Ci19OwotCi10
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVF
bnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHNDYWNoZTsKLQotc3RhdGljIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNo
ZUtleSYgYikKLXsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnRE
ZXNjcmlwdGlvbkNhY2hlS2V5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZm9u
dFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24g
IT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250
U2VsZWN0b3JGbGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmZhbWlsaWVz
LnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxp
ZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgp
Ci17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwg
Y2FjaGUsICgpKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgaW52YWxpZGF0ZUZvbnRH
bHlwaHNDYWNoZSgpCi17Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsKLX0KLQotdm9p
ZCBjbGVhcldpZHRoQ2FjaGVzKCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2Fj
aGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIo
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlRm9udEdseXBo
c0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBrZXkuZm9u
dERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRl
c2NyaXB0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKQotICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpKTsKLSAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwotICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwotICAgIGtleS5m
b250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVz
RmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlv
bikgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2go
Y29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA3
PiBoYXNoQ29kZXM7Ci0gICAgaGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtl
eS5mYW1pbGllcy5zaXplKCkpOwotCi0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgaGFzaENvZGVzLnVu
Y2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9ySWQpOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytpKQotICAgICAgICBoYXNoQ29kZXMudW5jaGVj
a2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2go
a2V5LmZhbWlsaWVzW2ldKSA6IDApOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVk
KSk7Ci19Ci0KLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNo
ZSgpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7Ci0gICAgRm9udEdseXBo
c0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsKLSAgICBmb3Ig
KEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgp
Lmhhc09uZVJlZigpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci19Ci0KLXN0YXRp
YyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi17Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9u
dEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkp
OwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7
Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0Nh
Y2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7
Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVu
dHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIG5ld0VudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSks
IEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBSZWY8Rm9udEdseXBocz4g
Z2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVy
OwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1
bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVuZUNvdW50ZXIg
JSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRF
bnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2Fs
IGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJp
ZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5i
ZWdpbigpKTsKLSAgICByZXR1cm4gZ2x5cGhzOwotfQotCi12b2lkIEZvbnQ6OnVwZGF0ZShQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAotewotICAgIG1fZ2x5cGhz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7Ci0gICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tz
bGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKLSAgICBtX3R5cGVzZXR0aW5n
RmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi1mbG9hdCBGb250
OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Ci17Ci0gICAgLy8gRG9u
J3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJl
IGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCi0gICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2Un
IGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFs
bGJhY2sKLSAgICAvLyBmb250KS4KLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8p
OwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8g
RklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVu
cyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAw
MDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3Ro
KCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9
IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICBy
ZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotCi0g
ICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYgKGlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0byA8IDAp
Ci0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
Y29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIGVsc2UKLSAgICAgICAg
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50
LCBmcm9tLCB0byk7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVy
bmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBl
eHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgotICAgICAgICBpZiAo
IWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQotICAgICAgICAgICAgZmFs
bGJhY2tGb250cyA9IDA7Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUg
dGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCi0gICAgICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92
ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKLSAgICAgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVz
ID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgIGJv
b2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRl
clNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hl
KCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBpZiAoY2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkp
Ci0gICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKLQotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Ci0gICAgaWYgKCFmYWxsYmFja0ZvbnRzKQot
ICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKLQotICAgIGZsb2F0
IHJlc3VsdDsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQotICAgICAgICByZXN1
bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBpZiAoY2FjaGVF
bnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICpjYWNoZUVudHJ5ID0g
cmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkKLSAgICAgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSNlbmRp
ZgotCi0gICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5sZW5ndGgoKTsKLSAgICBnbHlwaE5hbWUgPSAi
IjsKLSAgICByZXR1cm4gd2lkdGgocnVuKTsKLX0KLQotR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkgY29uc3QKLXsKLSAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgp
LmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihj
KTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAgICAgIGMgPSB1
cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKLSAg
ICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gdV9jaGFyTWlycm9yKGMpOwotCi0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3Jp
cHRpb24sIHZhcmlhbnQpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxU
ZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBj
b25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KikKLXsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7
Ci0gICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAotICAgICJBcmlhbCBIZWJyZXciLAotICAgICJD
aGFsa2JvYXJkIiwKLSAgICAiQ29jaGluIiwKLSAgICAiQ29yc2l2YSBIZWJyZXciLAotICAgICJD
b3VyaWVyIiwKLSAgICAiRXVwaGVtaWEgVUNBUyIsCi0gICAgIkdlbmV2YSIsCi0gICAgIkdpbGwg
U2FucyIsCi0gICAgIkhlaSIsCi0gICAgIkhlbHZldGljYSIsCi0gICAgIkhvZWZsZXIgVGV4dCIs
Ci0gICAgIkluYWlNYXRoaSIsCi0gICAgIkthaSIsCi0gICAgIkx1Y2lkYSBHcmFuZGUiLAotICAg
ICJNYXJrZXIgRmVsdCIsCi0gICAgIk1vbmFjbyIsCi0gICAgIk1zaHRha2FuIiwKLSAgICAiTmV3
IFBlbmluaW0gTVQiLAotICAgICJPc2FrYSIsCi0gICAgIlJhYW5hbmEiLAotICAgICJTVEhlaXRp
IiwKLSAgICAiU3ltYm9sIiwKLSAgICAiVGltZXMiLAotICAgICJBcHBsZSBCcmFpbGxlIiwKLSAg
ICAiQXBwbGUgTGlHb3RoaWMiLAotICAgICJBcHBsZSBMaVN1bmciLAotICAgICJBcHBsZSBTeW1i
b2xzIiwKLSAgICAiQXBwbGVHb3RoaWMiLAotICAgICJBcHBsZU15dW5nam8iLAotICAgICIjR3Vu
Z1NlbyIsCi0gICAgIiNIZWFkTGluZUEiLAotICAgICIjUENNeXVuZ2pvIiwKLSAgICAiI1BpbEdp
IiwKLX07Ci0KLS8vIEZvciBmb250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9u
J3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBPUy8yIHRhYmxlCi0vLyBmb3IgYXZnQ2hhcldp
ZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRo
ZSBhdmdDaGFyV2lkdGgKLS8vIGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2Vl
bXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAotLy8gYnV0LCBpbiBv
cmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhp
cyBjaGVjayBmb3IKLS8vIGFsbCBwbGF0Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFt
aWx5KCk7Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotICAgIC8vIEludGVybmFsIGZv
bnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFi
bGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOwot
Ci0gICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgewotICAgICAg
ICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21p
Y1N0cmluZz47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQotICAgICAgICAgICAg
Zm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbaV0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOwot
fQotCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdp
ZHRoKSBjb25zdAotewotICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9u
dERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdo
dCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
LXsKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0g
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgcmV0dXJuIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOwot
Ci0gICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVj
dGlvblJlY3QsIGZyb20sIHRvKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKLQotICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0lu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7Ci0gICAgbm9ybWFsaXplZC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3RlcnNbaV0pKTsKLQotICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKLQotdm9pZCBGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3Ro
aW5nOwotfQotCi1ib29sIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCi17Ci0gICAgcmV0dXJu
IHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci19Ci0KLXZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29k
ZVBhdGggcCkKLXsKLSAgICBzX2NvZGVQYXRoID0gcDsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9u
dDo6Y29kZVBhdGgoKQotewotICAgIHJldHVybiBzX2NvZGVQYXRoOwotfQotCi12b2lkIEZvbnQ6
OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcykKLXsKLSAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlw
ZXNldHRpbmdGZWF0dXJlczsKLX0KLQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlcygpCi17Ci0gICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXM7Ci19Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRS
dW4mIHJ1bikgY29uc3QKLXsKLSAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQotICAgICAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICByZXR1cm4gU2ltcGxlOwotI2VuZGlmCi0KLSAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3Jp
cHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBDb21w
bGV4OwotICAgIAotICAgIGlmIChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMpKQotICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQotICAgICAgICBy
ZXR1cm4gU2ltcGxlOwotCi0gICAgaWYgKHJ1bi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFNp
bXBsZTsKLQotICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRp
bmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCi0gICAgcmV0
dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3Ro
KCkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRo
YXQgd2UgCi0gICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5
L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIG5vdCAnY29tYmluaW5n
JywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KLSAgICAvLyBBbHRl
cm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBz
b3J0ZWQKLSAgICAvLyBsaXN0IG9mIHJhbmdlcy4KLSAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1w
bGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBV
KzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxldHRlcnMpICAK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDJFOSkgCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAg
dGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzNkYpCi0gICAgICAgICAgICByZXR1cm4gQ29t
cGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkx
IHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywg
SGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1a2hhCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJp
YywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAotICAgICAgICAvLyBE
ZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVs
dWd1LCBLYW5uYWRhLCAKLSAgICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8s
IFRpYmV0YW4sIE15YW5tYXIKLSAgICAgICAgaWYgKGMgPCAweDA2MDApIAotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTA5RikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAo
b25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3Nl
OwotICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1
bHQgb2Ygc3RlcCBBKQotICAgICAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDExRkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICBpZiAoYyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0
aGlvcGljIGNvbWJpbmluZyBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChjIDw9IDB4MTM1RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlm
IChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywg
QnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xpYW4KLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE4QUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChV
bmljb2RlIDQuMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDE5
NEYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTk4
MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5ldyBUYWkgTHVlCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOURGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBC
dWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRpYwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MUNGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3Vn
aCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxREZGKQotICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMg
d2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKLSAgICAgICAgaWYgKGMgPD0g
MHgyMDAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAweDIw
RDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDIwRkYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VG
IHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgyQ0YxKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAy
RiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDMwMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJp
bmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHhBNjdEKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFy
ayBmb3IgQmFtdW0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEE2
RjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgIC8vIFUrQTgwMCB0aHJv
dWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5k
ZWQsCi0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRl
bmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAotICAgICAgICBpZiAoYyA8IDB4QTgwMCkg
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQotICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdC
MCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBFeHQuIEIKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9n
YXRlCi0KLSAgICAgICAgICAgIGlmIChpID09IGxlbiAtIDEpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysraV07Ci0gICAg
ICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgVUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFs
IEluZGljYXRvciBTeW1ib2xzCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweDFGMUZGKQotICAgICAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3Rl
ciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9u
IHNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAxRUYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzEx
MDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3Jp
cHRzCi0gICAgICAgICAgICAvLyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KLQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAw
IHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4RkUwRikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZF
MkYgQ29tYmluaW5nIGhhbGYgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoYyA8PSAweEZFMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMp
Ci17Ci0gICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCi0gICAg
aWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgotICAgIGlmIChj
ID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRTgwICYmIGMg
PD0gMHgyRUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBLYW5neGkgUmFk
aWNhbHMuCi0gICAgaWYgKGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgU3Ryb2tlcy4KLSAgICBpZiAoYyA+PSAweDMxQzAg
JiYgYyA8PSAweDMxRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCi0gICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhG
QUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVv
Z3JhcGhzIEV4dGVuc2lvbiBCLgotICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRl
b2dyYXBocyBFeHRlbnNpb24gQy4KLSAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjcz
RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dy
YXBocyBFeHRlbnNpb24gRC4KLSAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRl
b2dyYXBocyBTdXBwbGVtZW50LgotICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKLXsKLSAgICAvLyAweDJDNyBD
YXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQotICAgIC8vIDB4MkNBIE1vZGlmaWVyIExl
dHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKLSAgICAvLyAweDJD
QiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25l
IAotICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKLSAg
ICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMg
PT0gMHgyRDkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIwMjAp
IHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChj
ID09IDB4MjAzQykKLSAgICAgICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8
IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEpCi0gICAgICAg
IHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChj
ID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQotICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8
IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09
IDB4MjEyMSkKLSAgICAgICAgfHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChj
ID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1QSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdC
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09
IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNC
RSkgfHwgKGMgPT0gMHgyM0JGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+
PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAweDI0OTIpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgyNDlDICYmIGMgPD0gMHgyNEZGKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0g
MHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChjID09IDB4MjVBQikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9
PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1
QkMpIHx8IChjID09IDB4MjVCRCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlm
ICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9
PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1
Q0MpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9
IDB4MjVEMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI1RTIgJiYg
YyA8PSAweDI1RTYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyNUVG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4
MjYwMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAo
YyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAw
eDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkg
fHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMg
PT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID09IDB4MkIxQSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgotICAgIGlm
IChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgot
ICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgzMDMwKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0gMHgzMDNGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhpcmFnYW5hCi0gICAgaWYgKGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEthdGFrYW5hIAotICAgIGlmIChjID49
IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBC
b3BvbW9mbwotICAgIGlmIChjID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKLSAgICBpZiAoYyA+PSAw
eDMxQTAgJiYgYyA8PSAweDMxQkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotIAotICAgIC8vIEVu
Y2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCi0gICAgaWYgKGMgPj0gMHgzMjAwICYmIGMg
PD0gMHgzMkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0
aWJpbGl0eS4KLSAgICBpZiAoYyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLgotICAgIGlm
IChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwg
KGMgPT0gMHhGRTE5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHhG
RjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGgg
Rm9ybXMKLSAgICAvLyBVc3VhbGx5IG9ubHkgdXNlZCBpbiBDSksKLSAgICBpZiAoYyA+PSAweEZG
MDAgJiYgYyA8PSAweEZGRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW1vamku
Ci0gICAgaWYgKGMgPT0gMHgxRjEwMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgxRjE0OSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7Ci19Ci0K
LXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAg
IGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
XSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bikKLXsKLSAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7
Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0
ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4
cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAt
IDFdOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFy
YWN0ZXJzW2kgLSAyXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9n
cmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIGlmIChzdHJpbmdWaWV3LmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0
cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBp
c0FmdGVyRXhwYW5zaW9uKTsKLSAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRp
cmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9H
Q19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9y
IGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBO
b3ZlbWJlciAyMDEwLgotICAgIGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVn
ZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90Ci0gICAg
ICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJz
eWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGb250Ojpp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1f
Z2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwotfQotICAgIAotR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgp
Ci17Ci0gICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2
ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNp
cmFibGUgcmVuZGVyaW5ncywKLSAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksg
Y2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KLSAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7Ci0KLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0g
R2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGlj
aCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgotICAgICAgICByZXR1cm4gR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7Ci0g
ICAgfQotICAgIAotICAgIGlmICh0ZXh0UnVuLmlzOEJpdCgpKQotICAgICAgICBiYXNlQ2hhcmFj
dGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKLSAgICBlbHNlCi0g
ICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0
ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAKLSAgICAvLyB1X2dldEludFBy
b3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZv
ciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4g
dXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KLSAg
ICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOwot
ICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NV
UFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgot
ICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURf
SURFT0dSQVBIU19FWFRFTlNJT05fQToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVP
R1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM6Ci0g
ICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM6Ci0gICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQjoKLSAgICBjYXNlIFVCTE9DS19DSktf
Q09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1NUUk9LRVM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9E
OgotICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6Ci0g
ICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TOgotICAgIGNhc2UgVUJMT0NLX0VOQ0xP
U0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6Ci0g
ICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01PRk86Ci0gICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pB
TU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoKLSAgICBjYXNl
IFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VY
VEVOREVEX0E6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQjoKLSAgICAg
ICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3
T3ZlckdseXBoOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5z
bGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7Ci0gICAgfQotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udF9oCi0j
ZGVmaW5lIEZvbnRfaAotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIlBhdGguaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0KLS8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8gMCBhbmQgY29u
ZmxpY3RzCi0vLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4KLSNpZmRlZiBD
b21wbGV4Ci0jdW5kZWYgQ29tcGxleAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnREYXRhOwotY2xh
c3MgRm9udE1ldHJpY3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgRm9udFNlbGVj
dG9yOwotY2xhc3MgR2x5cGhCdWZmZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBM
YXlvdXRSZWN0OwotY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFRleHRMYXlvdXQ7Ci1jbGFzcyBU
ZXh0UnVuOwotCi1zdHJ1Y3QgR2x5cGhEYXRhOwotCi1zdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7Ci0g
ICAgR2x5cGhPdmVyZmxvdygpCi0gICAgICAgIDogbGVmdCgwKQotICAgICAgICAsIHJpZ2h0KDAp
Ci0gICAgICAgICwgdG9wKDApCi0gICAgICAgICwgYm90dG9tKDApCi0gICAgICAgICwgY29tcHV0
ZUJvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNFbXB0eSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRv
bTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlwaE92ZXJmbG93
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0
KTsKLSAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQpOwotICAgICAg
ICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7Ci0gICAgICAgIGJvdHRvbSA9IHN0ZDo6
bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbGVmdCAh
PSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBvdGhlci50b3Ag
fHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbnQgbGVmdDsKLSAgICBp
bnQgcmlnaHQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgYm90dG9tOwotICAgIGJvb2wgY29tcHV0
ZUJvdW5kczsKLX07Ci0KLWNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5
cGgsIERyYXdPdmVyR2x5cGh9OwotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygp
ID0gMDsKLSAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Ci0gICAgdmlydHVhbCBHbHlwaFVuZGVybGlu
ZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0g
MDsKLSAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KLX07Ci1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwotCi1jbGFzcyBG
b250IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBm
bG9hdCB3b3JkU3BhY2luZyk7Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQg
aWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRp
bmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLSNlbmRpZgotICAgIH5Gb250KCk7Ci0KLSAgICBGb250KGNv
bnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9u
dCYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90
aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9
Ci0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRQaXhlbFNpemUoKTsgfQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotCi0gICAgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKLQotICAgIGVudW0gQ3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKLQotICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
Ci0gICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0
TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9Ci0KLSAgICBmbG9hdCB3b3JkU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KLSAgICBmbG9hdCBsZXR0ZXJTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgdm9pZCBzZXRXb3JkU3Bh
Y2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9Ci0gICAgdm9pZCBzZXRMZXR0ZXJT
cGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQotICAgIAotICAgIEZvbnRSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCk7IH0KLQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0aW5nRmVhdHVy
ZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpOyB9Ci0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsgfQotCi0gICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lkdGhWYXJpYW50
IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFy
aWFudCgpOyB9Ci0KLSAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9n
bHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KLQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNz
KCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lk
dGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9z
aXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXpl
LCBwb3NpdGlvbik7IH0KLSAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0
OwotICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgp
IGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwotCi0gICAgaW50IGVtcGhhc2lzTWFy
a0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
RGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
SGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZh
bGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9W
YXJpYW50KSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOwotICAgIHN0YXRpYyBib29s
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7Ci0KLSAgICAvLyBCRVdBUkU6IElmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhl
IHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkKLSAgICAvLyB3
aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29tcGVuc2F0ZXMK
LSAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZhbHVlIGlmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiwgVGV4
dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7Ci0KLSAgICBlbnVtIENvZGVQ
YXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB9Owot
ICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAgICBzdGF0aWMg
Q29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVuc2lnbmVkKSB7
IHJldHVybiBTaW1wbGU7IH0KLSAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2Rl
UGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7Ci0KLSAgICBib29sIHByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gRm9yVGV4dEVt
cGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0
RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBo
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBmbG9hdCBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAgICBib29sIGdl
dEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBj
b25zdDsKLQotICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4
VGV4dCgpOwotICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNl
LgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JO
b3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7Ci0KLXB1
YmxpYzoKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9y
VGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbikKLSAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhlci5t
X2xldHRlclNwYWNpbmcKLSAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0gb3RoZXIubV93
b3JkU3BhY2luZzsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5n
IHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7Ci0gICAgc3RhdGljIENvZGVQ
YXRoIGNvZGVQYXRoKCk7Ci0gICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhU
eXBlc2V0dGluZ0ZlYXR1cmVzKTsKLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBkZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19y
b3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwotICAgIHN0YXRpYyBib29sIGlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGMgJiB+
MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKLSAgICB9Ci0KLSAgICBG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIHRyZWF0
QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAn
XG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9X
aWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVy
biBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4g
fHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8
IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3Bh
Y2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQotICAgIHN0YXRpYyBib29s
IGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
VUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLQot
ICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBG
b250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKLQotICAgIFR5
cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnRE
ZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1
cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgICAgICBz
d2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXV0b1RleHRSZW5kZXJp
bmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcHRpbWl6ZVNwZWVkOgotICAg
ICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKLSAgICAgICAgY2FzZSBP
cHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGln
YXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9u
LmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1
cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpF
bmFibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVy
ZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBt
X2ZvbnREZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBo
czsKLSAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Ci0gICAgZmxvYXQgbV93b3JkU3BhY2luZzsK
LSAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1
cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRpb24uCi19Owot
Ci12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
Ci0KLWlubGluZSBGb250Ojp+Rm9udCgpCi17Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVGb250
RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlw
aHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERl
c2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNr
UmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsK
LSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2Ny
aXB0aW9uLCBpbmRleCk7Ci19Ci0KLWlubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4
ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBGb250U2VsZWN0b3IqIEZv
bnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlw
aHMtPmZvbnRTZWxlY3RvcigpIDogMDsKLX0KLQotaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRo
KGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCF0YWJTaXplKQotICAgICAgICByZXR1cm4gbGV0
dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNw
YWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJEZWx0YVdpZHRoID0g
dGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOwotICAgIHJldHVybiAodGFiRGVs
dGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0
YVdpZHRoOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
bGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250U2Vs
ZWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNz
IEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBPcGVuVHlwZVZl
cnRpY2FsRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExh
eW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRM
YXlvdXQgY2xhc3MgZGVmaW5pdGlvbgordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxX
ZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCit7CisgICAgV2Vi
Q29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7Cit9CisKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisK
K2NvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
eworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKKyAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMSAvKj8qLywKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKK307CisKK3N0YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0
UnVuJiBydW4pCit7CisgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Cit9CisKK3N0
YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKKyAgICBpZiAo
IXNldCkgeworICAgICAgICBzZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAg
ICBzZXQtPmFkZCgiTVMgUEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdv
dGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcs
IDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVO
YW1lTVNQR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwor
CisgICAgICAgIHNldC0+YWRkKCJNUyBQTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNQTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUs
IDB4NjcxRH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKKworICAgICAg
ICBzZXQtPmFkZCgiTVMgR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3Ro
aWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAw
eDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhp
YywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TR290aGljKSkpOworCisgICAgICAgIHNl
dC0+YWRkKCJNUyBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1td
ID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKKyAgICAgICAgc2V0
LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgo
dW5pY29kZU5hbWVNU01pbmNobykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Cisg
ICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBF
QSwgMHgzMEFBfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVp
cnlvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOworICAgIH0KKyAgICBy
ZXR1cm4gc2V0LT5jb250YWlucyhmYW1pbHkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250Ojpz
X2NvZGVQYXRoID0gQXV0bzsKKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIEZvbnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24p
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb250OjpGb250KCkK
KyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcygwKQoreworfQorCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZs
b2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorICAgIDogbV9mb250RGVzY3Jp
cHRpb24oZmQpCisgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcod29yZFNwYWNpbmcpCisgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
fQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1p
bmRlcGVuZGVudC4KK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEs
IGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
CisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisg
ICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGlu
Z0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0
U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBl
bmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkp
CisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
ICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmlt
YXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5
bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5
Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5v
cm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEu
aXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlm
CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhz
KQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKKyAgICAsIG1fdHlwZXNl
dHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQoreworfQorCitGb250
JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250RGVzY3Jp
cHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtX2dseXBocyA9IG90aGVyLm1f
Z2x5cGhzOworICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKKyAg
ICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKKyAgICBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgPSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZm9u
dERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2lu
ZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dv
cmRTcGFjaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzID09IG90
aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fZ2x5cGhzIHx8
ICFvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVo
b3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJl
Y2FsYy4KKyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5t
X2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fZ2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdHJ1
Y3QgRm9udEdseXBoc0NhY2hlS2V5IHsKKyAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBz
aGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9i
amVjdHMpLgorICAgIEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
dW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lv
bjsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKK307CisKK3N0cnVjdCBGb250R2x5
cGhzQ2FjaGVFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRH
bHlwaHM+JiYgZykKKyAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQorICAgICAgICAsIGdseXBo
cyhXVEY6Om1vdmUoZykpCisgICAgeyB9CisgICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKKyAg
ICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBG
b250R2x5cGhzQ2FjaGU7CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBo
c0NhY2hlS2V5JiBhLCBjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCit7CisgICAgaWYgKGEu
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNl
bGVjdG9ySWQgfHwgYS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lv
biB8fCBhLmZvbnRTZWxlY3RvckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYS5mYW1pbGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGEuZmFtaWxpZXNbaV0uaW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Rm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgcmV0dXJu
IGNhY2hlOworfQorCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQoreworICAgIGZv
bnRHbHlwaHNDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3ZvaWQgY2xlYXJXaWR0aENhY2hlcygpCit7
CisgICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9u
dEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVl
LT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlw
dCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
KTsKK30KKworc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2Fj
aGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCit7CisgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0g
Rm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAg
ICAga2V5LmZhbWlsaWVzLmFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAga2V5
LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgp
IDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRT
ZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250
U2VsZWN0b3IgJiYgZm9udFNlbGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikg
PyBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKK30KKworc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtl
eSYga2V5KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOworICAgIGhhc2hD
b2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKKwor
ICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5
LmNvbXB1dGVIYXNoKCkpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvcklkKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JWZXJzaW9uKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JGbGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNb
aV0uaW1wbCgpID8gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsK
KworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwg
aGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworfQorCit2b2lkIHBydW5lVW5y
ZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQoreworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgNTA+IHRvUmVtb3ZlOworICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0g
Zm9udEdseXBoc0NhY2hlKCkuZW5kKCk7CisgICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBmb250R2x5cGhzQ2FjaGUo
KS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQoreworICAgIEZv
bnRHbHlwaHNDYWNoZUtleSBrZXk7CisgICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOworICAgIEZvbnRHbHlwaHNDYWNoZTo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkgJiYgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKKyAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9u
dEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9u
dFNlbGVjdG9yKSk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlw
aHMuZ2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJ
bnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7
CisgICAgc3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAvLyBSZWZlcmVuY2VkIEZv
bnRHbHlwaHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUg
bWVtb3J5LgorICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRl
cnZhbCkpCisgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2Fj
aGUoKTsKKyAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCisgICAgaWYgKGZvbnRH
bHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQorICAgICAgICBmb250R2x5cGhz
Q2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAgcmV0dXJuIGds
eXBoczsKK30KKwordm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKK3sKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Zmlyc3RGYW1pbHkoKSk7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVz
ZXR0aW5nRmVhdHVyZXMoKTsKK30KKworZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAoreworICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAorICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCisgICAgLy8gZm9udCkuCisg
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0
byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29k
ZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRv
VXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdG
b250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNv
bnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBkcmF3Q29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5n
dGgoKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAg
IC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFs
IHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdG
ZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxl
bmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9V
c2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAg
ICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9p
bnQsIGZyb20sIHRvKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworfQorCitmbG9h
dCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK3sKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKKyAgICBp
ZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CisgICAgICAgIC8vIFRoZSBjb21wbGV4IHBh
dGggaXMgbW9yZSByZXN0cmljdGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhh
biB0aGUgc2ltcGxlIHBhdGgsIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRo
ZWlyIGJlaGF2aW9ycyBtYXRjaC4KKyAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOworICAgICAg
ICAvLyBUaGUgc2ltcGxlIHBhdGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92
ZXJmbG93IGlzIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBT
aW1wbGVXaXRoR2x5cGhPdmVyZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxv
dy0+Y29tcHV0ZUJvdW5kcykpCisgICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKKyAgICB9
CisKKyAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMo
KSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0
ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQq
IGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGNhY2hl
RW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1cm4gKmNhY2hl
RW50cnk7CisKKyAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFj
a0ZvbnRzOworICAgIGlmICghZmFsbGJhY2tGb250cykKKyAgICAgICAgZmFsbGJhY2tGb250cyA9
ICZsb2NhbEZhbGxiYWNrRm9udHM7CisKKyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKGNvZGVQ
YXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMs
IGdseXBoT3ZlcmZsb3cpOworCisgICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+
aXNFbXB0eSgpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hh
cnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIHJldHVybiBy
dW4ucmVuZGVyaW5nQ29udGV4dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4s
IGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisjZW5kaWYKKworICAgIGNoYXJzQ29uc3VtZWQg
PSBydW4ubGVuZ3RoKCk7CisgICAgZ2x5cGhOYW1lID0gIiI7CisgICAgcmV0dXJuIHdpZHRoKHJ1
bik7Cit9CisKK0dseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7CisgICAgaWYg
KHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgICAgICBpZiAodXBw
ZXJDICE9IGMpIHsKKyAgICAgICAgICAgICAgICBjID0gdXBwZXJDOworICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgfQorCisgICAgaWYgKG1pcnJvcikK
KyAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKKworICAgIHJldHVybiBtX2dseXBocy0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKwor
I2lmICFQTEFURk9STShDT0NPQSkKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRl
TGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit7Cit9CisK
K2Zsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250
RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3Jp
dGVyIiwKKyAgICAiQXJpYWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hp
biIsCisgICAgIkNvcnNpdmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlh
IFVDQVMiLAorICAgICJHZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAg
ICJIZWx2ZXRpY2EiLAorICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAg
ICJLYWkiLAorICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJN
b25hY28iLAorICAgICJNc2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nh
a2EiLAorICAgICJSYWFuYW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAg
IlRpbWVzIiwKKyAgICAiQXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAg
ICAiQXBwbGUgTGlTdW5nIiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGlj
IiwKKyAgICAiQXBwbGVNeXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVB
IiwKKyAgICAiI1BDTXl1bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBm
YW1pbGllcyB3aGVyZSBhbnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBp
biB0aGUgT1MvMiB0YWJsZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxl
Z2FjeSB3ZWJraXQgYmVoYXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9t
IHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQg
bnVtYmVyIG9mIE1hYyBmb250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVu
ZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxh
dGZvcm1zLgorYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorewor
ICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOworICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKElPUykKKyAgICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxz
byBoYXZlIGFuIGludmFsaWQgZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCisg
ICAgaWYgKHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1p
bGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gMDsKKworICAgIGlmICghZm9udEZhbWlsaWVz
V2l0aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFs
aWRDaGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aCk7ICsraSkKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlk
Q2hhcldpZHRoTWFwLT5hZGQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoW2ldKSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworYm9vbCBGb250OjpmYXN0QXZl
cmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKKyAgICBpZiAoc3VjY2VzcykK
KyAgICAgICAgd2lkdGggPSByb3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkp
OyAvLyBGSVhNRTogcHJpbWFyeUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmly
c3RGYW1pbHkoKS4KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBGb250OjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgdG8gPSAodG8gPT0gLTEg
PyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCisgICAgICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBhZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Cit9
CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFVz
ZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtl
cm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAg
aWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8
fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkpCisgICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3Np
dGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CisKKyAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBu
b3JtYWxpemVkOworICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIG5vcm1hbGl6
ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisKKyAgICBy
ZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOworfQorCitTdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisK
K1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IHRydWU7CisKK3ZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxk
VXNlU21vb3RoaW5nKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKK30KKworYm9vbCBGb250Ojpz
aG91bGRVc2VTbW9vdGhpbmcoKQoreworICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OworfQorCit2b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit7CisgICAgc19jb2Rl
UGF0aCA9IHA7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKK3sKKyAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKK30KKwordm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCit7CisgICAg
c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisK
K1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQor
eworICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworfQorCitGb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAg
aWYgKHNfY29kZVBhdGggIT0gQXV0bykKKyAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7CisKKyNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAg
ICAgICAgcmV0dXJuIFNpbXBsZTsKKyNlbmRpZgorCisgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygp
LT5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICAKKyAgICBpZiAocnVu
Lmxlbmd0aCgpID4gMSAmJiAhV2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1
cmVzKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICBpZiAoIXJ1bi5jaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIGlm
IChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisKKyAgICAvLyBTdGFydCBm
cm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hh
cmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgorICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQ
YXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKworRm9udDo6Q29kZVBh
dGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBp
biBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90ZSB0aGF0IHdlIAorICAgIC8vIGNhbid0IHNp
bXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hh
cmFjdGVycworICAgIC8vIGFyZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdv
IHRvIHRoZSBjb21wbGV4IHBhdGguCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdl
bGwgY29uc2lkZXIgYmluYXJ5IHNlYXJjaCBvdmVyIGEgc29ydGVkCisgICAgLy8gbGlzdCBvZiBy
YW5nZXMuCisgICAgQ29kZVBhdGggcmVzdWx0ID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVy
c1tpXTsKKyAgICAgICAgaWYgKGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChN
b2RpZmllciBMZXR0ZXJzIDogVG9uZSBsZXR0ZXJzKSAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyRTkpIAorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmlu
ZyBkaWFjcml0aWNhbCBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MzZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMg
PCAweDA1OTEgfHwgYyA9PSAweDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRp
bmcgVSswNUJFIEhlYnJldyBjb21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNl
cSwgU29mIFBhc3VxIGFuZCBOdW4gSGFmdWtoYQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MDVDRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIC8vIFUrMDYwMCB0aHJvdWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28s
IFNhbWFyaXRhbiwgTWFuZGFpYywKKyAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3Vy
bXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCisgICAgICAg
IC8vIE1hbGF5YWxhbSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCisgICAg
ICAgIGlmIChjIDwgMHgwNjAwKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweDEwOUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICAvLyBV
KzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hv
dWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJlY29tcG9zZTsKKyAgICAgICAgLy8gTW9kZXJuIEtv
cmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKKyAgICAgICAg
aWYgKGMgPCAweDExMDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxMUZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAw
eDEzNUQpIC8vIFUrMTM1RCB0aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEzNUYpCisgICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgw
IHRocm91Z2ggVSsxOEFGIFRhZ2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwg
TW9uZ29saWFuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOEFG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5MDAp
IC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOTRGKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUr
MTlERiBOZXcgVGFpIEx1ZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9
IDB4MTlERikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwg
MHgxQTAwKSAvLyBVKzFBMDAgdGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxp
bmVzZSwgQmF0YWssIExlcGNoYSwgVmVkaWMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDFDRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MURDMCkgLy8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNy
aXRpY2FsIG1hcmsgc3VwcGxlbWVudAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChjIDw9IDB4MURGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8v
IFUrMUUwMCB0aHJvdWdoIFUrMjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3Rh
Y2tlZCBkaWFjcml0aWNzCisgICAgICAgIGlmIChjIDw9IDB4MjAwMCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3c7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBV
KzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5p
bmcgbWFya3MgZm9yIENvcHRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MkNGMSkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgzMDJBKSAvLyBVKzMwMkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1
bCBUb25lIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
MDJGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2
N0MpIC8vIFUrQTY3QyB0aHJvdWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJp
bGxpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QTY3RCkKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBV
K0E2RjAgdGhyb3VnaCBVK0E2RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNkYxKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdz
LXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgIC8vIEhhbmd1bCBK
YW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRl
aSBNYXllaywKKyAgICAgICAgaWYgKGMgPCAweEE4MDApIAorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjIDw9IDB4QUJGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgIGlmIChjIDwgMHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3Vs
IEphbW8gRXh0LiBCCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhE
N0ZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPD0gMHhE
QkZGKSB7CisgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZQorCisgICAgICAgICAgICBpZiAo
aSA9PSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBV
Q2hhciBuZXh0ID0gY2hhcmFjdGVyc1srK2ldOworICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJB
SUwobmV4dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFy
MzIgc3VwcGxlbWVudGFyeUNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0
KTsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAv
LyBVKzFGMUU2IHRocm91Z2ggVSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFy
YWN0ZXIgPD0gMHgxRjFGRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAw
IHRocm91Z2ggVStFMDFFRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweEUwMUVGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICAvLyBGSVhNRTogQ2hlY2sgZm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsx
MTA4MCBibG9jaykgYW5kIG90aGVyIGNvbXBsZXggc2NyaXB0cworICAgICAgICAgICAgLy8gaW4g
cGxhbmUgMSBvciBoaWdoZXIuCisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGMgPCAweEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2Rl
IHZhcmlhdGlvbiBzZWxlY3RvcnMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEZFMEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4RkUyMCkgLy8gVStGRTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtz
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQorICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jv
b2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQoreworICAgIC8vIFRoZSBiYXNpYyBD
SksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgorICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9
IDB4OUZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQg
SWRlb2dyYXBocyBFeHRlbnNpb24gQS4KKyAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDRE
QkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBSYWRpY2FscyBTdXBw
bGVtZW50LgorICAgIGlmIChjID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gS2FuZ3hpIFJhZGljYWxzLgorICAgIGlmIChjID49IDB4
MkYwMCAmJiBjIDw9IDB4MkZERikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
Q0pLIFN0cm9rZXMuCisgICAgaWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
LgorICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KKyAg
ICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCisg
ICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCisgICAg
aWYgKGMgPj0gMHgyQjc0MCAmJiBjIDw9IDB4MkI4MUYpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KKyAg
ICBpZiAoYyA+PSAweDJGODAwICYmIGMgPD0gMHgyRkExRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMyIGMpCit7CisgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2Ug
M3JkIFRvbmUKKyAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5k
YXJpbiBDaGluZXNlIDJuZCBUb25lCisgICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZl
IEFjY2VzcywgTWFuZGFyaW4gQ2hpbmVzZSA0dGggVG9uZSAKKyAgICAvLyAweDJEOSBEb3QgQWJv
dmUsIE1hbmRhcmluIENoaW5lc2UgNXRoIFRvbmUgCisgICAgaWYgKChjID09IDB4MkM3KSB8fCAo
YyA9PSAweDJDQSkgfHwgKGMgPT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChj
ID09IDB4MjAzMCkgfHwgKGMgPT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCisgICAgICAgIHx8
IChjID09IDB4MjA0MikgfHwgKGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09
IDB4MjA0OSkgfHwgKGMgPT0gMHgyMDUxKQorICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChj
ID09IDB4MjBERSkgfHwgKGMgPT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4
MjEwNSkKKyAgICAgICAgfHwgKGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09
IDB4MjExMykgfHwgKGMgPT0gMHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCisgICAgICAgIHx8IChj
ID09IDB4MjEyQikgfHwgKGMgPT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4
MjE1MSkgfHwgKGMgPT0gMHgyMTUyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDIxNTYgJiYgYyA8PSAweDIxNUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyMTYwICYmIGMgPD0gMHgyMTZCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjE3MCAmJiBjIDw9IDB4MjE3QikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMw
NykgfHwgKGMgPT0gMHgyMzEyKSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0ND
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09
IDB4MjQyMykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDYwICYm
IGMgPD0gMHgyNDkyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjQ5
QyAmJiBjIDw9IDB4MjRGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0g
MHgyNUEwKSB8fCAoYyA9PSAweDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFB
KSB8fCAoYyA9PSAweDI1QUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI1QjEpIHx8IChjID09IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1
QjYpIHx8IChjID09IDB4MjVCNykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9
PSAweDI1QzEpIHx8IChjID09IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1
QzkpIHx8IChjID09IDB4MjVDQikgfHwgKGMgPT0gMHgyNUNDKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09IDB4MjVFRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI2MDAgJiYgYyA8PSAweDI2MDMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKChjID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAw
eDI2MEUpIHx8IChjID09IDB4MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDAp
IHx8IChjID09IDB4MjY0MikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNjYwICYmIGMgPD0gMHgyNjZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MjY3MiAmJiBjIDw9IDB4MjY3RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoKGMgPT0gMHgyNkEwKSB8fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMg
PT0gMHgyNzEzKSB8fCAoYyA9PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgy
NzQwKSB8fCAoYyA9PSAweDI3NTYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Mjc3NiAmJiBjIDw9IDB4Mjc3RikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoYyA9PSAweDJCMUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWRlb2dyYXBo
aWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycy4KKyAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAw
eDJGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBTeW1ib2xzIGFu
ZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KKyAgICBpZiAoYyA+PSAweDMwMDAgJiYg
YyA8IDB4MzAzMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+IDB4MzAzMCAm
JiBjIDw9IDB4MzAzRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIaXJhZ2FuYQor
ICAgIGlmIChjID49IDB4MzA0MCAmJiBjIDw9IDB4MzA5RikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBLYXRha2FuYSAKKyAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21vZm8KKyAgICBpZiAoYyA+PSAw
eDMxMDAgJiYgYyA8PSAweDMxMkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMg
Pj0gMHgzMTkwICYmIGMgPD0gMHgzMTlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEJvcG9tb2ZvIEV4dGVuZGVkCisgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQg
TW9udGhzLgorICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCisgICAgaWYgKGMgPj0g
MHgzMzAwICYmIGMgPD0gMHgzM0ZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Rjg2MCAmJiBjIDw9IDB4Rjg2MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcy4KKyAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAw
eEZFNEYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkUxMCkgfHwg
KGMgPT0gMHhGRTExKSB8fCAoYyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8
fCAoYyA9PSAweEZGMUMpIHx8IChjID09IDB4RkYxRSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCisgICAgLy8gVXN1YWxseSBv
bmx5IHVzZWQgaW4gQ0pLCisgICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtb2ppLgorICAgIGlmIChjID09IDB4MUYxMDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4
MUYxMjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBj
IDw9IDB4MUYxNDkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjE1
MCAmJiBjIDw9IDB4MUYxNjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgxRjE3MCAmJiBjIDw9IDB4MUYxODkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgxRjIwMCAmJiBjIDw9IDB4MUY2QzUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOworfQorCit1bnNpZ25lZCBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9u
KQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IExUUikg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
IC0gMV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgc3RhdGljIGJvb2wg
ZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
Y2hhcmFjdGVyKSAmJiBpICsgMSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tp
ICsgMV0pKSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGNoYXJhY3RlciwgY2hhcmFjdGVyc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYm
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlm
ICghaXNBZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJh
Y3RlcikgJiYgaSA+IDEgJiYgVTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7CisgICAg
ICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNb
aSAtIDJdLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFu
c2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KKwor
dW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKK3sKKyAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCks
IHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNp
b24pOworfQorCitib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQor
eworICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNL
IHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQWRkaXRpb25hbCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBD
U1MgVGV4dCBMZXZlbCAzIEVkaXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KKyAgICBpZiAo
YyA9PSBldGhpb3BpY1dvcmRzcGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8
IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckRvdAorICAgICAgICB8fCBjID09IHVnYXJpdGljV29y
ZERpdmlkZXIgfHwgYyA9PSB0aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRp
YmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKTsKK30KKyAgICAKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQoreworICAgIC8vIEluIGdlbmVyYWws
IHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJz
IG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCisgICAg
Ly8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFj
dGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5k
ZXgpOworCisgICAgaWYgKG9mZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkg
eworICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhp
cyBnbHlwaC4gQmFpbC4KKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIH0KKyAgICAKKyAgICBpZiAodGV4
dFJ1bi5pczhCaXQoKSkKKyAgICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVy
czgoKVtvZmZzZXRJblN0cmluZ107CisgICAgZWxzZQorICAgICAgICBVMTZfTkVYVCh0ZXh0UnVu
LmNoYXJhY3RlcnMxNigpLCBvZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNo
YXJhY3Rlcik7CisgICAgCisgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJf
SURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNv
ZGVwb2ludHMuCisgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2Nh
dGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgVUJsb2NrQ29kZSBibG9ja0NvZGUg
PSB1YmxvY2tfZ2V0Q29kZShiYXNlQ2hhcmFjdGVyKTsKKyAgICBzd2l0Y2ggKGJsb2NrQ29kZSkg
eworICAgIGNhc2UgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJM
T0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NF
RF9DSktfTEVUVEVSU19BTkRfTU9OVEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklM
SVRZOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6
CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUzoKKyAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01Q
QVRJQklMSVRZX0ZPUk1TOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNf
RVhURU5TSU9OX0I6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBI
U19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgorICAgIGNhc2UgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0M6CisgICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRDoKKyAgICBjYXNlIFVCTE9DS19JREVP
R1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTOgorICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9C
X0lERU9HUkFNUzoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVN
RU5UOgorICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgorICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5B
OgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPOgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VY
VEVOREVEOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1POgorICAgIGNhc2UgVUJMT0NLX0hB
TkdVTF9DT01QQVRJQklMSVRZX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxF
UzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgorICAgIGNhc2UgVUJM
T0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0I6CisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5
cGU6OlNraXBEZXNjZW5kZXJzOworICAgIH0KK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRleHRMYXlvdXQ+
IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBUZXh0TGF5b3V0
IGNsYXNzIGRlZmluaXRpb24KIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogewotICAgIFdlYkNvcmU6
OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkZWxl
dGVMYXlvdXQocHRyKTsKIH0KIAogfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAot
Y29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7
Citjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAxIC8qPyovLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsCkBAIC05OCwxNSArOTgsMTUgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5T
aWduRm9yRmFtaQogICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7CiB9CiAKLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOworRm9udENhc2NhZGU6OkNvZGVQYXRo
IEZvbnRDYXNjYWRlOjpzX2NvZGVQYXRoID0gQXV0bzsKIAotVHlwZXNldHRpbmdGZWF0dXJlcyBG
b250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKK1R5cGVzZXR0aW5nRmVhdHVy
ZXMgRm9udENhc2NhZGU6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwogCiAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlv
biAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vIEZvbnRDYXNjYWRlIEltcGxlbWVudGF0aW9u
IChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIAotRm9udDo6Rm9udCgpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogICAg
IDogbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTE0LDcgKzExNCw3IEBAIEZvbnQ6OkZv
bnQoKQogewogfQogCi1Gb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorRm9udENhc2NhZGU6OkZvbnRDYXNj
YWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0
IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRl
clNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcp
CkBAIC0xMjQsNyArMTI0LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZk
LCBmbAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udERhdGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFj
aW5nKDApCkBAIC0xNDMsNyArMTQzLDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9u
dFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
ICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udEQKIH0K
ICNlbmRpZgogCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGU6OkZv
bnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0
aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlw
aHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQpAQCAtMTY5
LDcgKzE2OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiB7CiB9CiAKLUZvbnQm
IEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK0ZvbnRDYXNjYWRlJiBGb250Q2Fz
Y2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKIHsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwogICAgIG1fZ2x5cGhzID0gb3Ro
ZXIubV9nbHlwaHM7CkBAIC0xODAsNyArMTgwLDcgQEAgRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBGb250OjpvcGVy
YXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0
b3I9PShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAgc3RhdGljIFJlZjxGb250R2x5cGhz
PiByZXRyaWV2ZU9yQWRkQ2FjaAogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKLXZvaWQgRm9udDo6
dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3Rv
cikgY29uc3QKIHsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhz
KG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1p
bHkoKSk7CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVh
dHVyZXMoKTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzUxLDcgKzM1MSw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY28KICAgICByZXR1cm4gZHJhd0Nv
bXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAg
ICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbgogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNv
bnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQgRm9udDo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAg
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIGZs
b2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKGlzRHJhd25XaXRo
U1ZHRm9udChydW4pKQpAQCAtNDE1LDcgKzQxNSw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAotR2x5cGhEYXRh
IEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK0dseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7CiAgICAg
ICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCkpIHsKQEAgLTQzNiwxNiArNDM2LDE2IEBAIEdseXBoRGF0YSBGb250Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUMKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwg
Ym9vbCkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxh
eW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQordm9pZCBGb250
Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQogewogfQogCi1mbG9hdCBGb250Ojp3
aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC00OTYsNyArNDk2LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbAogLy8gZnJvbSB0aGUgd2lk
dGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBv
ZiBNYWMgZm9udHMsCiAvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBh
Y3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgogLy8gYWxsIHBsYXRmb3Jtcy4K
LWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgQXRvbWljU3Ry
aW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCkBA
IC01MjAsNyArNTIwLDcgQEAgYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
bwogICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRh
aW5zKGZhbWlseSk7CiB9CiAKLWJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKIHsKICAgICBib29sIHN1Y2Nl
c3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKICAgICBpZiAoc3VjY2VzcykKQEAgLTUy
OCw3ICs1MjgsNyBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFiCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0
aCgpIDogdG8pOwogCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChjbwogICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CiB9CiAKLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKQEAgLTU1
OSw1NSArNTU5LDU1IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGUK
ICAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBub3JtYWxpemVkLmFwcGVuZChG
b250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICBub3JtYWxpemVk
LmFwcGVuZChGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAog
ICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0
cmluZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFs
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZyBGb250Q2Fz
Y2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVl
OwogCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3VsZFVzZVNtb290
aGluZykKK3ZvaWQgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3Vs
ZFVzZVNtb290aGluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7CiB9CiAKLWJvb2wgRm9udDo6
c2hvdWxkVXNlU21vb3RoaW5nKCkKK2Jvb2wgRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGlu
ZygpCiB7CiAgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAKLXZvaWQgRm9u
dDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3ZvaWQgRm9udENhc2NhZGU6OnNldENvZGVQYXRo
KENvZGVQYXRoIHApCiB7CiAgICAgc19jb2RlUGF0aCA9IHA7CiB9CiAKLUZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKCkKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29k
ZVBhdGgoKQogewogICAgIHJldHVybiBzX2NvZGVQYXRoOwogfQogCi12b2lkIEZvbnQ6OnNldERl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykKK3ZvaWQgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKIHsKICAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCitUeXBlc2V0
dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCiB7
CiAgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAKLUZvbnQ6OkNv
ZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK0ZvbnRDYXNj
YWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBj
b25zdAogewogICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCiAgICAgICAgIHJldHVybiBzX2Nv
ZGVQYXRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRo
KGNvbnN0IFRleHQKICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFj
dGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiB9CiAKLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikK
K0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQogewogICAgIC8vIEZJWE1F
OiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90
ZSB0aGF0IHdlIAogICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9w
ZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwpAQCAtNzM0LDggKzczNCw4IEBAIEZv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAKICAgICAgICAgaWYgKGMgPD0g
MHhBNkYxKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAKLSAgICAgICAvLyBVK0E4MDAg
dGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4
dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIg
RXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgLy8gVStBODAwIHRo
cm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRl
bmRlZCwKKyAgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBF
eHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAogICAgICAgICBpZiAoYyA8IDB4QTgw
MCkgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQpAQCAt
Nzg3LDcgKzc4Nyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFy
MzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKIHsKICAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KICAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCkBAIC04MTIsMTEgKzgxMiwxMSBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVv
Z3JhcGhzLgogICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lv
biBCLgogICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVu
c2lvbiBDLgogICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
KFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTkxNCw3ICs5MTQsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gSWRlb2dyYXBoaWMgRGVzY3Jp
cHRpb24gQ2hhcmFjdGVycy4KICAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgogICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0MCw3ICs5NDAsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQK
ICAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCiAgICAgICAgIHJldHVybiB0cnVl
OwotIAorCiAgICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocy4KICAgICBpZiAo
YyA+PSAweDMyMDAgJiYgYyA8PSAweDMyRkYpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTg5
LDcgKzk4OSw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAg
ICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
Cit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHVu
c2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CkBAIC0xMDYyLDE0ICsxMDYyLDE0IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikK
IHsKICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmlu
Z1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgcmV0dXJu
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMx
NigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwog
fQogCi1ib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiB7CiAgICAgaWYg
KFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0ND
X01BU0sgfCBVX0dDX0NGX01BU0spKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDgyLDcg
KzEwODIsNyBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAorYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewogICAg
IHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCisKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
KyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250R2x5cGhzLmgiCisj
aW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29t
cGxleCB0byAwIGFuZCBjb25mbGljdHMKKy8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0
aCBlbnVtLgorI2lmZGVmIENvbXBsZXgKKyN1bmRlZiBDb21wbGV4CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgRm9udERhdGE7CitjbGFzcyBGb250TWV0cmljczsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CitjbGFzcyBGb250U2VsZWN0b3I7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIExheW91dFJlY3Q7CitjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgVGV4
dExheW91dDsKK2NsYXNzIFRleHRSdW47CisKK3N0cnVjdCBHbHlwaERhdGE7CisKK3N0cnVjdCBH
bHlwaE92ZXJmbG93IHsKKyAgICBHbHlwaE92ZXJmbG93KCkKKyAgICAgICAgOiBsZWZ0KDApCisg
ICAgICAgICwgcmlnaHQoMCkKKyAgICAgICAgLCB0b3AoMCkKKyAgICAgICAgLCBib3R0b20oMCkK
KyAgICAgICAgLCBjb21wdXRlQm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQg
JiYgIXRvcCAmJiAhYm90dG9tOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNv
bnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4
KGxlZnQsIG90aGVyLmxlZnQpOworICAgICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhl
ci5yaWdodCk7CisgICAgICAgIHRvcCA9IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKKyAgICAg
ICAgYm90dG9tID0gc3RkOjptYXgoYm90dG9tLCBvdGhlci5ib3R0b20pOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBsZWZ0ICE9IG90aGVyLmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwg
dG9wICE9IG90aGVyLnRvcCB8fCBib3R0b20gIT0gb3RoZXIuYm90dG9tOworICAgIH0KKworICAg
IGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGludCBib3R0b207
CisgICAgYm9vbCBjb21wdXRlQm91bmRzOworfTsKKworY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xh
dG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERl
c2NlbmRlcnMsIFNraXBHbHlwaCwgRHJhd092ZXJHbHlwaH07CisgICAgdmlydHVhbCBib29sIGNv
bnRhaW5zTW9yZVBhdGhzKCkgPSAwOworICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOworICAg
IHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKKyAgICB2aXJ0
dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1bmRlcmxpbmVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhZHZhbmNlKCkgPSAwOworICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigp
IHsgfQorfTsKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBp
bmRleCk7CisKK2NsYXNzIEZvbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworI2VuZGlmCisgICAgfkZvbnQo
KTsKKworICAgIEZvbnQoY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9w
ZXJhdG9yPShjb25zdCBGb250Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb247IH0KKworICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CisgICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OworCisgICAgZW51
bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVz
ZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworCisgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBm
bG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91
dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7CisgICAgc3RhdGlj
IGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworCisgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisKKyAgICBib29sIGlzU21hbGxDYXBzKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0KKworICAgIGZs
b2F0IHdvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQorICAgIGZs
b2F0IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KKyAg
ICB2b2lkIHNldFdvcmRTcGFjaW5nKGZsb2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KKyAg
ICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9
CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzUHJpbnRlckZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Cisg
ICAgCisgICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKTsgfQorCisgICAgVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZXNldHRpbmdGZWF0dXJlcz4obV90eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQorCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0KKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CisKKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CisgICAgRm9udFdlaWdodCB3
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQorICAg
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KKworICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQorCisgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuZm9udE1ldHJpY3MoKTsgfQorICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5Rm9udERhdGEoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0K
KyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0
YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZv
bnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQorICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdl
Q2hhcldpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCisKKyAg
ICBpbnQgZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisKKyAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7CisgICAgY29u
c3QgRm9udFJhbmdlcyYgZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OworICAgIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBj
b25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7
CisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKKworICAg
IC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rp
b24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBv
cnR1bml0eQorICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQu
IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21l
bnQoKSBjb21wZW5zYXRlcworICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0
dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBs
aW5lLgorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29s
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsK
KworICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhH
bHlwaE92ZXJmbG93IH07CisgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNv
bnN0OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQorICAgIHN0YXRpYyBDb2RlUGF0aCBj
aGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKKworICAg
IGJvb2wgcHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4
dEVtcGhhc2lzIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZh
bmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Cisg
ICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKworICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEdseXBoRGF0YSYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJh
Y2tGb250c0ZvckNvbXBsZXhUZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwg
aW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgZnJpZW5k
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDsKKworcHVibGljOgorI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQor
ICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgJiYgbV9sZXR0ZXJT
cGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZworICAgICAgICAgICAgJiYgbV93b3JkU3Bh
Y2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVXNl
ZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRpZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhz
LgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsK
KyAgICBzdGF0aWMgQ29kZVBhdGggY29kZVBhdGgoKTsKKyAgICBzdGF0aWMgQ29kZVBhdGggc19j
b2RlUGF0aDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgIHN0YXRpYyBUeXBlc2V0
dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdWludDhfdCBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl07CisgICAgc3Rh
dGljIGJvb2wgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoYyAmIH4weEZGKSAmJiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2Nd
OworICAgIH0KKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMg
PT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KKyAgICBzdGF0aWMg
Ym9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9X
aWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBk
OyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8
IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAm
JiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHpl
cm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9
CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworCisg
ICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHNwYWNlOworCisgICAgICAgIGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFj
dGVyKSkKKyAgICAgICAgICAgIHJldHVybiB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAgICByZXR1
cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2Vz
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1h
bGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBib29sIHVz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbDsgfQorICAgIEZvbnRHbHlwaHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0OworCisgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0
dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVy
aW5nTW9kZSA9IG1fZm9udERlc2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7CisgICAgICAg
IFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVhdHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzOworCisgICAgICAgIHN3aXRjaCAodGV4dFJlbmRlcmluZ01vZGUpIHsKKyAgICAgICAgY2Fz
ZSBBdXRvVGV4dFJlbmRlcmluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9w
dGltaXplU3BlZWQ6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVy
ZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9u
OgorICAgICAgICBjYXNlIE9wdGltaXplTGVnaWJpbGl0eToKKyAgICAgICAgICAgIGZlYXR1cmVz
IHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVz
ICY9IH5LZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tl
cm5pbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
bV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZlYXR1
cmVzIHw9IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworCisgICAg
Rm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIG11dGFibGUgUmVmUHRyPEZv
bnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKKyAgICBmbG9h
dCBtX3dvcmRTcGFjaW5nOworICAgIG11dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sOworICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8g
KFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnRE
ZXNjcmlwdGlvbi4KK307CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwordm9p
ZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKKworaW5saW5lIEZvbnQ6On5Gb250KCkKK3sKK30KKworaW5saW5l
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxl
Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgY29uc3QgRm9udFJhbmdl
cyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGJvb2wgRm9udDo6
aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVy
biBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5l
IEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCitpbmxpbmUgZmxv
YXQgRm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25l
ZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXRhYlNpemUpCisg
ICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJT
aXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0
IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Cisg
ICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0
YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7Cit9CisKK30KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29y
ZTo6VGV4dExheW91dCopOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udF9oCi0jZGVmaW5lIEZv
bnRfaAorI2lmbmRlZiBGb250Q2FzY2FkZV9oCisjZGVmaW5lIEZvbnRDYXNjYWRlX2gKIAogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTA2
LDI0ICsxMDYsMjQgQEAgcHVibGljOgogfTsKIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CiAKLWNsYXNzIEZvbnQgeworY2xhc3MgRm9udENhc2Nh
ZGUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZs
b2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAjZW5kaWYKLSAg
ICB+Rm9udCgpOworICAgIH5Gb250Q2FzY2FkZSgpOwogCi0gICAgRm9udChjb25zdCBGb250Jik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQmKTsKKyAgICBG
b250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRD
YXNjYWRlJiBvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBlcXVhbEZvclRleHRB
dXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIGJvb2wgZXF1YWxGb3JUZXh0
QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhl
ci5tX2xldHRlclNwYWNpbmcKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0
JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNw
YWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9CiAg
ICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFy
IGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0g
c29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9
IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0
aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAg
c3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworICAgIHN0YXRp
YyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMik7CiAKICAgICBzdGF0aWMgaW5s
aW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCiAgICAgewpAQCAtMzQ3
LDM0ICszNDcsMzQgQEAgdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CiB2b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgY2xlYXJX
aWR0aENhY2hlcygpOwogCi1pbmxpbmUgRm9udDo6fkZvbnQoKQoraW5saW5lIEZvbnRDYXNjYWRl
Ojp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZv
bnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEm
IEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAogewogICAgIEFTU0VSVChtX2ds
eXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250
RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJh
Y2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAotaW5saW5lIGJvb2wg
Rm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0Zp
eGVkUGl0Y2goKSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1f
Z2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoraW5saW5lIEZvbnRTZWxlY3Rv
ciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ2x5
cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAotaW5saW5lIGZsb2F0IEZv
bnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCF0YWJTaXplKQogICAgICAgICByZXR1
cm4gbGV0dGVyU3BhY2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29yayBpZiB0aGUg
ZW1waGFzaXMgbWFyayB1c2VzIGEgY29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9mIHRoZQogLy8g
c3RhbmRhcmQgZW1waGFzaXMgbWFya3MgZG8gc28uCi1ib29sIEZvbnQ6OmdldEVtcGhhc2lzTWFy
a0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRh
KSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0CiB7CiAgICAg
aWYgKG1hcmsuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Niw3ICs2Niw3
IEBAIGJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERh
dGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0
YSkpCkBAIC04MCw3ICs4MCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3Qg
QXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpOwog
fQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwog
ICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpA
QCAtOTQsNyArOTQsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9t
CiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CiB9CiAK
LWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBj
b25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlm
ICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtMTA4
LDcgKzEwOCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWkKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsK
IApAQCAtMTM4LDcgKzEzOCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZh
bmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CkBAIC0xNTQsNyArMTU0LDcgQEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZQogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleAogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVuKTsKQEAgLTIz
MSw3ICsyMzEsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAg
ICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkp
LCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0
YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRh
KSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29uCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwgc3Rh
cnRQb2ludCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxs
YmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTI3Niw3ICsyNzYsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChj
b25zCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotdm9pZCBGb250OjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBy
dW4pOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVQKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVX
aWR0aCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
ewogICAgIGZsb2F0IGRlbHRhID0geDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTI2NCw3ICsyNjQsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtCiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhKQogICAgICAg
ICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJh
Y2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKGMpKQorICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5o
YXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEds
eXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBHbHlwaERhdGEg
Rm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YSkgewotICAgICAgICBp
ZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEu
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZh
bGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFs
bGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZv
ck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNK
S0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0KIApAQCAtMzIy
LDcgKzMyMiw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWwKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAg
ICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0
MzAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAvLyB0aGUg
d2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBub3RpY2Vh
YmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KICNpZiAhUExBVEZPUk0oSU9TKQogI2lmICFVU0Uo
V0lOR0RJKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb24KIH0KICNlbmRpZgogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAgZmxvYXQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1Niw3ICs0NTYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGCiAgICAgZm9udC5k
cmF3R2x5cGhzKHRoaXMsICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKIH0KIAogLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUg
aU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0
aG9kIHVzZSB0aGUKLS8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Ojpk
cmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8v
IHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Q2FzY2FkZTo6ZHJhd1RleHQo
KSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCiAvLyBhcmVuJ3Qg
bm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hhbmdlLgogI2lm
ICFQTEFURk9STShJT1MpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikK
ICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3Rh
dHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50IGxlbmd0aCkK
ICNlbmRpZgogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC01MTUsNyArNTE1LDcg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29ucwogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwotICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgorICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250Q2FzY2FkZTo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBv
ZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4K
ICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250Lndp
ZHRoKHN1YnJ1biksIDApOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtMzU2LDE2
ICszNTYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2Vsc2UKLSAg
ICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIGZsb2F0IGRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhC
dWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAg
ICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKICNlbHNlCi0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50
IGxlbmd0aCA9IC0xKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOwog
I2VuZGlmCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxs
U2lkZXMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDggQEAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogI2luY2x1ZGUgIkNvcmVUZXh0U1BJ
LmgiCiAjZW5kaWYKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQxOSw3ICs0MTksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzCiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50IGNvZGVVbml0
c0xlbmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IGNvZGVVbml0c1swXSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKIAotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxlZnRUcnVuY2F0
ZVRvQnVmZmVyKGNvbgogICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXg7CiB9
CiAKLXN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJlciwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdI
YWNrcykKK3N0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgcmVuZGVy
ZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgZGlzYWJs
ZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBpZiAoZGlzYWJsZVJvdW5kaW5nSGFja3MpCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGlj
IGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbgogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVl
LCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1
bmNhdGUgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgVHJ1bmNh
dGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTI5NSw0MiArMjk1LDQyIEBAIHN0YXRpYyBTdHJpbmcgdHJ1
bmNhdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZlciwg
dHJ1bmNhdGVkTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1
bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBm
b250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmlu
ZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmluZyBT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0
cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MpOwogfQogCi1mbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcykKK2Zsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gc3RyaW5nV2lkdGgoZm9u
dCwgU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwg
IWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMs
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6
OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hh
Y2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjps
ZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVT
dHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFy
YWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZElu
c2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCiB7CiAgICAgcmV0dXJuIHRy
dW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZl
ciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMgKzMzLDIzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBGb250OwotICAgIAotICAg
IGNsYXNzIFN0cmluZ1RydW5jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFibGVSb3VuZGlu
Z0hhY2tzIH07Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlz
YWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRy
dW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxl
Um91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0
IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNr
c09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0
cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFs
c2UpOworY2xhc3MgRm9udENhc2NhZGU7CisKK2NsYXNzIFN0cmluZ1RydW5jYXRvciB7CitwdWJs
aWM6CisgICAgZW51bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxlUm91bmRpbmdI
YWNrcywgRW5hYmxlUm91bmRpbmdIYWNrcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRp
bmdIYWNrcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRl
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBy
aWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJv
b2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKIAotICAgICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAg
ICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcm
LCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVS
b3VuZGluZ0hhY2tzKTsKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENh
c2NhZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNz
IEdseXBoVG9QYXRoVHJhbnNsYXRvcjsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25z
dCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgPSAwOworICAgICAgICB2aXJ0dWFsIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRy
YW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0
YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRF
bXBoYXNpcykKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0
RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
Y3VycmVudENoYXJhY3RlcigwKQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
PSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2lzQWZ0
ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRy
KCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFp
bGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0t
OwogCkBAIC0yMjksOSArMjI5LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbgogICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVyU3BhY2luZygp
KQogICAgICAgICAgICAgICAgIHdpZHRoICs9IG1fZm9udC0+bGV0dGVyU3BhY2luZygpOwogCi0g
ICAgICAgICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udDo6Y2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICAgICAgICAgIGJvb2wg
dHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBpZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBi
b29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgewogICAgICAgICAgICAgICAgIC8v
IERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhw
YW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICBpZiAobV9l
eHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24g
PSBtX2V4cGFuc2lvbjsKQEAgLTI2OCw5ICsyNjgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1faXNBZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9y
bXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhCdWZmZXItPnNp
emUoKSwKICAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/IGdseXBoQnVm
ZmVyLT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3aWR0
aCkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykg
ewogICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsK
QEAgLTI3OCw3ICsyNzksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUluCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoYXJhY3RlcikpCisgICAg
ICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAhRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0
RW1waGFzaXMoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIGdseXBoID0gMDsKIAogICAgICAgICAv
LyBBZHZhbmNlIHBhc3QgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IGRlYWx0IHdpdGguCkBAIC0yODgs
NyArMjg5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogCiAg
ICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd29y
ZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgICAgICAvLyB0byBiZSBpbnRl
Z2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2VyIGJv
dW5kYXJ5LgotICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojpp
c1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGlmIChtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3Rl
cihjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKIAogICAg
ICAgICAgICAgLy8gU2luY2Ugd2lkdGhTaW5jZUxhc3RSb3VuZGluZyBjYW4gbG9zZSBwcmVjaXNp
b24gaWYgd2UgaW5jbHVkZSBtZWFzdXJlbWVudHMgZm9yCkBAIC0zMDEsNyArMzAyLDcgQEAgaW5s
aW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICJy
b3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QKICAgICAgICAgICAgIC8vIHdp
ZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91
bmRhcnkuCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpIDwgbV9y
dW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpKSkpCisgICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hh
cmFjdGVyKCoodGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQogICAgICAgICAgICAgICAgIHx8
IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpID49IG1fcnVuLmxlbmd0aCgpKSkgewogICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICsgd2lk
dGg7CiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyA9IGNlaWxmKHRvdGFs
V2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3JfaAogI2RlZmluZSBXaWR0aEl0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNW
R0dseXBoLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsK
K2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBTaW1wbGVGb250
RGF0YTsKIGNsYXNzIFRleHRSdW47CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBHbHlwaERhdGE7
CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNj
b3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2Up
OworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBi
b29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiYg
YXJhYmljRm9ybXMoKSB7IHJldHVybiBtX2FyYWJpY0Zvcm1zOyB9CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250JiBmb250KQor
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICAgICAgICAgaWYgKCFm
b250LmlzUHJpbnRlckZvbnQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBt
X2ZvbnQ7CiAKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXMuaCIKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjphZHZhbmNlCiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9p
bmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitE
YXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZs
b2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAg
IGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0
YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3Ro
KCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6
ek5HLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVy
LmgiCkBAIC0zOSw3ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50LCBpbnQs
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4
dEVtcGhhc2lzICovKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOwogICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKQEAgLTUwLDcgKzUw
LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIC8vIEZJ
WE1FOiBNYWMgcmV0dXJucyBhbiBpbml0aWFsIGFkdmFuY2UgaGVyZS4KICAgICByZXR1cm4gMDsK
IH0KLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZl
ciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGgu
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC02OCwyMiArNjgsMjIgQEAgZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50
LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiti
b29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0
IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QK
IHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVy
LnNoYXBlKCkpCkBAIC05Miw3ICs5Miw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb24KICAgICByZXR1cm4gMDsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCkgY29uc3QKIHsKICAgICBIYXJmQnV6elNoYXBl
ciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0
aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIK
ICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKIAog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFw
ZXIuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgPGhiLWljdS5oPgpAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRp
YyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGUKICAgICAgICAgaW50IG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwg
bGVuZ3RoLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgdGFicyBhcyB0
aGV5IGFyZSBub3QgdHJlYXRlZCBhcyBzcGFjZXMgZm9yIHdvcmQtZW5kLgotICAgICAgICBpZiAo
Rm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCisgICAg
ICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVy
ICE9ICdcdCcpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7CiAgICAgICAgIGVsc2UgaWYg
KEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQog
ICAgICAgICAgICAgY2hhcmFjdGVyID0gemVyb1dpZHRoU3BhY2U7CkBAIC0xODMsNyArMTgzLDcg
QEAgc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25zdCBUZQogICAgIH0KIH0KIAot
SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1bikKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcihjb25zdCBGb250Q2Fz
Y2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQogICAgIDogbV9mb250KGZvbnQpCiAgICAg
LCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgoMCkKICAgICAsIG1fcnVuKHJ1bikKQEAgLTIxNCw5
ICsyMTQsOSBAQCBzdGF0aWMgdm9pZCBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFyCiAgICAg
ICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgVTE2X05FWFQoc291cmNl
LCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKICAgICAgICAgLy8gRG9uJ3Qgbm9y
bWFsaXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMgc3BhY2VzIGZvciB3b3JkLWVu
ZAotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVy
ICE9ICdcdCcpCisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rl
cikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7Ci0g
ICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQor
ICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJh
Y3RlcikpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKICAgICAgICAg
ZWxzZSBpZiAobm9ybWFsaXplTW9kZSA9PSBIYXJmQnV6elNoYXBlcjo6Tm9ybWFsaXplTWlycm9y
Q2hhcnMpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJNaXJyb3IoY2hhcmFjdGVyKTsK
QEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9u
c0ZvCiAKICAgICAgICAgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV0gPSBnbHlwaEluZm9zW2ld
LmNsdXN0ZXI7CiAKLSAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udDo6dHJlYXRBc1pl
cm9XaWR0aFNwYWNlKG1fbm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50Q2hhcmFjdGVySW5kZXhdKSkK
KyAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lk
dGhTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCiAgICAg
ICAgICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIAogICAgICAgICBpZiAoaXNDbHVz
dGVyRW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hhcmFjdGVySW5kZXgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNoYXBlci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2NsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIEhhcmZCdXp6U2hh
cGVyIHsKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBOb3JtYWxpemVNaXJyb3JD
aGFycwogICAgIH07CiAKLSAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250KiwgY29uc3QgVGV4
dFJ1biYpOworICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4
dFJ1biYpOwogICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CiAKICAgICBib29sIHNoYXBl
KEdseXBoQnVmZmVyKiA9IDApOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAKICAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0LCBmbG9hdCk7
CiAKLSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9u
dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VUNoYXJbXT4gbV9ub3JtYWxpemVkQnVmZmVyOwogICAg
IHVuc2lnbmVkIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKICAgICBjb25zdCBUZXh0UnVuJiBt
X3J1bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2Fj
aGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQAogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgog
I2ltcG9ydCAiUmVuZGVyVGhlbWVJT1MuaCIKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1Np
bXBsZUZvbnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0j
aW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZXJ2aWNl
c0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgog
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTQzLDEzICs0MywxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRMYXlvdXQgewogcHVibGljOgotICAg
IHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQp
CisgICAgc3RhdGljIGJvb2wgaXNOZWVkZWQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIHRleHQtPnN0eWxlKCkpOwotICAgICAg
ICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnQ6OkNvbXBsZXg7CisgICAgICAgIHJl
dHVybiBmb250LmNvZGVQYXRoKHJ1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAgICAgfQog
Ci0gICAgVGV4dExheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBmbG9h
dCB4UG9zKQorICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgICAgIDogbV9mb250KGZvbnQpCiAgICAgICAgICwg
bV9ydW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB4UG9zKSkKICAgICAgICAgLCBtX2Nv
bnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+KCZtX2ZvbnQs
IG1fcnVuLCB0cnVlKSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxiYWNrRm9u
dHMpOwogICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhT
b0ZhcigpOwotICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBGb250
Ojp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQorICAgICAgICBpZiAobV9mb250LndvcmRTcGFj
aW5nKCkgJiYgZnJvbSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkK
ICAgICAgICAgICAgIGJlZm9yZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgICAg
ICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUdseXBocywgZmFs
bGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1
bldpZHRoU29GYXIoKTsKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQqIHRleHQs
IGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxv
YXQgeFBvcykKICAgICB7CiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7CiAgICAgICAgIHJ1
bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSk7CkBAIC03OCwyNSArNzgs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJ1bjsKICAgICB9CiAKLSAgICAvLyBDb21w
bGV4VGV4dENvbnRyb2xsZXIgaGFzIG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9udCBhbmQgVGV4
dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnQgbV9mb250Owor
ICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBG
b250Q2FzY2FkZSBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgor
ICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICBUZXh0UnVuIG1fcnVuOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDb21wbGV4VGV4dENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07CiAKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAorUGFzc093blB0cjxUZXh0
TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRleHQsIGZsb2F0
IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAogewogICAgIGlmICghY29sbGFw
c2VXaGl0ZVNwYWNlIHx8ICFUZXh0TGF5b3V0Ojppc05lZWRlZCh0ZXh0LCAqdGhpcykpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dExheW91dCh0
ZXh0LCAqdGhpcywgeFBvcykpOwogfQogCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91dChUZXh0TGF5
b3V0KiBsYXlvdXQpCit2b2lkIEZvbnRDYXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4dExheW91dCog
bGF5b3V0KQogewogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnQ6OndpZHRoKFRl
eHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitmbG9hdCBGb250Q2FzY2FkZTo6
d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKIHsKICAgICByZXR1
cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBAIC0xMTUsNyAr
MTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxvYQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
KQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9u
dENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3Jp
dGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1f
cnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0xNDQsNyArMTQ0LDcgQEAgQ29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRybwogICAgICAgICBtX2V4cGFuc2lv
blBlck9wcG9ydHVuaXR5ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBpc0FmdGVyRXhw
YW5zaW9uID0gbV9hZnRlckV4cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4
dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAg
IHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRM
LCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1f
cnVuLmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50LS07CiAKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
bmV4dENoID0gKihtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29t
cGxleFRleHRSdW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7CiAKLSAgICAgICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAgICAgICAgICBD
R0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udERhdGEuc3BhY2VHbHlwaCgpIDogZ2x5
cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1Np
emVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKICNp
ZiBQTEFURk9STShJT1MpCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmFkanVzdEdseXBocwogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyAmJiBtX3J1
bi5hbGxvd1RhYnMoKSkKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gbV9mb250LnRh
YldpZHRoKGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxX
aWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZvbnQ6
OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgeworICAgICAgICAg
ICAgZWxzZSBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRy
ZWF0QXNTcGFjZSkgewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwogICAgICAg
ICAgICAgICAgIGdseXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOwogICAgICAgICAgICAgfQpA
QCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlw
aHMKICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBtX2ZvbnQubGV0dGVyU3Bh
Y2luZygpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRpb24gYW5kIHdv
cmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZSB8fCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2
ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IHByZXZpb3VzRXhwYW5zaW9uID0gbV9leHBhbnNpb247CkBAIC02ODUsMTIgKzY4NSwx
MyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAg
ICAvLyBXZSBhZGp1c3QgdGhlIHdpZHRoIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhICJ3b3Jk
IiB0byBlbnN1cmUgYW4gaW50ZWdlciB3aWR0aC4gCiAgICAgICAgICAgICAvLyBGb3JjZSBjaGFy
YWN0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdvcmQgYm91bmRhcmllcyBmb3IgdGhl
IHJvdW5kaW5nIGhhY2sgCiAgICAgICAgICAgICAvLyB0byBiZSBpbnRlZ2VyIHdpZHRoLCBzbyB0
aGUgZm9sbG93aW5nIHdvcmRzIHdpbGwgc3RhcnQgb24gYW4gaW50ZWdlciBib3VuZGFyeS4gCi0g
ICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojppc1JvdW5k
aW5nSGFja0NoYXJhY3RlcihjaCkpIAorICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJv
dW5kaW5nKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNoKSkgCiAg
ICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGNlaWxDR0Zsb2F0KGFkdmFuY2Uud2lkdGgp
OyAKIAogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBp
cyBhICJyb3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QgdGhlIAotICAgICAg
ICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwgYmUgb24gYW4g
aW50ZWdlciBib3VuZGFyeS4gCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgIWxhc3RHbHlwaCAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0
Q2gpKSB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkpIHsgCisgICAg
ICAgICAgICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBh
biBpbnRlZ2VyIGJvdW5kYXJ5LgorICAgICAgICAgICAgYm9vbCBuZWVkc1JvdW5kaW5nRm9yQ2hh
cmFjdGVyID0gbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEdseXBoICYmIEZvbnRD
YXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0Q2gpOworICAgICAgICAgICAgaWYg
KG5lZWRzUm91bmRpbmdGb3JDaGFyYWN0ZXIgfHwgKG1fcnVuLmFwcGx5UnVuUm91bmRpbmcoKSAm
JiBsYXN0R2x5cGgpKSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCB0b3RhbFdpZHRoID0gd2lk
dGhTaW5jZUxhc3RDb21taXQgKyBhZHZhbmNlLndpZHRoOyAKICAgICAgICAgICAgICAgICB3aWR0
aFNpbmNlTGFzdENvbW1pdCA9IGNlaWxDR0Zsb2F0KHRvdGFsV2lkdGgpOyAKICAgICAgICAgICAg
ICAgICBDR0Zsb2F0IGV4dHJhV2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1pdCAtIHRvdGFsV2lk
dGg7IApAQCAtNzA5LDcgKzcxMCw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHMKICAgICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCArPSBhZHZhbmNl
LndpZHRoOyAKIAogICAgICAgICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBtYXJrcyBzaG91bGQg
cmVjZWl2ZSBhIHRleHQgZW1waGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21iaW5lIHdpdGggYSBz
cGFjZS4KLSAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZvbnQ6OmNhblJl
Y2VpdmVUZXh0RW1waGFzaXMoY2gpIHx8IChVX0dFVF9HQ19NQVNLKGNoKSAmIFVfR0NfTV9NQVNL
KSkpCisgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgKCFGb250Q2FzY2FkZTo6
Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaCkgfHwgKFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19N
X01BU0spKSkKICAgICAgICAgICAgICAgICBnbHlwaCA9IDA7CiAKICAgICAgICAgICAgIGFkdmFu
Y2UuaGVpZ2h0ICo9IC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsK
IGNsYXNzIFRleHRSdW47CiAKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBHbHlwaEl0ZXJhdGlvblN0
eWxlIHsgSW5jbHVkZVBhcnRpYQogLy8gY29tcGxleCBzY3JpcHRzIG9uIE9TIFguCiBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0Q29udHJvbGxl
cihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdE
aXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAgQ29tcGxleFRl
eHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5
VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBlbWl0IGdseXBocyB1cCB0byB0aGUgc3BlY2lmaWVk
IGNoYXJhY3Rlci4KICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9
IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0xMzgsNyArMTM4
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBtX3J1bkluZGljZXM7CiAg
ICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9JbmRleDsKIAot
ICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250Owog
ICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogICAgIGJvb2wgbV9pc0xUUk9ubHk7CiAgICAgYm9v
bCBtX21heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgog
I2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgi
CiAKQEAgLTQwLDE5ICs0MCwxOSBAQAogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDogTlNB
cnJheSB7CiAgICAgQHByaXZhdGUKLSAgICBjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udDsKKyAg
ICBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZSogX2ZvbnQ7CiAgICAgVUNoYXIzMiBfY2hhcmFj
dGVyOwogICAgIE5TVUludGVnZXIgX2NvdW50OwogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250
RGVzY3JpcHRvclJlZj4sIDE2PiBfZm9udERlc2NyaXB0b3JzOwogfQogCi0tIChpZClpbml0V2l0
aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJh
Y3RlcjsKKy0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZv
bnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJhY3RlcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRp
b24gV2ViQ2FzY2FkZUxpc3QKIAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpG
b250Kilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXIKKy0gKGlkKWluaXRXaXRoRm9u
dDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNo
YXJhY3RlcgogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtNjAsNyArNjAsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNv
cmU6OkZvbnQqCiAgICAgX2ZvbnQgPSBmb250OwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7
CiAKLSAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250
IGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCisgICAgLy8gQnkg
dGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENhc2NhZGUgaGFzIGFs
cmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKICAgICAvLyBGb250RGF0YSwg
c28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdoaWxlICghX2Zv
bnQtPmZhbGxiYWNrUmFuZ2VzQXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAgX2NvdW50Kys7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEku
aCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJT
aW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2ltcG9ydCAi
TlNGb250U1BJLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb250R2x5
cGhzLmgiCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBG
b250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4p
OwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBG
b250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleAogICAgIHNlbGVjdGlvblJlY3Quc2V0
V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9udDo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3Qg
Zm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFk
dmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRv
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRF
bXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAtNzUsNyAr
NzUsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0
dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9u
dCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAt
OTMsNyArOTMsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250CiAg
ICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZl
ciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgp
KSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpm
bG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhp
cywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVyZmxvdykgewpA
QCAtMTE2LDEzICsxMTYsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbgogICAgIHJldHVybiBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKIH0KIAotaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9h
dCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRDYXNjYWRlOjpv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIHJldHVybiBjb250cm9sbGVyLm9m
ZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRlOjpmb250RGF0
YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7CiAgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMu
bW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0U1BJ
LmgiCkBAIC01OCwxMiArNTgsMTIgQEAgU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRHZXRUZXh0RWZm
ZWN0c0NhdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgRm9udDo6Y2FuUmV0dXJuRmFs
bGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZh
bGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogewog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyB2b2lkIHNldENH
Rm9udFJlbmRlcmluZ01vZGUoQ0dDb24KIH0KICNlbmRpZgogCi12b2lkIEZvbnQ6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwog
ICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTUyNiw3ICs1MjYsNyBAQCB2b2lkIE1h
Y0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZSgpCiAgICAgfSB3aGlsZSAobV9mb250RGF0
YS0+aXNTVkdGb250KCkgJiYgbV9pbmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAot
RGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0CitEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVy
c2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRl
eHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYg
KGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAg
LTUzNCw3ICs1MzQsNyBAQCBEYXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dp
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNl
dHNJblN0cmluZygpOwogICAgIGZsb2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAh
PSBGb250OjpDb21wbGV4KQorICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpD
b21wbGV4KQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRl
eHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAg
IGRlbHRhWCA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4u
bGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBEYXNoQXJyYXkgRm9u
dDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Ojpwcmlt
YXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCiAgICAgY29uc3QgYXV0byYgZm9u
dERhdGEgPSBwcmltYXJ5Rm9udERhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29yZUdy
YXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKLSNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgog
I2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0oSU9TKQpA
QCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hh
CiAgICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSAhPSBSZWd1
bGFyV2lkdGggfHwgZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAgICAgICAgLy8g
SWRlb2dyYXBocyBkb24ndCBoYXZlIGEgdmVydGljYWwgdmFyaWFudCBvciB3aWR0aCB2YXJpYW50
cy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltpXSkpCisgICAg
ICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4
ICszMiw4IEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0
U1BJLmgiCiAjaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQg
IkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNj
cmlwdGlvbi5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTEyNyw3ICsxMjcsNyBA
QCBzdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChIREMgCiAgICAgcmV0dXJuIHBh
dGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjaW5jbHVkZSAiRm9udENhY2hl
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAogI2luY2x1
ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAtNDEsMTcgKzQx
LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9v
bCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQorYm9vbCBGb250
Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKIHsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5D
b21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhz
SW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnQ6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91
dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRD
YXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
ewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZhbmNl
KGZyb20pOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RG
b3JDb21wbGV4CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0Citm
bG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGlm
IChmb3JUZXh0RW1waGFzaXMpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0RW1waGFz
aXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4KQEAgLTkyLDcg
KzkyLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIHJl
dHVybiBiZWZvcmVXaWR0aDsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAg
IC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQg
ZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTEw
OSw3ICsxMDksNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250CiAg
ICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZl
ciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgp
KSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpm
bG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRoaXMs
IHJ1biwgZmFsbGJhY2tGb250cyk7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgo
KSk7CkBAIC0xMzMsMTAgKzEzMywxMCBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQoY29uCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwogfQogCi1p
bnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK2ludCBG
b250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUws
IGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0
Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgorICAgIC8vIHRvIEZvbnRD
YXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3
MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGlu
dD4oeEZsb2F0KTsKIAogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBy
dW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNs
dWRlICJHbHlwaFBhZ2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9T
aW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QAogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkhX
bmREQy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9V
bmlzY3JpYmVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAtNDEsNyAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBt
ZXRob2QgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhh
dmUgYWR2YW5jZSgpCiAvLyB0YWtlIHRoZSBHbHlwaEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3
ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlIHRoZSBnbHlwaCBidWZmZXIgd2hlbgogLy8gbWVhc3Vy
aW5nLgotVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250
KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cykKK1VuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmliZUNvbnRyb2xs
ZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQogICAgIDogbV9mb250KCpmb250
KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNrRm9udHMp
CkBAIC02Myw3ICs2Myw3IEBAIFVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmliZUNvbnRyb2xs
ZXIKICAgICBlbHNlIHsKICAgICAgICAgZmxvYXQgbnVtU3BhY2VzID0gMDsKICAgICAgICAgZm9y
IChpbnQgcyA9IDA7IHMgPCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7Ci0gICAgICAgICAgICBpZiAo
Rm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKKyAgICAgICAgICAgIGlmIChGb250Q2FzY2Fk
ZTo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKICAgICAgICAgICAgICAgICBudW1TcGFjZXMrKzsK
ICAgICAgICAgfQogCkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBVbmlzY3JpYmVDb250cm9sbGVy
OjpzaGFwZUFuZFBsYWNlSQogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTE2KGNoYXJhY3RlckluZGV4
IC0gMSkpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghRm9udDo6dHJlYXRBc1NwYWNlKGNh
bmRpZGF0ZVNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6dHJl
YXRBc1NwYWNlKGNhbmRpZGF0ZVNwYWNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFu
Y2UgKz0gbV9mb250LndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmli
ZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMTYgQEAKICNpZm5kZWYgVW5pc2NyaWJlQ29udHJv
bGxlcl9oCiAjZGVmaW5lIFVuaXNjcmliZUNvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSA8dXNwMTAu
aD4KLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVuaXNjcmliZUNvbnRyb2xsZXIg
ewogcHVibGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udCosIGNvbnN0IFRl
eHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAw
KTsKKyAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4
dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAp
OwogCiAgICAgLy8gQWR2YW5jZSBhbmQgbWVhc3VyZS9wbGFjZSB1cCB0byB0aGUgc3BlY2lmaWVk
IGNoYXJhY3Rlci4KICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9
IDApOwpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOiAgICAKICAgICAgICAgICAgICAgIFZlY3Rv
cjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAogICAgICAgICAgICAgICAg
VmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0cmlidXRlcyk7CiAKLSAgICBjb25zdCBG
b250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBjb25zdCBU
ZXh0UnVuJiBtX3J1bjsKICAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFs
bGJhY2tGb250czsKICAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ3Vy
c29yLmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAi
Rm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbXBvcnQgIlBhZ2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy93YWsvV0tHcmFwaGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNyBAQAogI2lmIFBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJ
LmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAi
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgogI2lt
cG9ydCA8SW1hZ2VJTy9JbWFnZUlPLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogI2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIK
ICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAi
Rm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiRm9u
dFNlbGVjdG9yLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTE1NywxMCArMTU3
LDEwIEBAIGNvbnN0IGZsb2F0IERyYWdMaW5rVXJsRm9udFNpemUgPSAxMDsKIAogLy8gRklYTUUg
LSB3ZSBzaG91bGQgbW92ZSBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgTlNTdHJpbmcgZXh0cmFz
IHRvIFdlYkNvcmUKICAgICAKLXN0YXRpYyBGb250JiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZv
bnQpCitzdGF0aWMgRm9udENhc2NhZGUmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKIHsK
ICAgICBzdGF0aWMgTlNGb250ICpjdXJyZW50Rm9udDsKLSAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoRm9udCwgY3VycmVudFJlbmRlcmVyLCAoKSk7CisgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRDYXNjYWRlLCBjdXJyZW50UmVuZGVyZXIsICgpKTsKICAg
ICAKICAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50Rm9udF0pCiAgICAgICAgIHJldHVybiBj
dXJyZW50UmVuZGVyZXI7CkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIEZvbnQmIGZvbnRGcm9t
TlNGb250KE5TRm9udCAqZm9udAogICAgIGN1cnJlbnRGb250ID0gZm9udDsKICAgICBDRlJldGFp
bihjdXJyZW50Rm9udCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBmKGZvbnQsIFtmb250IHBvaW50
U2l6ZV0pOwotICAgIGN1cnJlbnRSZW5kZXJlciA9IEZvbnQoZiwgIVtbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgY3VycmVudFJlbmRl
cmVyID0gRm9udENhc2NhZGUoZiwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
IGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJlcjsKIH0KIApA
QCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBmbG9hdCB3aWR0aFdpdGhGb250KE5TU3RyaW5nICpz
dHIKICAgICBbc3RyaW5nIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAgICAgCiAgICAg
aWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAg
IEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVd
KSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVu
XSk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9u
dCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgp
LCBsZW5ndGgpOwogICAgICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICAgICAg
cmV0dXJuIHdlYkNvcmVGb250LndpZHRoKHJ1bik7CkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd0F0UG9pbnQoTlNTdHJpbmcgKnN0cmluZwogICAgICAgICBpZiAoIWZsaXBwZWQp
CiAgICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKICAgICAg
ICAgICAgIAotICAgICAgICBGb250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwg
W2ZvbnQgcG9pbnRTaXplXSksICFbbnNDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSwgQW50aWFs
aWFzZWQpOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRh
KGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0s
IEFudGlhbGlhc2VkKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3Ro
KTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMg
KzQxLDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9u
QWRqdXN0bWVudChDb250cm9sUGFydCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZvbnREZXNjcmlw
dGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0OworICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRy
b2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogICAg
IAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3Qg
Rm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKLSAgICB2
aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBG
b250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNv
bnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNp
emUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWlu
aW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0OwogCi0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmco
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRl
cihDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBm
bG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFk
ZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpv
b21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3gg
Y29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5n
dGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFydCBwYXJ0KSBjb25z
dCB7IHJldHVybiBwYXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcg
KzE0OSw3IEBAIFRoZW1lKiBwbGF0Zm9ybVRoZW1lKCkKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyB1
c2VkIGJ5IGEgYnVuY2ggb2YgZGlmZmVyZW50IGNvbnRyb2wgcGFydHMuCiAKLXN0YXRpYyBOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250JiBmb250KQorc3RhdGljIE5T
Q29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewogICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4ZWxTaXplKCk7CiAgICAgaWYgKGZvbnRTaXpl
ID49IDE2KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHN0YXRpYyBMZW5ndGhTaXplIHNpemVGcm9tTlND
b250cm9sU2l6ZSgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6ZSBz
aXplRnJvbUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6
ZSwgZmxvYXQgem9vbUZhY3RvciwgY29uc3Qgc3RkOjphcnJheTxJbnRTaXplLCAzPiYgc2l6ZXMp
CitzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbUZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IsIGNvbnN0IHN0
ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQogewogICAgIHJldHVybiBzaXplRnJvbU5TQ29u
dHJvbFNpemUoY29udHJvbFNpemVGb3JGb250KGZvbnQpLCB6b29tZWRTaXplLCB6b29tRmFjdG9y
LCBzaXplcyk7CiB9CkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIGNvbnN0IGludCogY2hlY2ti
b3hNYXJnaW5zKE5TQ29udAogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAot
c3RhdGljIExlbmd0aFNpemUgY2hlY2tib3hTaXplKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExl
bmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCitzdGF0aWMgTGVuZ3RoU2l6
ZSBjaGVja2JveFNpemUoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4K
ICAgICBpZiAoIXpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICF6b29t
ZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCkBAIC0zMjMsNyArMzIzLDcgQEAg
c3RhdGljIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbAogICAgIHJldHVybiBtYXJn
aW5zW2NvbnRyb2xTaXplXTsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0
b3IpCitzdGF0aWMgTGVuZ3RoU2l6ZSByYWRpb1NpemUoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAg
Ly8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhh
dmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIXpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNp
Y09yQXV0bygpICYmICF6b29tZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCkBA
IC01OTMsNyArNTkzLDcgQEAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHN0
ZQogCiAvLyBXZSBkb24ndCB1c2UgY29udHJvbFNpemVGb3JGb250KCkgZm9yIHN0ZXBwZXJzIGJl
Y2F1c2UgdGhlIHN0ZXBwZXIgaGVpZ2h0CiAvLyBzaG91bGQgYmUgZXF1YWwgdG8gb3IgbGVzcyB0
aGFuIHRoZSBjb3JyZXNwb25kaW5nIHRleHQgZmllbGQgaGVpZ2h0LAotc3RhdGljIE5TQ29udHJv
bFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250JiBmb250KQorc3RhdGlj
IE5TQ29udHJvbFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCkKIHsKICAgICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlm
IChmb250U2l6ZSA+PSAxOCkKQEAgLTY3Myw3ICs2NzMsNyBAQCBpbnQgVGhlbWVNYWM6OmJhc2Vs
aW5lUG9zaXRpb25BZGp1c3RtZW50CiAgICAgcmV0dXJuIFRoZW1lOjpiYXNlbGluZVBvc2l0aW9u
QWRqdXN0bWVudChwYXJ0KTsKIH0KIAotRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpjb250cm9s
Rm9udChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdAorRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpjb250cm9sRm9udChDb250cm9sUGFy
dCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewpA
QCAtNjkxLDcgKzY5MSw3IEBAIEZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQo
Q28KICAgICB9CiB9CiAKLUxlbmd0aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2xQ
YXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6
ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3Ro
U2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2gg
KHBhcnQpIHsKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CkBAIC03MTAsNyArNzEwLDcgQEAg
TGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29udHJvbAogICAgIH0KIH0KIAotTGVu
Z3RoU2l6ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNv
bnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhTaXplIFRoZW1l
TWFjOjptaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7
CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKQEAgLTcyNyw3ICs3MjcsNyBAQCBMZW5n
dGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoCiAgICAgfQogfQogCi1MZW5ndGhC
b3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
CitMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6CkBAIC03MzksNyArNzM5LDcgQEAgTGVuZ3RoQm94IFRoZW1lTWFjOjpj
b250cm9sQm9yZGVyKENvbnRybwogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1lTWFjOjpjb250
cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5n
dGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aEJveCBUaGVt
ZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIkNocm9tZS5oIgogI2ltcG9y
dCAiQ3Vyc29yLmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRm9udC5oIgorI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9S
TShJT1MpCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiAjZW5kaWYKIAogY2xhc3Mg
TG9jYWxlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXpl
ZERhdGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
aW9zL0xvY2FsaXplZERhdGVDYWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBMb2NhbGl6ZWREYXRlQ2FjaGVfaAogCiAjaW5j
bHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogY2xhc3MgTG9jYWxpemVkRGF0ZUNhY2hlIHsKIHB1YmxpYzoKICAgICBOU0Rh
dGVGb3JtYXR0ZXIgKmZvcm1hdHRlckZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlKTsK
LSAgICBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwg
Y29uc3QgRm9udCYsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50Jik7CisgICAgZmxvYXQgbWF4aW11
bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgTWVhc3VyZVRleHRDbGllbnQmKTsKICAgICB2b2lkIGxvY2FsZUNoYW5nZWQoKTsK
IAogcHJpdmF0ZToKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hN
YXA8aW50LCBmbG9hdD4gRGF0ZVR5cGVNYXhXaWR0aE1hcDsKICAgICBEYXRlVHlwZUZvcm1hdHRl
ck1hcCBtX2Zvcm1hdHRlck1hcDsKICAgICBEYXRlVHlwZU1heFdpZHRoTWFwIG1fbWF4V2lkdGhN
YXA7Ci0gICAgRm9udCBtX2ZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9mb250OwogCiAgICAgZnJp
ZW5kIExvY2FsaXplZERhdGVDYWNoZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCk7CiAgICAgZnJpZW5k
IE5ldmVyRGVzdHJveWVkPExvY2FsaXplZERhdGVDYWNoZT47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2Nh
bGl6ZWREYXRlQ2FjaGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBv
cnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNhY2hlLmgiCiAKLSNpbXBvcnQg
IkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJUZXh0UnVuLmgiCiAj
aW1wb3J0IDxtYXRoLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTIsNyArNTIs
NiBAQCBzdGF0aWMgdm9pZCBfbG9jYWxlQ2hhbmdlZChDRk5vdGlmaWNhdGlvCiB9CiAKIExvY2Fs
aXplZERhdGVDYWNoZTo6TG9jYWxpemVkRGF0ZUNhY2hlKCkKLSAgICA6IG1fZm9udChGb250KCkp
CiB7CiAgICAgLy8gTGlzdGVuIHRvIENGIE5vdGlmaWNhdGlvbnMgZm9yIGxvY2FsZSBjaGFuZ2Us
IGFuZCBjbGVhciB0aGUgY2FjaGUgd2hlbiBpdCBkb2VzLgogICAgIENGTm90aWZpY2F0aW9uQ2Vu
dGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCAodm9p
ZCopdGhpcywgX2xvY2FsZUNoYW5nZWQsCkBAIC04NCwxNCArODMsMTQgQEAgTlNEYXRlRm9ybWF0
dGVyICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmZvcgogICAgIHJldHVybiBkYXRlRm9ybWF0dGVyOwog
fQogCi1mbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKERh
dGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IE1lYXN1cmVU
ZXh0Q2xpZW50JiBtZWFzdXJlcikKK2Zsb2F0IExvY2FsaXplZERhdGVDYWNoZTo6bWF4aW11bVdp
ZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IE1lYXN1cmVUZXh0Q2xpZW50JiBtZWFzdXJlcikKIHsKICAgICBpbnQg
a2V5ID0gc3RhdGljX2Nhc3Q8aW50Pih0eXBlKTsKICAgICBpZiAobV9mb250ID09IGZvbnQpIHsK
ICAgICAgICAgaWYgKG1fbWF4V2lkdGhNYXAuY29udGFpbnMoa2V5KSkKICAgICAgICAgICAgIHJl
dHVybiBtX21heFdpZHRoTWFwLmdldChrZXkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZm9u
dCA9IEZvbnQoZm9udCk7CisgICAgICAgIG1fZm9udCA9IEZvbnRDYXNjYWRlKGZvbnQpOwogICAg
ICAgICBtX21heFdpZHRoTWFwLmNsZWFyKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcg
KzIxLDcgQEAKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVk
ZSAiSW5saW5lVGV4dEJveC5oIgpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIEVsbGlwc2lzQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50CiAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgfQog
Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZS5mb250KCk7CisgICAgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBpZiAoc2VsZWN0
aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgcGFp
bnRTZWxlY3Rpb24oY29udGV4dCwgcGFpbnRPZmZzZXQsIGxpbmVTdHlsZSwgZm9udCk7CiAKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludE1hcmt1cEJveChQYWludElu
CiBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KCkKIHsKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYg
Zm9udCA9IGxpbmVTdHlsZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBs
aW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94
ID0gcm9vdCgpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkg
cGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgogICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IExheW91dFJlY3QoeCgpLCB5KCkgKyByb290Qm94LnNlbGVjdGlvblRvcEFk
anVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSwgMCwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHRBZGp1
c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpOwpAQCAtMTE5LDcgKzExOSw3IEBAIEludFJlY3QgRWxs
aXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNl
bGVjdGlvblJlY3QpOwogfQogCi12b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQordm9pZCBFbGxpcHNpc0Jv
eDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiB7CiAgICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIENvbG9yIGMgPSBibG9ja0Zsb3coKS5z
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwg
Y29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9o
ZWlnaHQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0
aW9uU3RhdGUoKSBvdmVycmlkZSB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9Ci0gICAgdm9p
ZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYsIGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZvbnRDYXNjYWRlJik7CiAgICAgSW5saW5lQm94KiBtYXJrdXBCb3goKSBjb25zdDsK
IAogICAgIGJvb2wgbV9zaG91bGRQYWludE1hcmt1cEJveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkVsbGlwc2lzQm94LmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAg
LTEyMiw3ICsxMjIsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGluZShJbmxpbmVCb3gq
CiAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5k
QmFzZWxpbmUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChjaGlsZC0+YmVoYXZlc0xpa2VUZXh0
KCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc0xpbmVCcmVhaygpIHx8
IGNoaWxkLT5yZW5kZXJlcigpLnBhcmVudCgpICE9ICZyZW5kZXJlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxB
c2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpKQor
ICAgICAgICAgICAgICAgIGlmICghcGFyZW50U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENh
c2NhZGUoKS5mb250TWV0cmljcygpKQogICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRTdHls
ZS5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS5saW5lSGVpZ2h0KCkKICAgICAgICAgICAgICAg
ICAgICAgfHwgKHBhcmVudFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSAmJiAhaXNS
b290SW5saW5lQm94KCkpIHx8IGNoaWxkU3R5bGUudmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5F
KQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5l
SGVpZ2h0QW5kQmFzZWxpbmUgPSB0cnVlOwpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6YWRkVG9MaW5lKElubGluZUJveCoKICAgICAgICAgICAgICAgICBhdXRvJiBjaGls
ZEZsb3dCb3ggPSBkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpOwogICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoZSBjaGlsZCdzIGJpdCwgYW5kIHRoZW4gYWxzbyBjaGVjayBmb3IgZGlm
ZmVyZW5jZXMgaW4gZm9udCwgbGluZS1oZWlnaHQsIHZlcnRpY2FsLWFsaWduCiAgICAgICAgICAg
ICAgICAgaWYgKCFjaGlsZEZsb3dCb3guZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRC
YXNlbGluZSgpCi0gICAgICAgICAgICAgICAgICAgIHx8ICFwYXJlbnRTdHlsZS5mb250KCkuZm9u
dE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxl
LmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5
bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRB
bmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpKQogICAgICAg
ICAgICAgICAgICAgICB8fCBwYXJlbnRTdHlsZS5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS5s
aW5lSGVpZ2h0KCkKICAgICAgICAgICAgICAgICAgICAgfHwgKHBhcmVudFN0eWxlLnZlcnRpY2Fs
QWxpZ24oKSAhPSBCQVNFTElORSAmJiAhaXNSb290SW5saW5lQm94KCkpIHx8IGNoaWxkU3R5bGUu
dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgICAgICAgICAgICAgIHx8IGNoaWxk
U3R5bGUuaGFzQm9yZGVyKCkgfHwgY2hpbGRTdHlsZS5oYXNQYWRkaW5nKCkgfHwgY2hpbGRTdHls
ZS5oYXNUZXh0Q29tYmluZSgpKQpAQCAtMzg4LDcgKzM4OCw3IEBAIGZsb2F0IElubGluZUZsb3dC
b3g6OnBsYWNlQm94UmFuZ2VJbklubGkKICAgICAgICAgICAgIFJlbmRlclRleHQmIHJlbmRlclRl
eHQgPSB0ZXh0Qm94LnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyVGV4dC50ZXh0
TGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXb3JkU3BhY2luZyAmJiBpc1Nw
YWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQodGV4dEJveC5zdGFydCgpKSkpCi0g
ICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHRleHRCb3gubGluZVN0eWxlKCkuZm9u
dCgpLndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHRl
eHRCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgICAgICAg
ICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNo
YXJhY3RlckF0KHRleHRCb3guZW5kKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRl
eHRCb3guc2V0TG9naWNhbExlZnQobG9naWNhbExlZnQpOwpAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJv
b2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKIAogICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBpZiAobGluZVN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlw
aE9yaWVudGF0aW9uVXByaWdodAotICAgICAgICB8fCBsaW5lU3R5bGUuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxpbmVTdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CkBAIC00NjAsNyArNDYwLDcg
QEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogICAgICAgICAgICAg
aWYgKGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpjaGlsZCkucmVxdWlyZXNJZGVvZ3JhcGhpY0Jh
c2VsaW5lKHRleHRCb3hEYXRhTWFwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICBpZiAo
Y2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVy
dGljYWxHbHlwaHMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRG
b250cyA9IG51bGxwdHI7CkBAIC04NzMsNyArODczLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxv
d0JveDo6YWRkVGV4dEJveFZpcwogCiAgICAgYm9vbCBlbXBoYXNpc01hcmtJc0Fib3ZlOwogICAg
IGlmIChsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25l
ICYmIHRleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5lU3R5bGUsIGVtcGhh
c2lzTWFya0lzQWJvdmUpKSB7Ci0gICAgICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5l
U3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpKTsKKyAgICAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodCA9IGxpbmVTdHlsZS5m
b250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpKTsKICAgICAgICAgaWYgKGVtcGhhc2lzTWFya0lzQWJvdmUgPT0gIWxpbmVTdHls
ZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICB0b3BHbHlwaE92ZXJm
bG93ID0gc3RkOjptaW4odG9wR2x5cGhPdmVyZmxvdywgLWVtcGhhc2lzTWFya0hlaWdodCk7CiAg
ICAgICAgIGVsc2UKQEAgLTg4Miw3ICs4ODIsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94
OjphZGRUZXh0Qm94VmlzCiAKICAgICAvLyBJZiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZSwg
d2Ugc2hvdWxkIGZhY3RvciB0aGF0IGludG8gcmlnaHQgbGF5b3V0IG92ZXJmbG93LiAoRXZlbiBp
biBSVEwsIGxldHRlci1zcGFjaW5nIGlzCiAgICAgLy8gYXBwbGllZCB0byB0aGUgcmlnaHQsIHNv
IHRoaXMgaXMgbm90IGFuIGlzc3VlIHdpdGggbGVmdCBvdmVyZmxvdy4KLSAgICByaWdodEdseXBo
T3ZlcmZsb3cgLT0gc3RkOjptaW4oMCwgKGludClsaW5lU3R5bGUuZm9udCgpLmxldHRlclNwYWNp
bmcoKSk7CisgICAgcmlnaHRHbHlwaE92ZXJmbG93IC09IHN0ZDo6bWluKDAsIChpbnQpbGluZVN0
eWxlLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2luZygpKTsKIAogICAgIExheW91dFVuaXQgdGV4
dFNoYWRvd0xvZ2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCB0ZXh0U2hhZG93TG9naWNhbEJvdHRv
bTsKQEAgLTE1MzQsMTAgKzE1MzQsMTAgQEAgTGF5b3V0VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21w
dXRlT3ZlckFubgogICAgICAgICAgICAgYm9vbCBlbXBoYXNpc01hcmtJc0Fib3ZlOwogICAgICAg
ICAgICAgaWYgKGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFz
aXNNYXJrTm9uZSAmJiBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqY2hpbGQpLmVtcGhhc2lzTWFy
a0V4aXN0c0FuZElzQWJvdmUoY2hpbGRMaW5lU3R5bGUsIGVtcGhhc2lzTWFya0lzQWJvdmUpICYm
IGVtcGhhc2lzTWFya0lzQWJvdmUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkTGluZVN0
eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBp
bnQgdG9wT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5
bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNN
YXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgdG9wT2ZFbXBoYXNpc01hcmsg
PSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBo
YXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBhbGxvd2VkUG9z
aXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2lj
YWxCb3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hp
bGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW50IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxCb3R0b20oKSArIGNo
aWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0
eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHN0ZDo6bWF4KHJlc3VsdCwgYm90dG9tT2ZFbXBoYXNpc01hcmsgLSBhbGxvd2VkUG9zaXRp
b24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE1ODMsMTAgKzE1ODMs
MTAgQEAgTGF5b3V0VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlVW5kZXJBbgogICAgICAgICAg
ICAgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlzdHNBbmRJ
c0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKTsKICAgICAgICAgICAg
IGlmIChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFy
a05vbmUgJiYgIWVtcGhhc2lzTWFya0lzQWJvdmUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNo
aWxkTGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxC
b3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRM
aW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkg
KyBjaGlsZExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExp
bmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBzdGQ6Om1heChyZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBv
c2l0aW9uKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxk
TGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVt
cGhhc2lzTWFya1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BP
ZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5mb250
Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNN
YXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChyZXN1
bHQsIGFsbG93ZWRQb3NpdGlvbiAtIHRvcE9mRW1waGFzaXNNYXJrKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSwxNCArMjQ1LDE0IEBA
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEIKICAgICByZXR1cm4gc3Rh
dGU7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250JiBmb250VG9Vc2UoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcikKK3N0YXRpYyBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyVGV4
dCYgcmVuZGVyZXIpCiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVu
ZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKSkgewogICAgICAgICBjb25zdCBhdXRvJiB0ZXh0Q29t
YmluZVJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKTsKICAg
ICAgICAgaWYgKHRleHRDb21iaW5lUmVuZGVyZXIuaXNDb21iaW5lZCgpKQogICAgICAgICAgICAg
cmV0dXJuIHRleHRDb21iaW5lUmVuZGVyZXIudGV4dENvbWJpbmVGb250KCk7CiAgICAgfQotICAg
IHJldHVybiBzdHlsZS5mb250KCk7CisgICAgcmV0dXJuIHN0eWxlLmZvbnRDYXNjYWRlKCk7CiB9
CiAKIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFy
dFBvcywgaW50IGVuZFBvcykgY29uc3QKQEAgLTI2Niw3ICsyNjYsNyBAQCBMYXlvdXRSZWN0IElu
bGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uCiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3Ag
PSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9
IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpOwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5
bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNl
KGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBm
b250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKIAogICAgIFN0cmluZyBoeXBoZW5hdGVk
U3RyaW5nQnVmZmVyOwogICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IGVQb3MgPT0gbV9sZW4gJiYg
aGFzSHlwaGVuKCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaQogICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlID0gdGV4dFBhaW50
U3R5bGU7CiAKICAgICAvLyBTZXQgb3VyIGZvbnQuCi0gICAgY29uc3QgRm9udCYgZm9udCA9IGZv
bnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgLy8gMS4gUGFpbnQg
YmFja2dyb3VuZHMgYmVoaW5kIHRleHQgaWYgbmVlZGVkLiBFeGFtcGxlcyBvZiBzdWNoIGJhY2tn
cm91bmRzIGluY2x1ZGUgc2VsZWN0aW9uCiAgICAgLy8gYW5kIGNvbXBvc2l0aW9uIHVuZGVybGlu
ZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlVGV4dENsaXAgJiYgIWlzUHJpbnRpbmcpIHsKQEAg
LTY3OCw3ICs2NzgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKGlu
CiAgICAgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwogfQog
Ci12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKK3ZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKIHsKICNpZiBFTkFCTEUoVEVYVF9TRUxFQ1RJT04p
CiAgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNzM3LDcgKzczNyw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgKICNlbmRpZgogfQogCi12
b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcykK
K3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGludCBzdGFydFBvcywgaW50
IGVuZFBvcykKIHsKICAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKICAgICBpbnQgc1BvcyA9IHN0
ZDo6bWF4KHN0YXJ0UG9zIC0gb2Zmc2V0LCAwKTsKQEAgLTEwNTgsNyArMTA1OCw3IEBAIHN0YXRp
YyBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGkKICAgICB9CiB9CiAKLXZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFy
a2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgZ3Jh
bW1hcikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1
bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxp
bmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50
KCkucHJpbnRpbmcoKSkKQEAgLTExMjgsNyArMTEyOCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnREb2N1bWVudE1hcmtlcigKICAgICBjb250ZXh0LmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIoRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRl
cmxpbmVPZmZzZXQpLCB3aWR0aCwgbGluZVN0eWxlRm9yTWFya2VyVHlwZShtYXJrZXIudHlwZSgp
KSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBG
b250JiBmb250KQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0g
dGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAKQEAgLTExNTksNyArMTE1OSw3IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIKICAgICB9CiB9CiAKLXZvaWQgSW5saW5l
VGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50
TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihS
ZW5kZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBh
cmUgbm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRl
ZCBmb3IgaGl0IHRlc3RpbmcuCiAgICAgTGF5b3V0VW5pdCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsK
QEAgLTExNzcsNyArMTE3Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JS
ZXBsYWMKICAgICBtYXJrZXIuc2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogfQogICAgIAot
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBib29sIGJhY2tncm91bmQpCiB7CiAgICAgaWYgKCFyZW5kZXJl
cigpLnRleHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlu
dCBJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihmbG8KICAgICAgICAgcmV0dXJuIGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBsZW4oKTsKIAogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250
ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKICAgICByZXR1cm4g
Zm9udC5vZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgZm9udCks
IGxpbmVPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAK
QEAgLTEzNDIsNyArMTM0Miw3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0KGkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0KCk7CiAKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9u
dCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgaW50IGZy
b20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0gbV9zdGFydCA6IDA7CiAg
ICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogb2Zmc2V0IC0g
bV9zdGFydDsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhl
cmU/CkBAIC0xMzUyLDcgKzEzNTIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZv
ck9mZnNldChpCiAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0Rp
cmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSwgcnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6
Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1RleHRSdW4gSW5saW5l
VGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dCgpKTsKIApAQCAtMTM2Niw3ICsxMzY2LDcg
QEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKAogICAgIHJldHVybiBj
b25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250LCBzdHJpbmcsIHJlbmRlcmVyKCkudGV4dExlbmd0
aCgpIC0gc3RhcnRQb3MsIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpOwogfQogCi1UZXh0UnVuIElu
bGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250JiBmb250LCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBT
dHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3Ry
aW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAogewogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDggQEAgcHJp
dmF0ZToKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogICAgIExheW91
dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRl
eHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgU3RyaW5nKiBoeXBoZW5hdGVk
U3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7Ci0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZywgdW5zaWduZWQgbWF4
aW11bUxlbmd0aCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29u
c3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRy
KSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBGb250Q2FzY2FkZSYsIFN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3Ry
aW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7CiAKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1
cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KQEAgLTE0OCwxNyAr
MTQ4LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KGlu
dCBvZmZzZXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYWludENvbXBvc2l0aW9u
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGludCBzdGFydFBvcywgaW50IGVuZFBv
cyk7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYs
IGJvb2wgYmFja2dyb3VuZCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwor
ICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21w
b3NpdGlvblVuZGVybGluZSYpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9u
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgVGV4dERlY29y
YXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEqLCBUZXh0UGFpbnRl
ciYpOwotICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBDb2xv
ciB0ZXh0Q29sb3IpOwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOwotICAgIHZv
aWQgcGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBGb250Jik7CisgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
Rm9udENhc2NhZGUmLCBDb2xvciB0ZXh0Q29sb3IpOworICAgIHZvaWQgcGFpbnREb2N1bWVudE1h
cmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgYm9vbCBncmFtbWFyKTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1h
cmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIHZv
aWQgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2Vy
JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBjb21wdXRlUmVj
dEZvclJlcGxhY2VtZW50TWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKICAgICBUZXh0UnVuOjpFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzI1LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGVm
CiAgICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3Bh
Y2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0
IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFy
V2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
Lm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICByZXR1cm4g
bGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRq
dXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKICAgICAvLyBGSVhNRTogU2hv
dWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRv
ZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdy
aWQtPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOworICAg
IGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAg
ICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzAwMyw3ICszMDAzLDcgQEAgc3RhdGljIFJlbmRl
clN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAgICBuZXdGb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKICAgICAgICAgbmV3Rm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKICAgICAgICAgcHNldWRv
U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotICAgICAgICBw
c2V1ZG9TdHlsZS0+Zm9udCgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3Rv
cigpKTsKKyAgICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHBzZXVkb1N0
eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgCiAgICAgICAgIGlu
dCBkZXNpcmVkQ2FwSGVpZ2h0ID0gKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVySGVpZ2h0KCkg
LSAxKSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBI
ZWlnaHQoKTsKICAgICAgICAgaW50IGFjdHVhbENhcEhlaWdodCA9IHBzZXVkb1N0eWxlLT5mb250
TWV0cmljcygpLmNhcEhlaWdodCgpOwpAQCAtMzAxMiw3ICszMDEyLDcgQEAgc3RhdGljIFJlbmRl
clN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAgICAgICAgbmV3Rm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSAt
IDEpOwogICAgICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdG
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgLTEpOwogICAgICAgICAgICAgcHNldWRvU3R5
bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAg
cHNldWRvU3R5bGUtPmZvbnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQoKS5mb250U2VsZWN0
b3IoKSk7CisgICAgICAgICAgICBwc2V1ZG9TdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUocHNl
dWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgYWN0
dWFsQ2FwSGVpZ2h0ID0gcHNldWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zNjkzLDcgKzM2OTMsNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJC
bG9jazo6cmVuZGVyTmFtZSgpIGNvCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5k
ZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1
bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorc3RhdGljIGlubGluZSBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbikKIHsKICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBMVFI7CiAgICAg
Ym9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxP
cmRlcjsKQEAgLTM3MDgsNyArMzcwOCw3IEBAIHN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuSW4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNp
b25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK3N0YXRpYyBpbmxpbmUg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywg
aW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSBMVFI7CiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0g
c3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKQEAgLTM3MjcsMjQgKzM3MjcsMjQg
QEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIHJldHVybiBy
dW47CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2Jq
ZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICByZXR1cm4gY29uc3Ry
dWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgc3R5
bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVu
OjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBy
ZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZvbnQsIGNoYXJhY3RlcnMs
IGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgaWYgKHRleHQtPmlzOEJp
dCgpKQogICAgICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKGNvbnRleHQsIGZv
bnQsIHRleHQtPmNoYXJhY3RlcnM4KCksIHRleHQtPnRleHRMZW5ndGgoKSwgc3R5bGUsIGV4cGFu
c2lvbik7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250
LCB0ZXh0LT5jaGFyYWN0ZXJzMTYoKSwgdGV4dC0+dGV4dExlbmd0aCgpLCBzdHlsZSwgZXhwYW5z
aW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVy
QmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0g
dGV4dC0+dGV4dExlbmd0aCgpKTsKICAgICBpZiAodGV4dC0+aXM4Qml0KCkpCkBAIC0zNzUyLDcg
KzM3NTIsNyBAQCBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlCiAgICAg
cmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCB0ZXh0LT5jaGFy
YWN0ZXJzMTYoKSArIG9mZnNldCwgbGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4
dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZs
YWdzIGZsYWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlv
ciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDIyICsyMDIsMjIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gb2JqLT5pc0Zsb2F0aW5nKCkgfHwgKG9iai0+aXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkgJiYgIW9iai0+c3R5bGUoKS5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKSAm
JiAhb2JqLT5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0
IEZvbnQmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0
UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24g
fCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0
VGV4dFJ1bkZsYWdzKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVu
ZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIGNvbnN0
IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
ck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBSZW5kZXJUZXh0Kiwg
Y29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9
IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5n
RXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVy
T2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGlj
IFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJp
ZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5kZXJUZXh0Kiwg
dW5zaWduZWQgb2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUm
LAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRSdW46OkFsbG93VHJh
aWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uKTsKIAotICAg
IHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBj
b25zdCBGb250JiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJl
bmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBh
bnNpb25CZWhhdmlvciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVu
OjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVu
ZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9IFRleHRSdW46
OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9u
KTsKICAgICAKICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ3LDcgKzM5NDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
c3RyaXBUcmFpbGluZ1NwYWNlKGZsCiAgICAgICAgIC8vIENvbGxhcHNlIGF3YXkgdGhlIHRyYWls
aW5nIHNwYWNlIGF0IHRoZSBlbmQgb2YgYSBibG9jay4KICAgICAgICAgUmVuZGVyVGV4dCYgcmVu
ZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCp0cmFpbGluZ1NwYWNlQ2hpbGQpOwogICAg
ICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9
IHJlbmRlclRleHQuc3R5bGUoKS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3Qt
bGluZS4KKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSByZW5kZXJUZXh0LnN0eWxl
KCkuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgogICAg
ICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bigmcmVuZGVyVGV4dCwgZm9udCwgJnNwYWNlLCAxLCByZW5kZXJUZXh0LnN0eWxlKCkp
KTsKICAgICAgICAgaW5saW5lTWF4IC09IHNwYWNlV2lkdGggKyBmb250LndvcmRTcGFjaW5nKCk7
CiAgICAgICAgIGlmIChpbmxpbmVNaW4gPiBpbmxpbmVNYXgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+IGZhbGxiYWNrRm9udHM7CiAgICAgR2x5cGhPdmVyZmxvdyBnbHlwaE92ZXJmbG93OwogCi0g
ICAgY29uc3QgRm9udCYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVudCgpLCBsaW5l
SW5mbykuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0eWxlKCpy
ZW5kZXJlci0+cGFyZW50KCksIGxpbmVJbmZvKS5mb250Q2FzY2FkZSgpOwogICAgIC8vIEFsd2F5
cyBjb21wdXRlIGdseXBoIG92ZXJmbG93IGlmIHRoZSBibG9jaydzIGxpbmUtYm94LWNvbnRhaW4g
dmFsdWUgaXMgImdseXBocyIuCiAgICAgaWYgKGxpbmVCb3gtPmZpdHNUb0dseXBocygpKSB7CiAg
ICAgICAgIC8vIElmIHdlIGRvbid0IHN0aWNrIG91dCBvZiB0aGUgcm9vdCBsaW5lJ3MgZm9udCBi
b3gsIHRoZW4gZG9uJ3QgYm90aGVyIGNvbXB1dGluZyBvdXIgZ2x5cGggb3ZlcmZsb3cuIFRoaXMg
b3B0aW1pemF0aW9uCkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExv
Z2ljYWxXaWR0aEZvclRleAogICAgICAgICAgICAgICAgICAgICAmd29yZE1lYXN1cmVtZW50LmZh
bGxiYWNrRm9udHMsICZvdmVyZmxvdyk7CiAgICAgICAgICAgICAgICAgVUNoYXIgYyA9IHJlbmRl
cmVyLT5jaGFyYWN0ZXJBdCh3b3JkTWVhc3VyZW1lbnQuc3RhcnRPZmZzZXQpOwogICAgICAgICAg
ICAgICAgIGlmIChpID4gMCAmJiB3b3JkTGVuZ3RoID09IDEgJiYgKGMgPT0gJyAnIHx8IGMgPT0g
J1x0JykpCi0gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gcmVuZGVyZXItPnN0
eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVk
V2lkdGggKz0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwog
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0aCArPSB3b3Jk
TWVhc3VyZW1lbnQud2lkdGg7CiAgICAgICAgICAgICBpZiAoIXdvcmRNZWFzdXJlbWVudC5mYWxs
YmFja0ZvbnRzLmlzRW1wdHkoKSkgewpAQCAtNzQzLDE0ICs3NDMsMTQgQEAgQmlkaVJ1biogUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRAogICAgICAgICAgICAgaWYgKHRleHRBbGlnbiA9
PSBKVVNUSUZZICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuKSB7CiAgICAgICAgICAgICAgICAg
aWYgKCFpc0FmdGVyRXhwYW5zaW9uKQogICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxp
bmVUZXh0Qm94PigqcnVuLT5ib3goKSkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24odHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udDo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0cmluZ1ZpZXcocnVuLT5tX3N0YXJ0
LCBydW4tPm1fc3RvcCksIHJ1bi0+Ym94KCktPmRpcmVjdGlvbigpLCBpc0FmdGVyRXhwYW5zaW9u
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBGb250Q2Fz
Y2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0cmluZ1ZpZXcocnVu
LT5tX3N0YXJ0LCBydW4tPm1fc3RvcCksIHJ1bi0+Ym94KCktPmRpcmVjdGlvbigpLCBpc0FmdGVy
RXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzLmFwcGVu
ZChvcHBvcnR1bml0aWVzSW5SdW4pOwogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoaW50IGxlbmd0aCA9IHJlbmRlclRleHQudGV4dExlbmd0aCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCFydW4tPm1fc3RhcnQgJiYgbmVlZHNXb3JkU3BhY2luZyAmJiBpc1NwYWNl
T3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQocnVuLT5tX3N0YXJ0KSkpCi0gICAgICAg
ICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGxpbmVTdHlsZSgqcmVuZGVyVGV4dC5w
YXJlbnQoKSwgbGluZUluZm8pLmZvbnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAg
ICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFyZW50KCks
IGxpbmVJbmZvKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAg
bmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVy
QXQocnVuLT5tX3N0b3AgLSAxKSkgJiYgcnVuLT5tX3N0b3AgPT0gbGVuZ3RoOwogICAgICAgICAg
ICAgfQogCkBAIC03NjgsNyArNzY4LDcgQEAgQmlkaVJ1biogUmVuZGVyQmxvY2tGbG93Ojpjb21w
dXRlSW5saW5lRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PElubGluZVRl
eHRCb3g+KCpsZWFmQ2hpbGQpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZW5jb3VudGVyZWRKdXN0aWZpZWRSdWJ5ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJU
ZXh0PihsZWFmQ2hpbGQtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dChyZW5kZXJUZXh0LnN0cmluZ1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSwgaXNBZnRl
ckV4cGFuc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0
aWVzSW5SdW4gPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJU
ZXh0LnN0cmluZ1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lv
bik7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzLmFwcGVu
ZChvcHBvcnR1bml0aWVzSW5SdW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCArPSBvcHBvcnR1bml0aWVzSW5SdW47CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTE5MDcsOSArMTkwNyw5IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjaGVja0xp
bmVzRm9yVGV4dE8KIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNp
cyB1c2luZyB0aGUgY3VycmVudCBmb250LgogICAgIC8vIEZJWE1FOiBDU1MzIHNheXMgdGhpcyBp
cyBjb25maWd1cmFibGUsIGFsc28gbmVlZCB0byB1c2UgMHgwMDJFIChGVUxMIFNUT1ApIGlmIGhv
cml6b250YWwgZWxsaXBzaXMgaXMgIm5vdCByZW5kZXJhYmxlIgotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBlbGxpcHNpc1N0ciwgKCZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKLSAgICBj
b25zdCBGb250JiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5mb250KCk7CisgICAg
Y29uc3QgRm9udENhc2NhZGUmIGZpcnN0TGluZUZvbnQgPSBmaXJzdExpbmVTdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgZmxvYXQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9IGZpcnN0TGluZUZv
bnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmaXJzdExpbmVGb250LCAmaG9yaXpvbnRh
bEVsbGlwc2lzLCAxLCBmaXJzdExpbmVTdHlsZSgpKSk7CiAgICAgZmxvYXQgZWxsaXBzaXNXaWR0
aCA9IChmb250ID09IGZpcnN0TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZv
bnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lz
LCAxLCBzdHlsZSgpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRleHQoCiAgICAgbV9u
ZWVkc0ZvbnRVcGRhdGUgPSB0cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lk
dGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250JiBmb250LCBmbG9h
dCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlckNvbWJp
bmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QK
IHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICByZXR1cm4gZm9udC5zaXplKCk7CkBA
IC0xMDgsNyArMTA4LDcgQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQog
ICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoID0gd2lkdGgoMCwgdGV4dExlbmd0aCgpLCBvcmln
aW5hbEZvbnQoKSwgMCwgbnVsbHB0ciwgJmdseXBoT3ZlcmZsb3cpOwogICAgIG1faXNDb21iaW5l
ZCA9IGNvbWJpbmVkVGV4dFdpZHRoIDw9IGVtV2lkdGg7CiAgICAgCi0gICAgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICBGb250
U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0
b3IoKTsKIAogICAgIGlmIChtX2lzQ29tYmluZWQpCiAgICAgICAgIHNob3VsZFVwZGF0ZUZvbnQg
PSBtX2NvbWJpbmVGb250U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7IC8v
IE5lZWQgdG8gY2hhbmdlIGZvbnQgb3JpZW50YXRpb24gdG8gaG9yaXpvbnRhbC4KQEAgLTExNyw3
ICsxMTcsOCBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgICAg
IHN0YXRpYyBjb25zdCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudHNbXSA9IHsgSGFsZldp
ZHRoLCBUaGlyZFdpZHRoLCBRdWFydGVyV2lkdGggfTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDAgOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh3aWR0aFZhcmlhbnRzKSA7ICsraSkgewogICAgICAg
ICAgICAgZGVzY3JpcHRpb24uc2V0V2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudHNbaV0pOwotICAg
ICAgICAgICAgRm9udCBjb21wcmVzc2VkRm9udCA9IEZvbnQoZGVzY3JpcHRpb24sIHN0eWxlKCku
Zm9udCgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250KCkud29yZFNwYWNpbmcoKSk7CisK
KyAgICAgICAgICAgIEZvbnRDYXNjYWRlIGNvbXByZXNzZWRGb250KGRlc2NyaXB0aW9uLCBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2luZygpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCku
d29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICBjb21wcmVzc2VkRm9udC51cGRhdGUoZm9udFNl
bGVjdG9yKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZmxvYXQgcnVuV2lkdGggPSBSZW5k
ZXJUZXh0Ojp3aWR0aCgwLCB0ZXh0TGVuZ3RoKCksIGNvbXByZXNzZWRGb250LCAwLCBudWxscHRy
LCAmZ2x5cGhPdmVyZmxvdyk7CkBAIC0xMzYsNyArMTM3LDcgQEAgdm9pZCBSZW5kZXJDb21iaW5l
VGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBzaG91bGRVcGRhdGVGb250ID0gbV9jb21iaW5l
Rm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24ob3JpZ2luYWxGb250KCkuZm9udERlc2NyaXB0
aW9uKCkpOwogCiAgICAgaWYgKHNob3VsZFVwZGF0ZUZvbnQpCi0gICAgICAgIG1fY29tYmluZUZv
bnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgICAgICBtX2NvbWJpbmVG
b250U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiAKICAgICBpZiAo
bV9pc0NvbWJpbmVkKSB7CiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyU3RyaW5nLCAoJm9iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVyLCAxKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q29tYmluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcg
QEAKICNpZm5kZWYgUmVuZGVyQ29tYmluZVRleHRfaAogI2RlZmluZSBSZW5kZXJDb21iaW5lVGV4
dF9oCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNs
dWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKQEAgLTM4LDE1ICszOCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGp1c3RUZXh0
T3JpZ2luKEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkg
Y29uc3Q7CiAgICAgdm9pZCBnZXRTdHJpbmdUb1JlbmRlcihpbnQsIFN0cmluZyYsIGludCYgbGVu
Z3RoKSBjb25zdDsKICAgICBib29sIGlzQ29tYmluZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29t
YmluZWQ7IH0KLSAgICBmbG9hdCBjb21iaW5lZFRleHRXaWR0aChjb25zdCBGb250JiBmb250KSBj
b25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQotICAgIGNvbnN0IEZvbnQmIG9yaWdpbmFsRm9u
dCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpLmZvbnQoKTsgfQotICAgIGNvbnN0
IEZvbnQmIHRleHRDb21iaW5lRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tYmluZUZvbnRTdHls
ZS0+Zm9udCgpOyB9CisgICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CisgICAgY29uc3QgRm9udENh
c2NhZGUmIG9yaWdpbmFsRm9udCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCk7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgdGV4dENvbWJpbmVGb250KCkg
Y29uc3QgeyByZXR1cm4gbV9jb21iaW5lRm9udFN0eWxlLT5mb250Q2FzY2FkZSgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBub2RlKCkgY29uc3QgPSBkZWxldGU7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNDb21iaW5lVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
Rm9udCYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gIlJlbmRlckNvbWJpbmVUZXh0IjsgfQogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlcmVkVGV4dChjb25zdCBTdHJpbmcm
KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC05
OTcsNyArOTk3LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFwcGx5TAog
ICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBlbGxp
cHNpc0FuZFNwYWNlU3RyLCAoZWxsaXBzaXNBbmRTcGFjZSwgMikpOwogICAgICAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBlbGxpcHNpc1N0ciwgKCZob3Jp
em9udGFsRWxsaXBzaXMsIDEpKTsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHls
ZSA9IG51bVZpc2libGVMaW5lcyA9PSAxID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7Ci0g
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgICAgICBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwogCiAgICAgICAg
IC8vIEdldCBlbGxpcHNpcyB3aWR0aCwgYW5kIGlmIHRoZSBsYXN0IGNoaWxkIGlzIGFuIGFuY2hv
ciwgaXQgd2lsbCBnbyBhZnRlciB0aGUgZWxsaXBzaXMsIHNvIGFkZCBpbiBhIHNwYWNlIGFuZCB0
aGUgYW5jaG9yIHdpZHRoIHRvbwogICAgICAgICBMYXlvdXRVbml0IHRvdGFsV2lkdGg7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJFdmVu
dEhhbmRsZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW5kZXJFbWJl
ZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0Owog
ICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1Jl
Y3Q7Ci0gICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBy
dW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsKICAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KHBhaW50T2Zmc2V0LCBjb250ZW50UmVjdCwgaW5kaWNhdG9yUmVjdCwgcmVwbGFj
ZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkpCkBAIC0zNDks
NyArMzQ5LDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6c2V0VW5hdmFpbGFibAogICAg
IHJlcGFpbnQoKTsKIH0KIAotYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1l
bnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9h
dFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYg
cmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnQmIGZvbnQsIFRl
eHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3QKK2Jvb2wgUmVuZGVyRW1iZWRkZWRP
YmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0
b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dS
ZWN0LCBGb250Q2FzY2FkZSYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYgdGV4dFdpZHRoKSBj
b25zdAogewogICAgIGJvb2wgaW5jbHVkZXNBcnJvdyA9IHNob3VsZFVuYXZhaWxhYmxlUGx1Z2lu
TWVzc2FnZUJlQnV0dG9uKGRvY3VtZW50KCksIG1fcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24p
OwogCkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVw
bGFjZW1lbgogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodEJvbGQpOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKGZyYW1lKCkuc2V0dGluZ3MoKS5m
b250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KDEyKTsKLSAgICBmb250ID0gRm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOworICAgIGZvbnQg
PSBGb250Q2FzY2FkZShmb250RGVzY3JpcHRpb24sIDAsIDApOwogICAgIGZvbnQudXBkYXRlKDAp
OwogCiAgICAgcnVuID0gVGV4dFJ1bihtX3VuYXZhaWxhYmxlUGx1Z2luUmVwbGFjZW1lbnRUZXh0
KTsKQEAgLTM5MSw3ICszOTEsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckVtYmVkZGVkT2JqZWN0Ojp1
bmF2YWlsCiAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxh
Y2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRSZWN0IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7
CisgICAgRm9udENhc2NhZGUgZm9udDsKICAgICBUZXh0UnVuIHJ1bigiIiwgMCk7CiAgICAgZmxv
YXQgdGV4dFdpZHRoOwogICAgIGlmIChnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShhY2N1bXVs
YXRlZE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50VGV4dFJl
Y3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtNTgyLDcgKzU4Miw3IEBA
IGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWIKICAgICBGbG9hdFJlY3Qg
aW5kaWNhdG9yUmVjdDsKICAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBG
bG9hdFJlY3QgYXJyb3dSZWN0OwotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250
OwogICAgIFRleHRSdW4gcnVuKCIiKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgcmV0dXJu
IGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KEludFBvaW50KCksIGNvbnRlbnRSZWN0LCBpbmRp
Y2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBhcnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4
dFdpZHRoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3Nl
ZChib29sKTsKICAgICBib29sIGlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBN
b3VzZUV2ZW50JikgY29uc3Q7CiAgICAgYm9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0
b3IoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0
R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3Qm
IGNvbnRlbnRSZWN0LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFj
ZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnQmLCBUZXh0UnVuJiwgZmxv
YXQmIHRleHRXaWR0aCkgY29uc3Q7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRy
eShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVu
dFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVjdCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRl
eHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwgRm9udENhc2NhZGUmLCBUZXh0UnVuJiwgZmxv
YXQmIHRleHRXaWR0aCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCB1bmF2YWlsYWJsZVBsdWdpbklu
ZGljYXRvckJvdW5kcyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKIAogI2luY2x1ZGUgIkZpbGVMaXN0Lmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnBhaW50T2JqZWMKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5ZWRGaWxlbmFt
ZSA9IGZpbGVUZXh0VmFsdWUoKTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCku
Zm9udCgpOworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENh
c2NhZGUoKTsKICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bih0aGlz
LCBmb250LCBkaXNwbGF5ZWRGaWxlbmFtZSwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGlu
Z0V4cGFuc2lvbiwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJlY3Rpb25PdmVycmlkZSk7
CiAgICAgICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApAQCAtMjAxLDcgKzIw
MSw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVJbnQKICAgICAvLyAo
dXNpbmcgIjAiIGFzIHRoZSBub21pbmFsIGNoYXJhY3RlcikuCiAgICAgY29uc3QgVUNoYXIgY2hh
cmFjdGVyID0gJzAnOwogICAgIGNvbnN0IFN0cmluZyBjaGFyYWN0ZXJBc1N0cmluZyA9IFN0cmlu
ZygmY2hhcmFjdGVyLCAxKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7
CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcyBjb25zdF9jYXN0IGJ5IG1ha2lu
ZyBjb25zdHJ1Y3RUZXh0UnVuIHRha2UgYSBjb25zdCBSZW5kZXJPYmplY3QqLgogICAgIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sKiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wqPih0aGlzKTsKICAgICBmbG9hdCBtaW5EZWZhdWx0TGFiZWxXaWR0aCA9IGRlZmF1
bHRXaWR0aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBm
b250LCBjaGFyYWN0ZXJBc1N0cmluZywgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4
cGFuc2lvbikpOwpAQCAtMjcxLDkgKzI3MSw5IEBAIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6ZmlsZVRleHQKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50KCkuZmlsZXMoKSk7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIGlmIChpbnB1dEVsZW1lbnQoKS5maWxlcygpLT5sZW5ndGgoKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShpbnB1dEVsZW1l
bnQoKS5kaXNwbGF5U3RyaW5nKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgc3R5bGUoKS5mb250KCks
IFN0cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CisgICAgICAgIHJldHVybiBT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50KCkuZGlzcGxheVN0cmlu
ZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udENhc2NhZGUoKSwgU3RyaW5nVHJ1
bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKICNlbmRpZgotICAgIHJldHVybiB0aGVtZSgp
LmZpbGVMaXN0TmFtZUZvcldpZHRoKGlucHV0RWxlbWVudCgpLmZpbGVzKCksIHN0eWxlKCkuZm9u
dCgpLCBtYXhGaWxlbmFtZVdpZHRoKCksIGlucHV0RWxlbWVudCgpLm11bHRpcGxlKCkpOworICAg
IHJldHVybiB0aGVtZSgpLmZpbGVMaXN0TmFtZUZvcldpZHRoKGlucHV0RWxlbWVudCgpLmZpbGVz
KCksIHN0eWxlKCkuZm9udENhc2NhZGUoKSwgbWF4RmlsZW5hbWVXaWR0aCgpLCBpbnB1dEVsZW1l
bnQoKS5tdWx0aXBsZSgpKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBSZWY8UmVuZGVyU3R5bGU+IFJl
bmRlckZsb3dUaHJlYWQ6OmNyZWF0CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0VG9wKExlbmd0aCgw
LCBGaXhlZCkpOwogICAgIG5ld1N0eWxlLmdldCgpLnNldFdpZHRoKExlbmd0aCgxMDAsIFBlcmNl
bnQpKTsKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRIZWlnaHQoTGVuZ3RoKDEwMCwgUGVyY2VudCkp
OwotICAgIG5ld1N0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoMCk7CisgICAgbmV3U3R5bGUuZ2V0
KCkuZm9udENhc2NhZGUoKS51cGRhdGUobnVsbHB0cik7CiAgICAgcmV0dXJuIG5ld1N0eWxlOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4u
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnVsbFNjcmVlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIFJl
ZjxSZW5kZXJTdHlsZT4gY3JlYXRlRnVsbFNjcmVlbgogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQo
KS5zZXRaSW5kZXgoSU5UX01BWCk7CiAKICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0Rm9u
dERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0
KCkuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuZm9udENhc2Nh
ZGUoKS51cGRhdGUobnVsbHB0cik7CiAKICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0RGlz
cGxheShGTEVYKTsKICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0SnVzdGlmeUNvbnRlbnQo
SnVzdGlmeUNlbnRlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
R2VvbWV0cnlVdGlsaXRpZXMuaCIKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29sIFJlbmRlckltYWdl
OjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0CiAKICAgICAvLyB3ZSBoYXZlIGFuIGFsdCBhbmQgdGhl
IHVzZXIgbWVhbnQgaXQgKGl0cyBub3QgYSB0ZXh0IHdlIGludmVudGVkKQogICAgIGlmICghbV9h
bHRUZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5m
b250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpOwogICAgICAgICBJbnRTaXplIHBhZGRlZFRleHRTaXplKHBhZGRpbmdXaWR0aCArIHN0
ZDo6bWluKGNlaWxmKGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhp
cywgZm9udCwgbV9hbHRUZXh0LCBzdHlsZSgpKSkpLCBtYXhBbHRUZXh0V2lkdGgpLCBwYWRkaW5n
SGVpZ2h0ICsgc3RkOjptaW4oZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpLCBtYXhBbHRUZXh0
SGVpZ2h0KSk7CiAgICAgICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZS5leHBhbmRlZFRvKHBhZGRl
ZFRleHRTaXplKTsKICAgICB9CkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBkb2N1bWVudCgpLmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRUZXh0KTsKICAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIHN0eWxlKCkuY29sb3JTcGFjZSgpKTsKLSAgICAgICAgICAgICAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICAgICAgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CiAgICAg
ICAgICAgICAgICAgTGF5b3V0UG9pbnQgYWx0VGV4dE9mZnNldCA9IHBhaW50T2Zmc2V0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFs
d2F5c0NyZWF0ZUxpbgogICAgICAgICB8fCAocGFyZW50UmVuZGVySW5saW5lICYmIHBhcmVudFN0
eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUpCiAgICAgICAgIHx8IHN0eWxlKCkudmVy
dGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgIHx8IHN0eWxlKCkudGV4dEVtcGhhc2lz
TWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lCi0gICAgICAgIHx8IChjaGVja0ZvbnRzICYm
ICghcGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERl
c2NlbnRBbmRMaW5lR2FwKHN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgIHx8
IChjaGVja0ZvbnRzICYmICghcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChzdHlsZSgpLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAh
PSBzdHlsZSgpLmxpbmVIZWlnaHQoKSkpCiAgICAgICAgIHx8IChmbG93VGhyZWFkICYmIGZsb3dU
aHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOyAvLyBGSVhNRTogRW5hYmxlIHRoZSBv
cHRpbWl6YXRpb24gb25jZSB3ZSBtYWtlIG92ZXJmbG93IGNvbXB1dGF0aW9uIGZvciBjdWxsZWQg
aW5saW5lcyBpbiByZWdpb25zLgogCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgICAgICAvLyBIYXZlIHRvIGNoZWNrIHRoZSBm
aXJzdCBsaW5lIHN0eWxlIGFzIHdlbGwuCiAgICAgICAgIHBhcmVudFN0eWxlID0gJnBhcmVudCgp
LT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBSZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSA9IGZp
cnN0TGluZVN0eWxlKCk7Ci0gICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9ICFwYXJlbnRT
dHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExp
bmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgYWx3YXlzQ3Jl
YXRlTGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCku
aGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxp
Z24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQo
KSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKTsKICAgICB9CkBAIC01NzQsOCArNTc0LDggQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgaWYg
KHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBS
b290SW5saW5lQm94JiByb290Qm94ID0gcmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKS0+cm9v
dCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9
IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNv
bnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RC
b3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJTdHlsZS5m
b250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENh
c2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2Nh
ZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oZWln
aHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVy
KCktPngoKSAtIHJlbmRlckJveC5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIHJlbmRlckJveC53
aWR0aCgpICsgcmVuZGVyQm94Lmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSwgbG9naWNhbEhlaWdo
dCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94CiAgICAgICAgICAgICAgICAgZm9yIChJbmxp
bmVGbG93Qm94KiBjaGlsZExpbmUgPSByZW5kZXJJbmxpbmUuZmlyc3RMaW5lQm94KCk7IGNoaWxk
TGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGlsZExpbmUtPnJvb3Qo
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5lclN0eWxl
ID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpIDog
Y29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5s
b2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNv
bnRhaW5lclN0eWxlLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRk
UmVjdChGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxM
ZWZ0KCksCkBAIC02MTAsOCArNjEwLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3Vs
bGVkTGluZUJveAogICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjaGlsZFRleHQgPSBj
dXJyVGV4dC5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRleHQt
Pm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiBy
b290Qm94ID0gY2hpbGRUZXh0LT5yb290KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVy
LT5maXJzdExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5
bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhl
aWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOworICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9v
dEJveC5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBj
b250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udENhc2Nh
ZGUoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6
b250YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QoY2hp
bGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2lj
YWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC02MjIsNyArNjIyLDcgQEAgdm9p
ZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGNvdWxkIHVzZSBhIGhlbHBlciB0byBzaGFyZSB0aGVzZSB3aXRoIHRleHQg
cGF0aC4KICAgICAgICAgICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gaW5s
aW5lQm94LT5yb290KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRh
aW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5maXJzdExpbmVT
dHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2Fs
VG9wID0gcm9vdEJveC5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC5saW5lU3R5bGUoKS5mb250KCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gu
bG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0
cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRh
aW5lclN0eWxlLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVj
dChpbmxpbmVCb3gtPngoKSwgbG9naWNhbFRvcCwgaW5saW5lQm94LT5sb2dpY2FsV2lkdGgoKSwg
bG9naWNhbEhlaWdodCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTQgKzExMiwxNCBAQCB2
b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gbGlzdEl0ZW1zW2ldOwogICAgICAgICAgICAgU3RyaW5nIHRleHQ7Ci0gICAgICAgICAgICBG
b250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBGb250Q2FzY2FkZSBp
dGVtRm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHRleHQgPSBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3Vw
TGFiZWwoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpl
bGVtZW50KSkgewogICAgICAgICAgICAgICAgIHRleHQgPSBkb3duY2FzdDxIVE1MT3B0R3JvdXBF
bGVtZW50PigqZWxlbWVudCkuZ3JvdXBMYWJlbFRleHQoKTsKICAgICAgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAg
ICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGl0ZW1G
b250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFj
aW5nKCkpOworICAgICAgICAgICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2NhZGUoZCwgaXRlbUZv
bnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKICAgICAgICAgICAg
ICAgICBpdGVtRm9udC51cGRhdGUoZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9u
dFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgfQogCkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJhcihQYWludAogICAgIH0KIH0KIAotc3RhdGljIExh
eW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJlbmRlclN0
eWxlKiBpdGVtU3R5bGUsIEZvbnQgaXRlbUZvbnQsIExheW91dFJlY3QgaXRlbUJvdWRpbmdCb3gp
CitzdGF0aWMgTGF5b3V0U2l6ZSBpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KFRleHRSdW4gdGV4dFJ1
biwgUmVuZGVyU3R5bGUqIGl0ZW1TdHlsZSwgRm9udENhc2NhZGUgaXRlbUZvbnQsIExheW91dFJl
Y3QgaXRlbUJvdWRpbmdCb3gpCiB7CiAgICAgRVRleHRBbGlnbiBhY3R1YWxBbGlnbm1lbnQgPSBp
dGVtU3R5bGUtPnRleHRBbGlnbigpOwogICAgIC8vIEZJWE1FOiBGaXJlZm94IGRvZXNuJ3QgcmVz
cGVjdCBKVVNUSUZZLiBTaG91bGQgd2U/CkBAIC00MDAsMTQgKzQwMCwxNCBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dEZpbGxDb2xvcih0ZXh0Q29sb3IsIGNvbG9yU3BhY2UpOwogCiAgICAgVGV4dFJ1biB0ZXh0UnVu
KGl0ZW1UZXh0LCAwLCAwLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBpdGVtU3R5
bGUtPmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKGl0ZW1TdHlsZS0+dW5pY29kZUJpZGkoKSksIHRy
dWUsIFRleHRSdW46Ok5vUm91bmRpbmcpOwotICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLmZv
bnQoKTsKKyAgICBGb250Q2FzY2FkZSBpdGVtRm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsK
ICAgICBMYXlvdXRSZWN0IHIgPSBpdGVtQm91bmRpbmdCb3hSZWN0KHBhaW50T2Zmc2V0LCBsaXN0
SW5kZXgpOwogICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRSdW4sIGl0ZW1T
dHlsZSwgaXRlbUZvbnQsIHIpKTsKIAogICAgIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50Pigq
bGlzdEl0ZW1FbGVtZW50KSkgewogICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250
LmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgp
KTsKLSAgICAgICAgaXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwg
aXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2NhZGUo
ZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKICAg
ICAgICAgaXRlbUZvbnQudXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZv
bnRTZWxlY3RvcigpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKIAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC0xMzE0LDcgKzEzMTQsNyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgaWYgKG1fdGV4dC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZv
bnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KTsKICAgICBUZXh0UnVuIHRleHRSdW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0
aGlzLCBmb250LCBtX3RleHQsIHN0eWxlKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CkBAIC0xNTI5LDcgKzE1MjksNyBAQCB2
b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVmZXJyZWRMCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgRUxpc3RTdHlsZVR5cGUgdHlwZSA9IHN0eWxl
KCkubGlzdFN0eWxlVHlwZSgpOwpAQCAtMTc1Nyw3ICsxNzU3LDcgQEAgSW50UmVjdCBSZW5kZXJM
aXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBj
YXNlIEFzdGVyaXNrczoKICAgICAgICAgY2FzZSBGb290bm90ZXM6IHsKLSAgICAgICAgICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgVGV4dFJ1
biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX3RleHQs
IHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3Ji
aWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKICAgICAgICAgICAgIHJl
bGF0aXZlUmVjdCA9IEludFJlY3QoMCwgMCwgZm9udC53aWR0aChydW4pLCBmb250LmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODUxLDcgKzE4NTEsNyBA
QCBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAgICAgICAgIGNhc2Ug
VXJkdToKICAgICAgICAgICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7Ci0gICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUo
KS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVm
YXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICBpbnQgaXRlbVdpZHRoID0gZm9udC53aWR0
aChydW4pOwogICAgICAgICAgICAgVUNoYXIgc3VmZml4U3BhY2VbMl0gPSB7IGxpc3RNYXJrZXJT
dWZmaXgodHlwZSwgbV9saXN0SXRlbS52YWx1ZSgpKSwgJyAnIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzdHlsZURpZENoYW5n
ZShTdHlsCiAgICAgaWYgKG1faW5uZXJCbG9jaykgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRh
dGluZyB0aGUgYW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCiAgICAgICAgIGFkanVzdElubmVyU3R5
bGUoKTsKIAotICAgIGJvb2wgZm9udENoYW5nZWQgPSAhb2xkU3R5bGUgfHwgb2xkU3R5bGUtPmZv
bnQoKSAhPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBib29sIGZvbnRDaGFuZ2VkID0gIW9sZFN0eWxl
IHx8IG9sZFN0eWxlLT5mb250Q2FzY2FkZSgpICE9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAg
ICBpZiAoZm9udENoYW5nZWQpIHsKICAgICAgICAgdXBkYXRlT3B0aW9uc1dpZHRoKCk7CiAgICAg
ICAgIG1fbmVlZHNPcHRpb25zV2lkdGhVcGRhdGUgPSBmYWxzZTsKQEAgLTIyMiwxMyArMjIyLDEz
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCgKICAgICAgICAgICAg
IGlmIChSZW5kZXJTdHlsZSogb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkp
CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG9w
dGlvblN0eWxlLT50ZXh0SW5kZW50KCksIDApOwogICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKTsKICAgICAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93
VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZh
dWx0VGV4dFJ1bkZsYWdzKTsKICAgICAgICAgICAgICAgICBvcHRpb25XaWR0aCArPSBmb250Lndp
ZHRoKHJ1bik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtYXhPcHRpb25XaWR0aCA9IHN0
ZDo6bWF4KG1heE9wdGlvbldpZHRoLCBvcHRpb25XaWR0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
IXRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUo
KS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dU
cmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1
bHRUZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGggPSBzdGQ6Om1heCht
YXhPcHRpb25XaWR0aCwgZm9udC53aWR0aChydW4pKTsKICAgICAgICAgfQpAQCAtNTIzLDcgKzUy
Myw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUKICAgICBnZXRJ
dGVtQmFja2dyb3VuZENvbG9yKGxpc3RJbmRleCwgaXRlbUJhY2tncm91bmRDb2xvciwgaXRlbUhh
c0N1c3RvbUJhY2tncm91bmRDb2xvcik7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVt
ZW50LT5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGVsZW1lbnQtPmNv
bXB1dGVkU3R5bGUoKTsKLSAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBpdGVtQmFja2dyb3VuZENv
bG9yLCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCisgICAg
cmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwgc3R5bGUtPmZvbnRDYXNj
YWRlKCksIHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKICAgICAgICAgc3R5bGUtPmRp
c3BsYXkoKSA9PSBOT05FLCB0cnVlLCBzdHlsZS0+dGV4dEluZGVudCgpLCBzdHlsZS0+ZGlyZWN0
aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUtPnVuaWNvZGVCaWRpKCkpLAogICAgICAgICBpdGVtSGFz
Q3VzdG9tQmFja2dyb3VuZENvbG9yID8gUG9wdXBNZW51U3R5bGU6OkN1c3RvbUJhY2tncm91bmRD
b2xvciA6IFBvcHVwTWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yKSA6IG1lbnVTdHls
ZSgpOwogfQpAQCAtNTY0LDcgKzU2NCw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0
OjptZW51U3R5bGUKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IG1faW5uZXJC
bG9jayA/IG1faW5uZXJCbG9jay0+c3R5bGUoKSA6IHN0eWxlKCk7CiAgICAgSW50UmVjdCBhYnNC
b3VuZHMgPSBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpOwogICAg
IHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLAotICAgICAgICBzdHlsZVRvVXNlLmZvbnQoKSwgc3R5bGVU
b1VzZS52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9O
RSwKKyAgICAgICAgc3R5bGVUb1VzZS5mb250Q2FzY2FkZSgpLCBzdHlsZVRvVXNlLnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRpc3BsYXkoKSA9PSBOT05FLAogICAgICAgICBz
dHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dFBhcnQsIHN0eWxlVG9Vc2UudGV4dEluZGVudCgpLAogICAgICAgICBzdHlsZSgpLmRpcmVjdGlv
bigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSksIFBvcHVwTWVudVN0eWxlOjpE
ZWZhdWx0QmFja2dyb3VuZENvbG9yLAogICAgICAgICBQb3B1cE1lbnVTdHlsZTo6U2VsZWN0UG9w
dXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZShzdHlsZVRvVXNlLCBhYnNCb3VuZHMpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU0LDggKzI1NCw4IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6bGF5b3V0
KCkKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBydC0+c3R5bGUoKS5ydWJ5
UG9zaXRpb24oKSA9PSBSdWJ5UG9zaXRpb25JbnRlckNoYXJhY3RlcikgewogICAgICAgICAvLyBC
b3BvbW9mby4gV2UgbmVlZCB0byBtb3ZlIHRoZSBSZW5kZXJSdWJ5VGV4dCBvdmVyIHRvIHRoZSBy
aWdodCBzaWRlIGFuZCBjZW50ZXIgaXQKICAgICAgICAgLy8gdmVydGljYWxseSByZWxhdGl2ZSB0
byB0aGUgYmFzZS4KLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOwot
ICAgICAgICBmbG9hdCBkaXN0YW5jZUJldHdlZW5CYXNlID0gbWF4KGZvbnQubGV0dGVyU3BhY2lu
ZygpLCAyLjBmICogcnQtPnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpOwor
ICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsK
KyAgICAgICAgZmxvYXQgZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250LmxldHRlclNwYWNp
bmcoKSwgMi4wZiAqIHJ0LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oZWln
aHQoKSk7CiAgICAgICAgIHNldFdpZHRoKHdpZHRoKCkgKyBkaXN0YW5jZUJldHdlZW5CYXNlIC0g
Zm9udC5sZXR0ZXJTcGFjaW5nKCkpOwogICAgICAgICBpZiAoUmVuZGVyUnVieUJhc2UqIHJiID0g
cnVieUJhc2UoKSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVUb3AgPSAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgUG9wdXBNZW51
U3R5bGUgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1TdAogCiBQb3B1cE1lbnVTdHlsZSBSZW5kZXJT
ZWFyY2hGaWVsZDo6bWVudVN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5
bGUoc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5
bGUoKS5mb250KCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCisgICAgcmV0dXJu
IFBvcHVwTWVudVN0eWxlKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciksIHN0eWxlKCkuZm9udENhc2NhZGUoKSwgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSwKICAgICAgICAgc3R5bGUoKS5kaXNwbGF5KCkgPT0gTk9ORSwgdHJ1ZSwgc3R5bGUo
KS50ZXh0SW5kZW50KCksIHN0eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS51
bmljb2RlQmlkaSgpKSwgUG9wdXBNZW51U3R5bGU6OkN1c3RvbUJhY2tncm91bmRDb2xvcik7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw4IEBAIGJvb2wgUmVuZGVyVGV4dDo6aXNUZXh0RnJh
Z21lbnQoKSBjb25zdAogYm9vbCBSZW5kZXJUZXh0Ojpjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5T
eW1ib2woKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0
eWxlKCk7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZS5mb250KCkuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKHN0eWxlLmZvbnQoKS51c2VCYWNr
c2xhc2hBc1llblN5bWJvbCgpKQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uID0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBpZiAo
c3R5bGUuZm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBSZW5kZXJUZXh0
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZgogICAgIGlmICghb2xkU3R5bGUpIHsKICAgICAgICAg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJv
bCgpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7
Ci0gICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9udCgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KCkgIT0gbmV3U3R5bGUuZm9udCgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkpIHsKKyAgICB9
IGVsc2UgaWYgKG9sZFN0eWxlLT5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KCkgIT0gbmV3U3R5bGUuZm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKSB7
CiAgICAgICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBjb21wdXRlVXNlQmFja3NsYXNo
QXNZZW5TeW1ib2woKTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSB0cnVlOwogICAgIH0KQEAg
LTQ1MSw3ICs0NTEsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KElu
CiAgICAgcmV0dXJuIGJveC5yb290KCkuY29tcHV0ZUNhcmV0UmVjdChsZWZ0LCBjYXJldFdpZHRo
LCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRl
clRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmIGYsIGludCBzdGFydCwgaW50IGxlbiwg
ZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNv
bnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyog
Z2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGlm
IChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PigqdGhpcykp
IHsKICAgICAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQmIGNvbWJpbmVUZXh0ID0gZG93bmNh
c3Q8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKTsKQEAgLTU0NCw3ICs1NDQsNyBAQCB2b2lkIFJl
bmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGZsb2F0CiAgICAgQVNTRVJUKG1fdGV4dCk7CiAg
ICAgU3RyaW5nSW1wbCYgdGV4dCA9ICptX3RleHQuaW1wbCgpOwogICAgIGlmICh0ZXh0WzBdID09
ICcgJyB8fCAodGV4dFswXSA9PSAnXG4nICYmICFzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkgfHwg
dGV4dFswXSA9PSAnXHQnKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS5mb250
KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICAgICAgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25v
cmVzIGZpcnN0LWxpbmUuCiAgICAgICAgIGlmIChzdHJpcEZyb250U3BhY2VzKSB7CiAgICAgICAg
ICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsKICAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lk
dGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQs
ICZzcGFjZSwgMSwgc3R5bGUpKTsKQEAgLTU2MCw3ICs1NjAsNyBAQCB2b2lkIFJlbmRlclRleHQ6
OnRyaW1tZWRQcmVmV2lkdGhzKGZsb2F0CiAKICAgICAvLyBDb21wdXRlIG91ciBtYXggd2lkdGhz
IGJ5IHNjYW5uaW5nIHRoZSBzdHJpbmcgZm9yIG5ld2xpbmVzLgogICAgIGlmIChoYXNCcmVhaykg
ewotICAgICAgICBjb25zdCBGb250JiBmID0gc3R5bGUuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBp
Z25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmID0gc3R5bGUu
Zm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgogICAgICAg
ICBib29sIGZpcnN0TGluZSA9IHRydWU7CiAgICAgICAgIGJlZ2luTWF4VyA9IG1heFc7CiAgICAg
ICAgIGVuZE1heFcgPSBtYXhXOwpAQCAtNjM3LDEzICs2MzcsMTMgQEAgdm9pZCBSZW5kZXJUZXh0
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgICAgICBtX2tub3duVG9IYXZlTm9PdmVyZmxv
d0FuZE5vRmFsbGJhY2tGb250cyA9IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgaHlw
aGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMg
aW5saW5lIGZsb2F0IGh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJl
ci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0
eWxlKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0
KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBT
dHJpbmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVt
U3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCitzdGF0
aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFN0cmluZ1ZpZXcg
d29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIHVuc2lnbmVkIG1pbmltdW1TdWZmaXhMZW5n
dGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBzdWZmaXhT
dGFydCA9IDA7CiAgICAgaWYgKHdvcmQubGVuZ3RoKCkgPD0gbWluaW11bVN1ZmZpeExlbmd0aCkK
QEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsCiAgICAgbV9oYXNFbmRXUyA9IGZhbHNlOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgp
OyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZp
cnN0LWxpbmUuCiAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBmb250LndvcmRTcGFjaW5nKCk7CiAg
ICAgaW50IGxlbiA9IHRleHRMZW5ndGgoKTsKICAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJl
YWtJdGVyYXRvcihtX3RleHQsIHN0eWxlLmxvY2FsZSgpLCBtYXBMaW5lQnJlYWtUb0l0ZXJhdG9y
TW9kZShzdHlsZS5saW5lQnJlYWsoKSkpOwpAQCAtMTIxNSwxMCArMTIxNSwxMCBAQCBmbG9hdCBS
ZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1CiAgICAgICAgIGxlbiA9IHRleHRMZW5n
dGgoKSAtIGZyb207CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gZmlyc3RM
aW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7Ci0gICAgcmV0dXJuIHdpZHRoKGZyb20s
IGxlbiwgbGluZVN0eWxlLmZvbnQoKSwgeFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxv
dyk7CisgICAgcmV0dXJuIHdpZHRoKGZyb20sIGxlbiwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCks
IHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogfQogCi1mbG9hdCBSZW5kZXJU
ZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmIGYsIGZs
b2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlclRleHQ6Ondp
ZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZs
b2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBBU1NFUlQoZnJvbSAr
IGxlbiA8PSB0ZXh0TGVuZ3RoKCkpOwogICAgIGlmICghdGV4dExlbmd0aCgpKQpAQCAtMTIyNiw3
ICsxMjI2LDcgQEAgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogCiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKICAgICBmbG9hdCB3
OwotICAgIGlmICgmZiA9PSAmc3R5bGUuZm9udCgpKSB7CisgICAgaWYgKCZmID09ICZzdHlsZS5m
b250Q2FzY2FkZSgpKSB7CiAgICAgICAgIGlmICghc3R5bGUucHJlc2VydmVOZXdsaW5lKCkgJiYg
IWZyb20gJiYgbGVuID09IHRleHRMZW5ndGgoKSAmJiAoIWdseXBoT3ZlcmZsb3cgfHwgIWdseXBo
T3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpKSB7CiAgICAgICAgICAgICBpZiAoZmFsbGJhY2tGb250
cykgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbHlwaE92ZXJmbG93KTsKQEAgLTE1NTYsNyAr
MTU1Niw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsZUZvbnQKIHsKICAg
ICBpZiAoaXNBbGxBU0NJSSgpIHx8IG1fdGV4dC5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKSA9PSBGb250OjpTaW1wbGU7CisgICAgcmV0dXJuIEZvbnRDYXNjYWRlOjpj
aGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSkgPT0gRm9udENh
c2NhZGU6OlNpbXBsZTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Ojptb21lbnRhcmlseVJldmVhbExh
c3RUeXBlZENoYXJhY3Rlcih1bnNpZ25lZCBvZmZzZXRBZnRlckxhc3RUeXBlZENoYXJhY3RlcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCktPmxlbmd0aCgpOyB9IC8vIG5vbiB2aXJ0dWFsIGlt
cGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9pZCBwb3NpdGlvbkxpbmVCb3goSW5saW5l
VGV4dEJveCYpOwogCi0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4sIGNvbnN0IEZvbnQmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owor
ICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25z
dCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3Ms
IGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAKICAgICBmbG9h
dCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhp
dFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBmYWxzZTsgfQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3Qg
Rm9udCYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVy
U3R5bGUmKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2Fk
ZSYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVyU3R5
bGUmKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxs
QVNDSUk7IH0KICAgICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMiArMTc0LDEyIEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OmhpdElubmVyVGV4dEVsZW0KIGZsb2F0IFJlbmRlclRleHRD
b250cm9sOjpnZXRBdmVyYWdlQ2hhcldpZHRoKCkKIHsKICAgICBmbG9hdCB3aWR0aDsKLSAgICBp
ZiAoc3R5bGUoKS5mb250KCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZSh3aWR0aCkp
CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5mYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZh
aWxhYmxlKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIHdpZHRoOwogCiAgICAgY29uc3QgVUNoYXIg
Y2ggPSAnMCc7CiAgICAgY29uc3QgU3RyaW5nIHN0ciA9IFN0cmluZygmY2gsIDEpOwotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN0ciwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbik7CiAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogICAg
IHJldHVybiBmb250LndpZHRoKHRleHRSdW4pOwpAQCAtMTg5LDcgKzE4OSw3IEBAIGZsb2F0IFJl
bmRlclRleHRDb250cm9sOjpzY2FsZUVtVG9Vbml0cygKIHsKICAgICAvLyBUaGlzIG1hdGNoZXMg
dGhlIHVuaXRzUGVyRW0gdmFsdWUgZm9yIE1TIFNoZWxsIERsZyBhbmQgQ291cmllciBOZXcgZnJv
bSB0aGUgImhlYWQiIGZvbnQgdGFibGUuCiAgICAgZmxvYXQgdW5pdHNQZXJFbSA9IDIwNDguMGY7
Ci0gICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLmZvbnQoKS5zaXplKCkgKiB4IC8gdW5pdHNQZXJF
bSk7CisgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpICogeCAv
IHVuaXRzUGVyRW0pOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjb21wdXRlSW50cmlu
c2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQm
IG1heExvZ2ljYWxXaWR0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBmbG9hdCBSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZTo6Z2V0QXZlCiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0
aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8g
b2YgQ291cmllciBOZXcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBJRSwgRmly
ZWZveCBhbmQgU2FmYXJpIFdpbi4KICAgICAvLyAxMjI5IGlzIHRoZSBhdmdDaGFyV2lkdGggdmFs
dWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIENvdXJpZXIgTmV3LgotICAgIGlmIChzdHlsZSgpLmZv
bnQoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKKyAgICBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBy
ZXR1cm4gc2NhbGVFbVRvVW5pdHMoMTIyOSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyArMzE5LDcg
QEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdgogICAgIC8vIG9mIE1T
IFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNh
ZmFyaSBXaW4gYW5kCiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRl
ZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCiAgICAgLy8gOTAxIGlzIHRoZSBhdmdD
aGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KLSAgICBp
ZiAoc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCisgICAg
aWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRl
IikKICAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDkwMSk7CiAjZW5kaWYKIApAQCAtMzM4
LDE1ICszMzgsMTUgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Ogog
ICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKIAogI2lmICFQTEFURk9STShJT1MpCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHlsZSgpLmZvbnQoKS5maXJzdEZhbWlseSgp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgp
LmZpcnN0RmFtaWx5KCk7CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVs
dCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8gb2YgTVMgU2hl
bGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJp
IFdpbiBhbmQKICAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVs
dCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KICAgICAvLyA0MDI3IGlzIHRoZSAoeE1heCAt
IHhNaW4pIHZhbHVlIGluIHRoZSAiaGVhZCIgZm9udCB0YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgog
ICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBtYXhDaGFyV2lkdGgg
PSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKLSAgICBlbHNlIGlmIChzdHlsZSgpLmZvbnQoKS5oYXNW
YWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSkKLSAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0
eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpKTsKKyAgICBlbHNl
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkpCisg
ICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOwogI2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBp
bnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzEx
NCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNl
IEJ1dHRvblBhcnQ6IHsKICAgICAgICAgLy8gQm9yZGVyCiAgICAgICAgIExlbmd0aEJveCBib3Jk
ZXJCb3goc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwgc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCBz
dHlsZS5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSk7Ci0gICAg
ICAgIGJvcmRlckJveCA9IG1fdGhlbWUtPmNvbnRyb2xCb3JkZXIocGFydCwgc3R5bGUuZm9udCgp
LCBib3JkZXJCb3gsIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIGJvcmRlckJveCA9
IG1fdGhlbWUtPmNvbnRyb2xCb3JkZXIocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgYm9yZGVy
Qm94LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpZiAoYm9yZGVyQm94LnRvcCgp
LnZhbHVlKCkgIT0gc3RhdGljX2Nhc3Q8aW50PihzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSkgewog
ICAgICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1ZSgpKQogICAgICAgICAgICAgICAg
IHN0eWxlLnNldEJvcmRlclRvcFdpZHRoKGJvcmRlckJveC50b3AoKS52YWx1ZSgpKTsKQEAgLTE0
Myw3ICsxNDMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBQYWRkaW5nCi0gICAgICAgIExlbmd0aEJveCBwYWRkaW5n
Qm94ID0gbV90aGVtZS0+Y29udHJvbFBhZGRpbmcocGFydCwgc3R5bGUuZm9udCgpLCBzdHlsZS5w
YWRkaW5nQm94KCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aEJveCBw
YWRkaW5nQm94ID0gbV90aGVtZS0+Y29udHJvbFBhZGRpbmcocGFydCwgc3R5bGUuZm9udENhc2Nh
ZGUoKSwgc3R5bGUucGFkZGluZ0JveCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAg
ICBpZiAocGFkZGluZ0JveCAhPSBzdHlsZS5wYWRkaW5nQm94KCkpCiAgICAgICAgICAgICBzdHls
ZS5zZXRQYWRkaW5nQm94KHBhZGRpbmdCb3gpOwogCkBAIC0xNTQsMjUgKzE1NCwyNSBAQCB2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgICAgIC8vIFdpZHRoIC8g
SGVpZ2h0CiAgICAgICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGhlcmUgYXJlIGFmZmVjdGVk
IGJ5IHRoZSB6b29tLgogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBp
dCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCi0gICAgICAg
IExlbmd0aFNpemUgY29udHJvbFNpemUgPSBtX3RoZW1lLT5jb250cm9sU2l6ZShwYXJ0LCBzdHls
ZS5mb250KCksIExlbmd0aFNpemUoc3R5bGUud2lkdGgoKSwgc3R5bGUuaGVpZ2h0KCkpLCBzdHls
ZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhTaXplIGNvbnRyb2xTaXplID0gbV90
aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgTGVuZ3RoU2l6ZShz
dHlsZS53aWR0aCgpLCBzdHlsZS5oZWlnaHQoKSksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAg
ICAgICAgIGlmIChjb250cm9sU2l6ZS53aWR0aCgpICE9IHN0eWxlLndpZHRoKCkpCiAgICAgICAg
ICAgICBzdHlsZS5zZXRXaWR0aChjb250cm9sU2l6ZS53aWR0aCgpKTsKICAgICAgICAgaWYgKGNv
bnRyb2xTaXplLmhlaWdodCgpICE9IHN0eWxlLmhlaWdodCgpKQogICAgICAgICAgICAgc3R5bGUu
c2V0SGVpZ2h0KGNvbnRyb2xTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgLy8gTWluLVdpZHRoIC8gTWluLUhlaWdodAotICAgICAgICBMZW5ndGhTaXplIG1pbkNvbnRy
b2xTaXplID0gbV90aGVtZS0+bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnQoKSwg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6
ZSA9IG1fdGhlbWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgp
LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpZiAobWluQ29udHJvbFNpemUud2lk
dGgoKSAhPSBzdHlsZS5taW5XaWR0aCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0TWluV2lkdGgo
bWluQ29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChtaW5Db250cm9sU2l6ZS5oZWln
aHQoKSAhPSBzdHlsZS5taW5IZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxlLnNldE1pbkhlaWdo
dChtaW5Db250cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8v
IEZvbnQKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250ID0gbV90aGVtZS0+Y29u
dHJvbEZvbnQocGFydCwgc3R5bGUuZm9udCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwotICAg
ICAgICBpZiAoY29udHJvbEZvbnQgIT0gc3R5bGUuZm9udCgpLmZvbnREZXNjcmlwdGlvbigpKSB7
CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRyb2xG
b250KHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7Cisg
ICAgICAgIGlmIChjb250cm9sRm9udCAhPSBzdHlsZS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlw
dGlvbigpKSB7CiAgICAgICAgICAgICAvLyBOb3cgdXBkYXRlIG91ciBmb250LgogICAgICAgICAg
ICAgaWYgKHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihjb250cm9sRm9udCkpCi0gICAgICAgICAg
ICAgICAgc3R5bGUuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgICAgICAgICBzdHlsZS5mb250
Q2FzY2FkZSgpLnVwZGF0ZSgwKTsKICAgICAgICAgfQogICAgICAgICAvLyBSZXNldCBvdXIgbGlu
ZS1oZWlnaHQKICAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBTdHJpbmcgUmVuZGVyVGhlbWU6
OmZpbGVMaXN0RGVmYXVsdExhYmVsCiAgICAgcmV0dXJuIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3Rl
ZExhYmVsKCk7CiB9CiAKLVN0cmluZyBSZW5kZXJUaGVtZTo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgo
Y29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgsIGJv
b2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CitTdHJpbmcgUmVuZGVyVGhlbWU6OmZpbGVM
aXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKIHsK
ICAgICBpZiAod2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzksNyArMjM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5U3BhY2VP
clJldHVybigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIFN0cmluZyBm
aWxlTGlzdERlZmF1bHRMYWJlbChib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNv
bnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0Kiwg
Y29uc3QgRm9udENhc2NhZGUmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQp
IGNvbnN0OwogCiAgICAgZW51bSBGaWxlVXBsb2FkRGVjb3JhdGlvbnMgeyBTaW5nbGVGaWxlLCBN
dWx0aXBsZUZpbGVzIH07CiAgICAgdmlydHVhbCBib29sIHBhaW50RmlsZVVwbG9hZEljb25EZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIC8qaW5wdXRSZW5kZXJlciovLCBjb25zdCBSZW5k
ZXJPYmplY3QmIC8qYnV0dG9uUmVuZGVyZXIqLywgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIHsgcmV0dXJuIHRydWU7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogI2ltcG9ydCAiRGF0ZUNvbXBvbmVudHMu
aCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0j
aW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0
ICJHcmFkaWVudC5oIgpAQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdFNlbGVj
dExpc3RCdXR0b25TdHlsZSgKICAgICAKIGNsYXNzIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGll
bnQgOiBwdWJsaWMgTWVhc3VyZVRleHRDbGllbnQgewogcHVibGljOgotICAgIFJlbmRlclRoZW1l
TWVhc3VyZVRleHRDbGllbnQoY29uc3QgRm9udCYgZm9udCwgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKKyAgICBSZW5kZXJUaGVtZU1lYXN1cmVU
ZXh0Q2xpZW50KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBSZW5kZXJPYmplY3QmIHJlbmRlck9i
amVjdCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgICAgICA6IG1fZm9udChmb250KQog
ICAgICAgICAsIG1fcmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCkKICAgICAgICAgLCBtX3N0eWxl
KHN0eWxlKQpAQCAtNTU3LDcgKzU1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZm9u
dC53aWR0aChydW4pOwogICAgIH0KIHByaXZhdGU6Ci0gICAgY29uc3QgRm9udCYgbV9mb250Owor
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgUmVuZGVyT2JqZWN0JiBtX3JlbmRl
ck9iamVjdDsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9zdHlsZTsKIH07CkBAIC01NzcsNyAr
NTc3LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bAogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBFbmZvcmNlIHRoZSB3aWR0aCBhbmQgc2V0IHRoZSBib3gtc2l6
aW5nIHRvIGNvbnRlbnQtYm94IHRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBwYWRkaW5nLgotICAg
IEZvbnQgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBGb250Q2FzY2FkZSBmb250ID0gc3R5bGUu
Zm9udENhc2NhZGUoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXRF
bGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkgJiYgIXJlbmRlcmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFNuYXBzaG90dGVkUGx1Z2luT3ZlcmxheShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lk
dGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxl
RmlsZXNBbGxvd2VkKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlz
dE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHdp
ZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEZs
b2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBpbnB1dFJl
bmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QmIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0
JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04MTcsNyArODE3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9s
UwogICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwogCiAgICAgaWYgKHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
KQotICAgICAgICBzdHlsZS5mb250KCkudXBkYXRlKDApOworICAgICAgICBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnVwZGF0ZSgwKTsKIH0KIAogTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29u
dHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKQEAgLTE5OTcs
NyArMTk5Nyw3IEBAIE5TVGV4dEZpZWxkQ2VsbCogUmVuZGVyVGhlbWVNYWM6OnRleHRGaWUKICAg
ICByZXR1cm4gbV90ZXh0RmllbGQuZ2V0KCk7CiB9CiAKLVN0cmluZyBSZW5kZXJUaGVtZU1hYzo6
ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250
JiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CitTdHJp
bmcgUmVuZGVyVGhlbWVNYWM6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBm
aWxlTGlzdCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3QKIHsKICAgICBpZiAod2lkdGggPD0gMCkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDEsNyArOTAxLDcgQEAgdm9pZCBS
b290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogCiAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGJveExpbmVTdHlsZSA9IGJveC5saW5lU3R5bGUoKTsKICAgICBpZiAodXNlZEZvbnRzICYm
ICF1c2VkRm9udHMtPmlzRW1wdHkoKSAmJiAoaW5jbHVkZUZvbnQgfHwgKGJveExpbmVTdHlsZS5s
aW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkpIHsKLSAgICAgICAg
dXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkp
OworICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVzZWRG
b250cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcyA9IHVzZWRGb250cy0+YXQoaSktPmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAgICBp
bnQgdXNlZEZvbnRBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKCkpOwpA
QCAtMTAxNyw3ICsxMDE3LDcgQEAgTGF5b3V0VW5pdCBSb290SW5saW5lQm94Ojp2ZXJ0aWNhbFBv
c2l0aQogICAgIAogICAgIGlmICh2ZXJ0aWNhbEFsaWduICE9IEJBU0VMSU5FKSB7CiAgICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRMaW5lU3R5bGUgPSBmaXJzdExpbmUgPyBwYXJlbnQt
PmZpcnN0TGluZVN0eWxlKCkgOiBwYXJlbnQtPnN0eWxlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBwYXJlbnRMaW5lU3R5bGUuZm9udCgpOworICAgICAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHBhcmVudExpbmVTdHlsZS5mb250Q2FzY2FkZSgpOwogICAgICAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAgIGlu
dCBmb250U2l6ZSA9IGZvbnQucGl4ZWxTaXplKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg0LDE3ICsxODQsMTcgQEAgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdHlsZS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgbGluZXMgaGF2ZSBtZXRyaWNzIGJhc2Vk
IHB1cmVseSBvbiB0aGUgcHJpbWFyeSBmb250LgotICAgIGF1dG8mIHByaW1hcnlGb250RGF0YSA9
IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBhdXRvJiBwcmltYXJ5Rm9udERh
dGEgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGlmIChwcmlt
YXJ5Rm9udERhdGEuaXNMb2FkaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZs
b3cpKSB7CiAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpIHx8IHRleHRS
ZW5kZXJlci5pc0NvdW50ZXIoKSB8fCB0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpIHx8IHRleHRSZW5k
ZXJlci5pc1RleHRGcmFnbWVudCgpCiAgICAgICAgICAgICB8fCB0ZXh0UmVuZGVyZXIuaXNTVkdJ
bmxpbmVUZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzdHls
ZS5mb250KCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIudGV4dCgpKSkgIT0gRm9udDo6
U2ltcGxlKQorICAgICAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5jb2RlUGF0aChUZXh0UnVu
KHRleHRSZW5kZXJlci50ZXh0KCkpKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWNhblVzZUZvclRleHQodGV4dFJlbmRlcmVy
LCBwcmltYXJ5Rm9udERhdGEpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5
b3V0IHsKIAogRmxvd0NvbnRlbnRzOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKQotICAgIDogZm9udChzdHlsZS5mb250KCkpCisgICAgOiBmb250KHN0eWxlLmZvbnRDYXNj
YWRlKCkpCiAgICAgLCB0ZXh0QWxpZ24oc3R5bGUudGV4dEFsaWduKCkpCiAgICAgLCBjb2xsYXBz
ZVdoaXRlc3BhY2Uoc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAgICAgLCBwcmVzZXJ2ZU5l
d2xpbmUoc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
Rmxvd0NvbnRlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAjZGVmaW5lIFNpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHNfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRv
ci5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoK
ICAgICBzdHJ1Y3QgU3R5bGUgewogICAgICAgICBleHBsaWNpdCBTdHlsZShjb25zdCBSZW5kZXJT
dHlsZSYpOwogCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQ7CisgICAgICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250OwogICAgICAgICBFVGV4dEFsaWduIHRleHRBbGlnbjsKICAgICAgICAgYm9v
bCBjb2xsYXBzZVdoaXRlc3BhY2U7CiAgICAgICAgIGJvb2wgcHJlc2VydmVOZXdsaW5lOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3
ICs3MCw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICBi
b29sIGRlYnVnQm9yZGVyc0VuYWJsZWQgPSBmbG93LmZyYW1lKCkuc2V0dGluZ3MoKS5zaW1wbGVM
aW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0ID0gKnBhaW50SW5mby5jb250ZXh0OwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2Fk
ZSgpOwogICAgIFRleHRQYWludFN0eWxlIHRleHRQYWludFN0eWxlID0gY29tcHV0ZVRleHRQYWlu
dFN0eWxlKGZsb3cuZnJhbWUoKSwgc3R5bGUsIHBhaW50SW5mbyk7CiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIHRleHRQYWludFN0eWxlLnN0cm9rZVdp
ZHRoID4gMCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDggKzEyMCw4IEBAIFJ1blJlc29sdmVyOjpSdW5SZXNvbHZlcihjb25zdCBS
ZW5kZXJCbG8KICAgICAsIG1fbGluZUhlaWdodChsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpCiAg
ICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5lRnJvbUZsb3coZmxvdykpCiAgICAgLCBtX2JvcmRlckFu
ZFBhZGRpbmdCZWZvcmUoZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpCi0gICAgLCBtX2Fz
Y2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpCi0gICAgLCBt
X2Rlc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSkKKyAg
ICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpCisgICAgLCBtX2Rlc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1l
dHJpY3MoKS5kZXNjZW50KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcg
KzE2NCw3IEBAIGJvb2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGF2
ZXJhZ2VTaXplKTsKICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKGF1dG9TaXppbmdO
b2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7Cisg
ICAgICAgICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRv
Y3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAg
ICAgIHRleHQtPnBhcmVudCgpLT5zZXRTdHlsZShzdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogcGFyZW50UmVuZGVyZXIgPSB0
ZXh0LT5wYXJlbnQoKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFRleHRBdXRvU2l6aW5nVmFs
dWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICBpZiAobGlzdE1hcmtlclJlbmRlcmVyLT5p
c0xpc3RNYXJrZXIoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKGxpc3RNYXJrZXJSZW5kZXJlci0+c3R5bGUo
KSk7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwotICAgICAgICAgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKGF1dG9TaXppbmdO
b2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7Cisg
ICAgICAgICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2Rl
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAg
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGlzdE1hcmtlcj4oKmxpc3RNYXJrZXJSZW5kZXJl
cikuc2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIFRleHRBdXRvU2l6aW5nVmFsdWU6OmFk
anVzdE5vZGVTaXplCiAgICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldExpbmVIZWln
aHQoTGVuZ3RoKGxpbmVIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAgICAgICAgICAgbmV3UGFyZW50
U3R5bGUtPnNldFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhlaWdodExlbmd0aCk7CiAgICAgICAg
ICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwotICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250KCkudXBkYXRlKGF1dG9T
aXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3Io
KSk7CisgICAgICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRl
KGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CiAgICAgICAgICAgICAgICAgcGFyZW50UmVuZGVyZXItPnNldFN0eWxlKG5ld1Bh
cmVudFN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yMjAsNyArMjIwLDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpyZXNldCgpCiAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG9yaWdpbmFsU2l6ZSk7CiAg
ICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gY2xvbmVSZW5kZXJTdHlsZVdp
dGhTdGF0ZSh0ZXh0LT5zdHlsZSgpKTsKICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRl
KGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1Np
emluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3Rvcigp
KTsKICAgICAgICAgICAgIHRleHQtPnBhcmVudCgpLT5zZXRTdHlsZShzdHlsZS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICAvLyBSZXNldCB0aGUgbGluZSBoZWlnaHQgb2Yg
dGhlIHBhcmVudC4KQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFRleHRBdXRvU2l6aW5nVmFsdWU6
OnJlc2V0KCkKICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3UGFyZW50U3R5bGUg
PSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHBhcmVudFN0eWxlKTsKICAgICAgICAgICAgIG5l
d1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0KG9yaWdpbmFsTGluZUhlaWdodCk7CiAgICAgICAg
ICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
Ci0gICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9k
ZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdO
b2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAg
ICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+c2V0U3R5bGUobmV3UGFyZW50U3R5bGUucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0UGFpbnRlcjo6VGV4dFBhaW50ZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0IEZvbnQmIGZvbnQsCitUZXh0UGFpbnRl
cjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LAogICAgIGludCBzdGFydFBvc2l0aW9uSW5UZXh0UnVuLCBpbnQgZW5kUG9z
aXRpb25JblRleHRCb3hTdHJpbmcsIGludCBsZW5ndGgsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1w
aGFzaXNNYXJrLCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0LCBUZXh0UnVuJiB0ZXh0
UnVuLAogICAgIEZsb2F0UmVjdCYgYm94UmVjdCwgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50
IGVtcGhhc2lzTWFya09mZnNldCwgY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdywgY29uc3Qg
U2hhZG93RGF0YSogc2VsZWN0aW9uU2hhZG93LAogICAgIGJvb2wgdGV4dEJveElzSG9yaXpvbnRh
bCwgVGV4dFBhaW50U3R5bGUmIHRleHRQYWludFN0eWxlLCBUZXh0UGFpbnRTdHlsZSYgc2VsZWN0
aW9uUGFpbnRTdHlsZSkKQEAgLTU2LDcgKzU2LDcgQEAgVGV4dFBhaW50ZXI6OlRleHRQYWludGVy
KEdyYXBoaWNzQ29udGV4dAogewogfQogCi1zdGF0aWMgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLAorc3RhdGlj
IHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBlbXBoYXNpc01hcmssCiAgICAgaW50IGVtcGhhc2lzTWFya09mZnNldCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IGludCBmcm9tLCBjb25zdCBpbnQgdG8pCiB7CiAg
ICAgaWYgKGVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCkBAIC0xMTMsNyArMTEzLDcgQEAgU2hhZG93
QXBwbGllcjo6flNoYWRvd0FwcGxpZXIoKQogICAgICAgICBtX2NvbnRleHQuY2xlYXJTaGFkb3co
KTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKK3N0YXRpYyB2b2lkIHBhaW50VGV4dFdpdGhT
aGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJr
LAogICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9m
ZnNldCwgaW50IHRydW5jYXRpb25Qb2ludCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywg
Ym9vbCBzdHJva2VkLCBib29sIGhvcml6b250YWwpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRQYWludGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
c3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb24oYwogCiBjbGFzcyBUZXh0UGFp
bnRlciB7CiBwdWJsaWM6Ci0gICAgVGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBj
b25zdCBGb250JiwKKyAgICBUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmLCBib29sIHBhaW50
U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0
IEZvbnRDYXNjYWRlJiwKICAgICBpbnQgc3RhcnRQb3NpdGlvbkluVGV4dFJ1biwgaW50IGVuZFBv
c2l0aW9uSW5UZXh0Qm94U3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGVt
cGhhc2lzTWFyaywgUmVuZGVyQ29tYmluZVRleHQqLAogICAgIFRleHRSdW4mLCBGbG9hdFJlY3Qm
IGJveFJlY3QsIEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBlbXBoYXNpc01hcmtPZmZzZXQs
IGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIHNlbGVjdGlv
blNoYWRvdywKICAgICBib29sIHRleHRCb3hJc0hvcml6b250YWwsIFRleHRQYWludFN0eWxlJiBu
b25TZWxlY3Rpb25QYWludFN0eWxlLCBUZXh0UGFpbnRTdHlsZSYgc2VsZWN0aW9uUGFpbnRTdHls
ZSk7CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU2hhZG93RGF0YSogbV9z
ZWxlY3Rpb25TaGFkb3c7CiAgICAgYm9vbCBtX3BhaW50U2VsZWN0ZWRUZXh0T25seTsKICAgICBi
b29sIG1fcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5OwotICAgIGNvbnN0IEZvbnQmIG1fZm9u
dDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGludCBtX3N0YXJ0UG9zaXRp
b25JblRleHRSdW47CiAgICAgaW50IG1fZW5kUG9zaXRpb25JblRleHRSdW47CiAgICAgaW50IG1f
bGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250
ZXh0SW5saW5lSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVh
ZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBpbmxpbmUgdm9pZCB1
cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVuZGVyQ291bnRlcj4o
cmVuZGVyVGV4dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxvYXQgbWVhc3VyZUh5
cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250LCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQoraW5saW5lIGZsb2F0
IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7
CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVu
ZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZhbGxi
YWNrRm9udHMpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0
KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmIGZvbnQsIGZs
b2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBs
YXlvdXQgPSAwKQorQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4
dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
ZmxvYXQgeFBvcywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQq
IGxheW91dCA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dC0+c3R5
bGUoKTsKIApAQCAtNTAxLDcgKzUwMSw3IEBAIEFMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRo
KFJlbmRlclRleHQKICAgICAgICAgcmV0dXJuIHRleHQtPndpZHRoKGZyb20sIGxlbiwgZm9udCwg
eFBvcywgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KTsKIAogICAgIGlmIChsYXlvdXQp
Ci0gICAgICAgIHJldHVybiBGb250Ojp3aWR0aCgqbGF5b3V0LCBmcm9tLCBsZW4sICZmYWxsYmFj
a0ZvbnRzKTsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlOjp3aWR0aCgqbGF5b3V0LCBmcm9t
LCBsZW4sICZmYWxsYmFja0ZvbnRzKTsKIAogICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgZnJvbSwgbGVuLCBzdHlsZSk7CiAg
ICAgcnVuLnNldENoYXJhY3RlcnNMZW5ndGgodGV4dC0+dGV4dExlbmd0aCgpIC0gZnJvbSk7CkBA
IC01MjEsNyArNTIxLDcgQEAgaW5saW5lIHZvaWQgZW5zdXJlQ2hhcmFjdGVyR2V0c0xpbmVCb3go
TAogICAgIGxpbmVNaWRwb2ludFN0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyhJbmxpbmVJdGVyYXRv
cigwLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLnJlbmRlcmVyKCksIHRleHRQYXJhZ3JhcGhTZXBh
cmF0b3Iub2Zmc2V0KCkpKTsKIH0KIAotaW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVy
VGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJ
ZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgaW50IGNvbnNl
Y3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBtaW5pbXVtUHJlZml4TGltaXQsIGludCBt
aW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RTcGFjZSwgdW5zaWduZWQgcG9zLCBmbG9h
dCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxh
cHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBJbmxpbmVJdGVyYXRvciYg
bGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9vbCYgaHlwaGVuYXRlZCkKK2lubGluZSB2
b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGNvbnNl
Y3V0aXZlSHlwaGVuYXRlZExpbmVzLCBpbnQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXNMaW1p
dCwgaW50IG1pbmltdW1QcmVmaXhMaW1pdCwgaW50IG1pbmltdW1TdWZmaXhMaW1pdCwgdW5zaWdu
ZWQgbGFzdFNwYWNlLCB1bnNpZ25lZCBwb3MsIGZsb2F0IHhQb3MsIGludCBhdmFpbGFibGVXaWR0
aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBpbnQgbGFzdFNw
YWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGludCBuZXh0QnJlYWth
YmxlLCBib29sJiBoeXBoZW5hdGVkKQogewogICAgIC8vIE1hcCAnaHlwaGVuYXRlLWxpbWl0LXti
ZWZvcmUsYWZ0ZXJ9OiBhdXRvOycgdG8gMi4KICAgICB1bnNpZ25lZCBtaW5pbXVtUHJlZml4TGVu
Z3RoOwpAQCAtNjE1LDEyICs2MTUsMTIgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVUZXh0KAogICAgIH0KIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IGxpbmVT
dHlsZSgqcmVuZGVyVGV4dC5wYXJlbnQoKSwgbV9saW5lSW5mbyk7Ci0gICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxl
LmZvbnRDYXNjYWRlKCk7CiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2ggPSBmb250LmlzRml4ZWRQaXRj
aCgpOwogICAgIGJvb2wgY2FuSHlwaGVuYXRlID0gc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnNB
dXRvICYmIFdlYkNvcmU6OmNhbkh5cGhlbmF0ZShzdHlsZS5sb2NhbGUoKSk7CiAKICAgICB1bnNp
Z25lZCBsYXN0U3BhY2UgPSBtX2N1cnJlbnQub2Zmc2V0KCk7Ci0gICAgZmxvYXQgd29yZFNwYWNp
bmcgPSBtX2N1cnJlbnRTdHlsZS0+Zm9udCgpLndvcmRTcGFjaW5nKCk7CisgICAgZmxvYXQgd29y
ZFNwYWNpbmcgPSBtX2N1cnJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwog
ICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKICAgICBmbG9hdCB3b3JkU3BhY2lu
Z0ZvcldvcmRNZWFzdXJlbWVudCA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVCcmVha2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZUJyZWFrZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBzdHJ1Y3QgUmVuZGVyVGV4dEluZm8gewogICAgIFJlbmRlclRleHQqIG1fdGV4dDsK
ICAgICBPd25QdHI8VGV4dExheW91dD4gbV9sYXlvdXQ7CiAgICAgTGF6eUxpbmVCcmVha0l0ZXJh
dG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7Ci0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNv
bnN0IEZvbnRDYXNjYWRlKiBtX2ZvbnQ7CiB9OwogCiBjbGFzcyBMaW5lQnJlYWtlciB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFkZXJz
LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgaW5saW5l
IGJvb2wgcmVxdWlyZXNMaW5lQm94Rm9yQ29udGVudChjbwogICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUgPSBsaW5lU3R5bGUoKnBhcmVudCwgbGluZUluZm8pOwogICAgICAg
ICBpZiAoZmxvd1N0eWxlLmxpbmVIZWlnaHQoKSAhPSBwYXJlbnRTdHlsZS5saW5lSGVpZ2h0KCkK
ICAgICAgICAgICAgIHx8IGZsb3dTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gcGFyZW50U3R5bGUu
dmVydGljYWxBbGlnbigpCi0gICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoZmxvd1N0eWxlLmZv
bnQoKS5mb250TWV0cmljcygpKSkKKyAgICAgICAgICAgIHx8ICFwYXJlbnRTdHlsZS5mb250Q2Fz
Y2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAo
Zmxvd1N0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIHBhcnNlTWF0
aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBpZiAodW5pdCA9PSAiZW0iKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1
ZSAqIHN0eWxlLT5mb250KCkuc2l6ZSgpOworICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFs
dWUgKiBzdHlsZS0+Zm9udENhc2NhZGUoKS5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBpZiAodW5pdCA9PSAiZXgiKSB7CkBAIC0yOTMsNyArMjkzLDcgQEAgYm9vbCBw
YXJzZU1hdGhNTE5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJgogICAgICAgICAgICAgbGVuZ3RoID0g
LTc7ICAgICAgICAKICAgICB9CiAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICBsZW5ndGhWYWx1
ZSA9IGxlbmd0aCAqIHN0eWxlLT5mb250KCkuc2l6ZSgpIC8gMTg7CisgICAgICAgIGxlbmd0aFZh
bHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTEsOCArMTE5
MSw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHIKICAgICAgICAg
bV9vcGVyYXRvckZsYWdzID0gZW50cnktPmZsYWdzOwogCiAgICAgLy8gTGVhZGluZyBhbmQgdHJh
aWxpbmcgc3BhY2UgaXMgc3BlY2lmaWVkIGFzIG11bHRpcGxlIG9mIDEvMThlbS4KLSAgICBtX2xl
YWRpbmdTcGFjZSA9IGVudHJ5LT5sc3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsK
LSAgICBtX3RyYWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6
ZSgpIC8gMTg7CisgICAgbV9sZWFkaW5nU3BhY2UgPSBlbnRyeS0+bHNwYWNlICogc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OworICAgIG1fdHJhaWxpbmdTcGFjZSA9IGVudHJ5LT5y
c3BhY2UgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiB9CiAKIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCkBAIC0xMjI5LDkgKzEy
MjksOSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByCiAgICAgICAg
IG1fb3BlcmF0b3JGbGFncyAmPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZlbmNlIHwgTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTZXBhcmF0b3I7IC8vIFRoaXMgcmVzZXRzIGFsbCBidXQg
dGhlIEZlbmNlIGFuZCBTZXBhcmF0b3IgcHJvcGVydGllcy4KICAgICBlbHNlCiAgICAgICAgIG1f
b3BlcmF0b3JGbGFncyA9IDA7IC8vIFRoaXMgcmVzZXRzIGFsbCB0aGUgb3BlcmF0b3IgcHJvcGVy
dGllcy4KLSAgICBtX2xlYWRpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAx
ODsgLy8gVGhpcyBzZXRzIGxlYWRpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KLSAgICBt
X3RyYWlsaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7IC8vIFRoaXMg
c2V0cyB0cmFpbGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3BhY2UiLgotICAgIG1fbWluU2l6ZSA9
IHN0eWxlKCkuZm9udCgpLnNpemUoKTsgLy8gVGhpcyBzZXRzIG1pbnNpemUgdG8gIjFlbSIuCisg
ICAgbV9sZWFkaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4
OyAvLyBUaGlzIHNldHMgbGVhZGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3BhY2UiLgorICAgIG1f
dHJhaWxpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7IC8v
IFRoaXMgc2V0cyB0cmFpbGluZyBzcGFjZSB0byAidGhpY2ttYXRoc3BhY2UiLgorICAgIG1fbWlu
U2l6ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXpl
IHRvICIxZW0iLgogICAgIG1fbWF4U2l6ZSA9IGludE1heEZvckxheW91dFVuaXQ7IC8vIFRoaXMg
c2V0cyBtYXhzaXplIHRvICJpbmZpbml0eSIuCiAKICAgICBpZiAobV90ZXh0Q29udGVudCkgewpA
QCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcgogICAgICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMoKTsKICAgICAgICAgaWYgKGlzSW52aXNpYmxlT3BlcmF0b3IoKSkgewogICAgICAgICAg
ICAgLy8gSW4gc29tZSBmb250cywgZ2x5cGhzIGZvciBpbnZpc2libGUgb3BlcmF0b3JzIGhhdmUg
bm9uemVybyB3aWR0aC4gQ29uc2VxdWVudGx5LCB3ZSBzdWJ0cmFjdCB0aGF0IHdpZHRoIGhlcmUg
dG8gYXZvaWQgd2lkZSBnYXBzLgotICAgICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgp
LmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgZmFsc2UpOworICAg
ICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsIGZhbHNlKTsKICAgICAgICAgICAgIGZsb2F0IGds
eXBoV2lkdGggPSBhZHZhbmNlRm9yR2x5cGgoZGF0YSk7CiAgICAgICAgICAgICBBU1NFUlQoZ2x5
cGhXaWR0aCA8PSBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCAtPSBnbHlwaFdpZHRoOwpAQCAtMTM2NCw3ICsxMzY0LDcg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKTsKKyAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKTsKICAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IGFkdmFuY2VGb3JHbHlw
aChkYXRhKTsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewogICAgICAgICBpZiAobWF4aW11bUds
eXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQpAQCAtMTUyMSw3ICsxNTIxLDcgQEAgYm9vbCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbQogICAgIGlmICghYm90dG9tLmdseXBoKQog
ICAgICAgICBib3R0b20uZ2x5cGggPSBleHRlbnNpb24uZ2x5cGg7CiAKLSAgICB0b3AuZm9udERh
dGEgPSAmc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgdG9wLmZvbnREYXRh
ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBleHRlbnNp
b24uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZv
bnREYXRhOwogICAgIGlmIChtaWRkbGUuZ2x5cGgpCkBAIC0xNTM4LDggKzE1MzgsOCBAQCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAKICAgICBBU1NFUlQobV9pc1Zl
cnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpOwogCi0gICAgY29uc3Qg
YXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7
Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Cisg
ICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpOworICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKTsKICAgICBpZiAoIXByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgp
IHx8IGJhc2VHbHlwaC5mb250RGF0YSAhPSAmcHJpbWFyeUZvbnREYXRhKQogICAgICAgICByZXR1
cm4gZGF0YTsKIApAQCAtMTU3MCw4ICsxNTcwLDggQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0
cmV0Y2h5RGF0YSBSZW5kZQogICAgIFN0cmV0Y2h5RGF0YSBkYXRhOwogICAgIFN0cmV0Y2h5RGF0
YSBhc3NlbWJseURhdGE7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHls
ZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBHbHlwaERhdGEgYmFzZUdseXBoID0g
c3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERh
dGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgR2x5cGhE
YXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIAog
ICAgIGlmIChwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udERhdGEg
PT0gJnByaW1hcnlGb250RGF0YSkgewogICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50
czsKQEAgLTE2MTgsMTIgKzE2MTgsMTIgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5
RGF0YSBSZW5kZQogICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAKICAgICAgICAgLy8gV2UgY29u
dmVydCB0aGUgbGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGgg
ZGF0YS4KLSAgICAgICAgR2x5cGhEYXRhIHRvcCA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZv
ckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOwotICAgICAgICBH
bHlwaERhdGEgZXh0ZW5zaW9uID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxzZSk7Ci0gICAgICAgIEdseXBo
RGF0YSBib3R0b20gPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRj
aHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKKyAgICAgICAgR2x5cGhEYXRhIHRvcCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFy
YWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKKyAgICAgICAgR2x5cGhEYXRhIGV4dGVuc2lvbiA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKKyAgICAgICAgR2x5cGhEYXRhIGJvdHRvbSA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKICAgICAgICAgR2x5cGhEYXRhIG1pZGRsZTsKICAgICAg
ICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyKQotICAgICAgICAgICAgbWlkZGxl
ID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT5taWRkbGVDaGFyLCBmYWxzZSk7CisgICAgICAgICAgICBtaWRkbGUgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVD
aGFyLCBmYWxzZSk7CiAgICAgICAgIGFzc2VtYmx5RGF0YS5zZXRHbHlwaEFzc2VtYmx5TW9kZSh0
b3AsIGV4dGVuc2lvbiwgYm90dG9tLCBtaWRkbGUpOwogICAgIH0KIApAQCAtMTY4MCw3ICsxNjgw
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgICAgICBt
X3N0cmV0Y2h5RGF0YSA9IGdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IobV90ZXh0Q29udGVu
dCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNl
IGdseXBoIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0
eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgICAgICBHbHlwaERhdGEgYmFzZUdseXBo
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250
ZW50LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgICAgICBmbG9hdCBi
YXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZh
bmNlRm9yR2x5cGgoYmFzZUdseXBoKTsKICAgICAgICAgaWYgKHN0cmV0Y2hTaXplKCkgPD0gYmFz
ZVNpemUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xODAyLDcgKzE4MDIsNyBAQCBMYXlvdXRS
ZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdsCiAKICAgICBHbHlwaEJ1ZmZlciBidWZm
ZXI7CiAgICAgYnVmZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhLCBhZHZhbmNlRm9y
R2x5cGgoZGF0YSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnQo
KSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKKyAgICBpbmZvLmNvbnRl
eHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250RGF0YSwgYnVm
ZmVyLCAwLCAxLCBvcmlnaW4pOwogCiAgICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0OwogfQpAQCAt
MTg5OCw3ICsxODk4LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFpbnRJ
bgogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChw
YWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOwogICAgICAgICBMYXlv
dXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExl
ZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5
cGhzKHN0eWxlKCkuZm9udCgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBi
dWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3
R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5m
b250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE5ODAsNyArMTk4MCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxp
bmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHls
ZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9u
dERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgaWYg
KCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE5
ODksNyArMTk4OSw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW4K
ICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAKICAgICBpZiAobV9zdHJl
dGNoeURhdGEubW9kZSgpID09IERyYXdOb3JtYWwpIHsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEg
PSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50
KCksICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgICAgIHJldHVybiB3
aWR0aCAtIGFkdmFuY2VGb3JHbHlwaChkYXRhKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJh
ZGljYWxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OlJlbmRl
ck1hdGhNCiAKIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpzdHJldGNoVG8oTGF5
b3V0VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0IGRlcHRoQmVsb3dCYXNlbGlu
ZSkKIHsKLSAgICBpZiAoIXN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRh
KCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5t
YXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIElmIHdlIGRvIG5vdCBoYXZlIGFuIE9wZW5UeXBlIE1B
VEggZm9udCwgd2UgYWx3YXlzIG1ha2UgdGhlIHJhZGljYWwgZGVwdGggYSBiaXQgbGFyZ2VyIHRo
YW4gdGhlIHRhcmdldC4KICAgICAgICAgZGVwdGhCZWxvd0Jhc2VsaW5lICs9IGdSYWRpY2FsQm90
dG9tUG9pbnRMb3dlcjsKICAgICB9CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgUmVuZGVyTWF0aE1M
UmFkaWNhbE9wZXJhdG9yOjpjb21wdXQKIHsKICAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdp
ZHRoc0RpcnR5KCkpOwogCi0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
Lm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05
Niw3ICs5Niw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXQKIAog
dm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0
ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGlmIChzdHls
ZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAg
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0
LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVlcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xMTEsNyArMTExLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OnBhaW50
KAogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNl
ICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxNyArMTk5
LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRlU3R5bGUoKQogCiAgICAgLy8gV2Ug
c2V0IHNvbWUgY29uc3RhbnRzIHRvIGRyYXcgdGhlIHJhZGljYWwsIGFzIGRlZmluZWQgaW4gdGhl
IE9wZW5UeXBlIE1BVEggdGFibGVzLgogCi0gICAgbV9ydWxlVGhpY2tuZXNzID0gMC4wNWYgKiBz
dHlsZSgpLmZvbnQoKS5zaXplKCk7CisgICAgbV9ydWxlVGhpY2tuZXNzID0gMC4wNWYgKiBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpOwogCiAgICAgLy8gRklYTUU6IFRoZSByZWNvbW1lbmRl
ZCBkZWZhdWx0IGZvciBtX3ZlcnRpY2FsR2FwIGluIGRpc3BsYXlzdHlsZSBpcyBydWxlIHRoaWNr
bmVzcyArIDEvNCB4LWhlaWdodCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExODczNykuCiAgICAgbV92ZXJ0aWNhbEdhcCA9IDExICogbV9ydWxlVGhpY2tuZXNzIC8g
NDsKICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtX3J1bGVUaGlja25lc3M7Ci0gICAgTGF5b3V0VW5p
dCBrZXJuQmVmb3JlRGVncmVlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OwotICAg
IExheW91dFVuaXQga2VybkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUoKS5mb250KCkuc2l6ZSgp
IC8gMTg7CisgICAgTGF5b3V0VW5pdCBrZXJuQmVmb3JlRGVncmVlID0gNSAqIHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5zaXplKCkgLyAxODsKKyAgICBMYXlvdXRVbml0IGtlcm5BZnRlckRlZ3JlZSA9
IC0xMCAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKICAgICBtX2RlZ3JlZUJv
dHRvbVJhaXNlUGVyY2VudCA9IDAuNmY7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERh
dGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoYXV0byogbWF0
aERhdGEgPSBzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7Cisg
ICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpOworICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBtX3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsIGlu
IGRpc3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
ODczNykuCiAgICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50
KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsK
ICAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmlt
YXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MVG9rZW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEg
Kzg4LDExIEBAIHZvaWQgUmVuZGVyTWF0aE1MVG9rZW46OnVwZGF0ZVN0eWxlKCkKICAgICAgICAg
Ly8gVGhpcyB0cmllcyB0byBlbXVsYXRlIHRoZSBkZWZhdWx0IG1hdGh2YXJpYW50IHZhbHVlIG9u
IDxtaT4gdXNpbmcgdGhlIENTUyBmb250LXN0eWxlIHByb3BlcnR5LgogICAgICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgcmV2aXNlZCB3aGVuIG1hdGh2YXJpYW50IGlzIGltcGxlbWVudGVk
IChodHRwOi8vd2tidWcvODU3MzUpIGFuZCB3aGVuIGZvbnRzIHdpdGggTWF0aGVtYXRpY2FsIEFs
cGhhbnVtZXJpYyBTeW1ib2xzIGNoYXJhY3RlcnMgYXJlIG1vcmUgcG9wdWxhci4KICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5nZXQoKS5mb250RGVzY3Jp
cHRpb24oKSk7Ci0gICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3U3R5bGUu
Z2V0KCkuZm9udCgpLmZvbnRTZWxlY3RvcigpOworICAgICAgICBGb250U2VsZWN0b3IqIGZvbnRT
ZWxlY3RvciA9IG5ld1N0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CiAg
ICAgICAgIGlmICghbV9jb250YWluc0VsZW1lbnQgJiYgZWxlbWVudCgpLnRleHRDb250ZW50KCku
c3RyaXBXaGl0ZVNwYWNlKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCkubGVuZ3RoKCkgPT0gMSAmJiAh
dG9rZW5FbGVtZW50Lmhhc0F0dHJpYnV0ZShtYXRodmFyaWFudEF0dHIpKQogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT24pOwogICAgICAgICBpZiAobmV3
U3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAg
ICAgICBuZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgICAg
ICAgICBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwog
ICAgIH0KIAogICAgIHdyYXBwZXItPnNldFN0eWxlKFdURjo6bW92ZShuZXdTdHlsZSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ3Vy
c29yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJGbG9h
dFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveFN0
eWxlLmgiCiAjaW5jbHVkZSAiUGFnaW5hdGlvbi5oIgpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wg
UmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKGNvbnMKIH0KIAogI2lmIEVOQUJMRShJT1Nf
VEVYVF9BVVRPU0laSU5HKQotaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChjb25zdCBG
b250JiBmb250KQoraW5saW5lIHVuc2lnbmVkIGNvbXB1dGVGb250SGFzaChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKIHsKICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CiAgICAgICAgIENh
c2VGb2xkaW5nSGFzaDo6aGFzaChmb250LmZvbnREZXNjcmlwdGlvbigpLmZpcnN0RmFtaWx5KCku
aW1wbCgpKSwKQEAgLTMxNSw3ICszMTUsNyBAQCB1aW50MzJfdCBSZW5kZXJTdHlsZTo6aGFzaEZv
clRleHRBdXRvc2l6CiAgICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+bmJzcE1vZGU7CiAg
ICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrOwogICAgIGhhc2ggXj0gV1RG
OjpGbG9hdEhhc2g8ZmxvYXQ+OjpoYXNoKGluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdodC52
YWx1ZSgpKTsKLSAgICBoYXNoIF49IGNvbXB1dGVGb250SGFzaChpbmhlcml0ZWQtPmZvbnQpOwor
ICAgIGhhc2ggXj0gY29tcHV0ZUZvbnRIYXNoKGluaGVyaXRlZC0+Zm9udENhc2NhZGUpOwogICAg
IGhhc2ggXj0gaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nOwogICAgIGhhc2gg
Xj0gaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZzsKICAgICBoYXNoIF49IGluaGVy
aXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbjsKQEAgLTMzOSw3ICszMzksNyBAQCBib29sIFJlbmRl
clN0eWxlOjplcXVhbEZvclRleHRBdXRvc2l6aW5nCiAgICAgICAgICYmIHJhcmVJbmhlcml0ZWRE
YXRhLT5saW5lQnJlYWsgPT0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhLT5saW5lQnJlYWsKICAg
ICAgICAgJiYgcmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSA9PSBvdGhlci0+cmFyZUlu
aGVyaXRlZERhdGEtPnRleHRTZWN1cml0eQogICAgICAgICAmJiBpbmhlcml0ZWQtPnNwZWNpZmll
ZExpbmVIZWlnaHQgPT0gb3RoZXItPmluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdodAotICAg
ICAgICAmJiBpbmhlcml0ZWQtPmZvbnQuZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci0+aW5o
ZXJpdGVkLT5mb250KQorICAgICAgICAmJiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmVxdWFsRm9y
VGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRlZC0+Zm9udENhc2NhZGUpCiAgICAgICAgICYm
IGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZyA9PSBvdGhlci0+aW5oZXJpdGVk
LT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgICYmIGluaGVyaXRlZC0+dmVydGlj
YWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3Nw
YWNpbmcKICAgICAgICAgJiYgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uID09IG90aGVy
LT5pbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJlY3Rpb24KQEAgLTU1MSw3ICs1NTEsNyBAQCBib29s
IFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjCiAjaWYgRU5BQkxFKElPU19URVhU
X0FVVE9TSVpJTkcpCiAgICAgICAgIHx8IGluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdodCAh
PSBvdGhlci5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRpZgotICAgICAgICB8
fCBpbmhlcml0ZWQtPmZvbnQgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250CisgICAgICAgIHx8IGlu
aGVyaXRlZC0+Zm9udENhc2NhZGUgIT0gb3RoZXIuaW5oZXJpdGVkLT5mb250Q2FzY2FkZQogICAg
ICAgICB8fCBpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgIT0gb3RoZXIuaW5o
ZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgIHx8IGluaGVyaXRlZC0+
dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgIT0gb3RoZXIuaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3Jk
ZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJlY3Rpb24gIT0g
b3RoZXIuaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC0xMTg0LDcgKzExODQsNyBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjpoeXBoZW5TCiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGRlcGVuZCBvbiBsb2NhbGUuCiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuTWludXNTdHJpbmcsICgmaHlwaGVuTWludXMs
IDEpKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBo
eXBoZW5TdHJpbmcsICgmaHlwaGVuLCAxKSk7Ci0gICAgcmV0dXJuIGZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5nIDogaHlwaGVu
TWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
Z2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1pbnVzU3Ry
aW5nOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNN
YXJrU3RyaW5nKCkgY29uc3QKQEAgLTEzNDAsMjAgKzEzNDAsMjAgQEAgY29uc3QgQW5pbWF0aW9u
KiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbgogICAgIHJldHVybiAwOwogfQogCi1jb25zdCBGb250
JiBSZW5kZXJTdHlsZTo6Zm9udCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udDsgfQot
Y29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0IHsgcmV0
dXJuIGluaGVyaXRlZC0+Zm9udC5mb250TWV0cmljcygpOyB9Ci1jb25zdCBGb250RGVzY3JpcHRp
b24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBpbmhlcml0
ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNjYWRlJiBSZW5kZXJT
dHlsZTo6Zm9udENhc2NhZGUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRl
OyB9Citjb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRyaWNzKCkgY29uc3Qg
eyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250TWV0cmljcygpOyB9Citjb25zdCBG
b250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpOyB9CiBmbG9hdCBS
ZW5kZXJTdHlsZTo6c3BlY2lmaWVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3Jp
cHRpb24oKS5zcGVjaWZpZWRTaXplKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpjb21wdXRlZEZv
bnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7
IH0KLWludCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQt
PmZvbnQucGl4ZWxTaXplKCk7IH0KK2ludCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7
IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpOyB9CiAKIGNvbnN0IExl
bmd0aCYgUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVy
aXRlZERhdGEtPndvcmRTcGFjaW5nOyB9Ci1mbG9hdCBSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2lu
ZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5sZXR0ZXJTcGFjaW5nKCk7IH0KK2Zs
b2F0IFJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVk
LT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCk7IH0KIAogYm9vbCBSZW5kZXJTdHlsZTo6c2V0
Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgdikKIHsKLSAgICBpZiAoaW5o
ZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKLSAgICAgICAgaW5oZXJpdGVk
LmFjY2VzcygpLT5mb250ID0gRm9udCh2LCBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygp
LCBpbmhlcml0ZWQtPmZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgaWYgKGluaGVyaXRlZC0+Zm9u
dENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgeworICAgICAgICBpbmhlcml0ZWQuYWNj
ZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUodiwgaW5oZXJpdGVkLT5mb250Q2FzY2Fk
ZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udENhc2NhZGUud29yZFNwYWNpbmcoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDA0
LDcgKzE0MDQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhMZW5ndGggCiAg
ICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGVy
Y2VudDoKLSAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFsdWUucGVyY2VudCgpICogZm9udCgp
LnNwYWNlV2lkdGgoKSAvIDEwMDsKKyAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gdmFsdWUucGVy
Y2VudCgpICogZm9udENhc2NhZGUoKS5zcGFjZVdpZHRoKCkgLyAxMDA7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnZhbHVl
KCk7CkBAIC0xNDE3LDExICsxNDE3LDExIEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldFdvcmRTcGFj
aW5nKExlbmd0aCAKICAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gMDsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRXb3JkU3BhY2luZyhmb250
V29yZFNwYWNpbmcpOworICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENhc2NhZGUuc2V0V29y
ZFNwYWNpbmcoZm9udFdvcmRTcGFjaW5nKTsKICAgICByYXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+d29yZFNwYWNpbmcgPSBXVEY6Om1vdmUodmFsdWUpOwogfQogCi12b2lkIFJlbmRlclN0eWxl
OjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250LnNl
dExldHRlclNwYWNpbmcodik7IH0KK3ZvaWQgUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmco
ZmxvYXQgdikgeyBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNldExldHRlclNwYWNp
bmcodik7IH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZSkKIHsK
QEAgLTE0MzQsNyArMTQzNCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0
IHNpemUKICAgICBlbHNlCiAgICAgICAgIHNpemUgPSBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZv
bnRTaXplLCBzaXplKTsKIAotICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9
IGZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2Vs
ZWN0b3IgPSBmb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgIEZvbnREZXNjcmlwdGlv
biBkZXNjKGZvbnREZXNjcmlwdGlvbigpKTsKICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2l6
ZSk7CiAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CkBAIC0xNDQ4LDcgKzE0NDgsNyBA
QCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXplCiAjZW5kaWYKIAogICAg
IHNldEZvbnREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBmb250KCkudXBkYXRlKGN1cnJlbnRGb250
U2VsZWN0b3IpOworICAgIGZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2VsZWN0b3Ip
OwogfQogCiB2b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFkb3dFeHRlbnQoY29uc3QgU2hhZG93RGF0
YSogc2hhZG93LCBMYXlvdXRVbml0ICZ0b3AsIExheW91dFVuaXQgJnJpZ2h0LCBMYXlvdXRVbml0
ICZib3R0b20sIExheW91dFVuaXQgJmxlZnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBDb250ZW50RGF0YTsKIGNsYXNzIENvdW50ZXJDb250
ZW50OwogY2xhc3MgQ3Vyc29yTGlzdDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBG
b250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGb250TWV0cmljczsKIGNsYXNzIEludFJl
Y3Q7CiBjbGFzcyBNYXNrSW1hZ2VPcGVyYXRpb247CkBAIC02ODksNyArNjg5LDcgQEAgcHVibGlj
OgogICAgIEVDbGVhciBjbGVhcigpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9mbGFncy5j
bGVhcigpOyB9CiAgICAgRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4g
bm9uaW5oZXJpdGVkX2ZsYWdzLnRhYmxlTGF5b3V0KCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIGZsb2F0IHNw
ZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgaW5saW5lIFN0eWxlSW5oZXJpdGVk
RGF0YTo6U3R5bGVJbmhlcml0ZQogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAg
ICwgc3BlY2lmaWVkTGluZUhlaWdodChvLnNwZWNpZmllZExpbmVIZWlnaHQpCiAjZW5kaWYKLSAg
ICAsIGZvbnQoby5mb250KQorICAgICwgZm9udENhc2NhZGUoby5mb250Q2FzY2FkZSkKICAgICAs
IGNvbG9yKG8uY29sb3IpCiAgICAgLCB2aXNpdGVkTGlua0NvbG9yKG8udmlzaXRlZExpbmtDb2xv
cikKIHsKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBTdHlsZUluaGVyaXRlZERhdGE6Om9wZXJhdG9y
PT0oY29ucwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAgICAgICAmJiBzcGVj
aWZpZWRMaW5lSGVpZ2h0ID09IG8uc3BlY2lmaWVkTGluZUhlaWdodAogI2VuZGlmCi0gICAgICAg
ICYmIGZvbnQgPT0gby5mb250CisgICAgICAgICYmIGZvbnRDYXNjYWRlID09IG8uZm9udENhc2Nh
ZGUKICAgICAgICAgJiYgY29sb3IgPT0gby5jb2xvcgogICAgICAgICAmJiB2aXNpdGVkTGlua0Nv
bG9yID09IG8udmlzaXRlZExpbmtDb2xvcgogICAgICAgICAmJiBob3Jpem9udGFsX2JvcmRlcl9z
cGFjaW5nID09IG8uaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJp
dGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIFN0eWxl
SW5oZXJpdGVkRGF0YV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgIExlbmd0aCBzcGVjaWZpZWRMaW5lSGVpZ2h0OwogI2VuZGlm
CiAKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udENhc2NhZGU7CiAgICAgQ29s
b3IgY29sb3I7CiAgICAgQ29sb3IgdmlzaXRlZExpbmtDb2xvcjsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTMgKzIyNSwxMyBAQCB2b2lk
IFJlbmRlclNWR0lubGluZVRleHQ6OnVwZGF0ZVNjYWxlZEZvCiAgICAgY29tcHV0ZU5ld1NjYWxl
ZEZvbnRGb3JTdHlsZSgqdGhpcywgc3R5bGUoKSwgbV9zY2FsaW5nRmFjdG9yLCBtX3NjYWxlZEZv
bnQpOwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250
Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udCYgc2NhbGVkRm9udCkKK3ZvaWQgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0JiBzY2Fs
aW5nRmFjdG9yLCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCkKIHsKICAgICAvLyBBbHRlciBmb250
LXNpemUgdG8gdGhlIHJpZ2h0IG9uLXNjcmVlbiB2YWx1ZSB0byBhdm9pZCBzY2FsaW5nIHRoZSBn
bHlwaHMgdGhlbXNlbHZlcywgZXhjZXB0IHdoZW4gR2VvbWV0cmljUHJlY2lzaW9uIGlzIHNwZWNp
ZmllZAogICAgIHNjYWxpbmdGYWN0b3IgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVT
Y3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IocmVuZGVyZXIpOwogICAgIGlmIChzY2FsaW5nRmFj
dG9yID09IDEgfHwgIXNjYWxpbmdGYWN0b3IgfHwgc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudGV4
dFJlbmRlcmluZ01vZGUoKSA9PSBHZW9tZXRyaWNQcmVjaXNpb24pIHsKICAgICAgICAgc2NhbGlu
Z0ZhY3RvciA9IDE7Ci0gICAgICAgIHNjYWxlZEZvbnQgPSBzdHlsZS5mb250KCk7CisgICAgICAg
IHNjYWxlZEZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRl
TmV3U2NhbAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJldHRlciBoYW5kbGUgdGhlIGNhc2Ug
d2hlbiB3ZSBjb21wdXRlIHZlcnkgc21hbGwgZm9udHMgYmVsb3cgKGJlbG93IDFwdCkuCiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZy
b21TcGVjaWZpZWRTaXplRm9yU1ZHSW5saW5lVGV4dChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRT
aXplKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzY2FsaW5nRmFjdG9yLCBy
ZW5kZXJlci5kb2N1bWVudCgpKSk7CiAKLSAgICBzY2FsZWRGb250ID0gRm9udChmb250RGVzY3Jp
cHRpb24sIDAsIDApOworICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShmb250RGVzY3JpcHRp
b24sIDAsIDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHJlbmRlcmVyLmRvY3VtZW50KCkuZW5z
dXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIFJlbmRl
clNWR0lubGluZVRleHRfaAogI2RlZmluZSBSZW5kZXJTVkdJbmxpbmVUZXh0X2gKIAotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlclRl
eHQuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzKiBsYXlvdXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gJm1fbGF5b3V0QXR0cmlidXRlczsgfQog
CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGluZ0ZhY3Rv
cjsgfQotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
ZEZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2NhbGVkRm9udDsgfQogICAgIHZvaWQgdXBkYXRlU2NhbGVkRm9udCgpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9udCYgc2NhbGVk
Rm9udCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0JiBzY2FsaW5nRmFjdG9y
LCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCk7CiAKICAgICAvLyBQcmVzZXJ2ZXMgZmxvYXRpbmcg
cG9pbnQgcHJlY2lzaW9uIGZvciB0aGUgdXNlIGluIERSVC4gSXQga25vd3MgaG93IHRvIHJvdW5k
IGFuZCBkb2VzIGEgYmV0dGVyIGpvYiB0aGFuIGVuY2xvc2luZ0ludFJlY3QuCiAgICAgRmxvYXRS
ZWN0IGZsb2F0TGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OwpAQCAtNjUsNyArNjUsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IGNyZWF0ZVRl
eHRCb3goKSBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc2NhbGluZ0ZhY3RvcjsKLSAgICBGb250
IG1fc2NhbGVkRm9udDsKKyAgICBGb250Q2FzY2FkZSBtX3NjYWxlZEZvbnQ7CiAgICAgU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXMgbV9sYXlvdXRBdHRyaWJ1dGVzOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgRmxvYXRSZWN0IFNW
R0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlYwogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSBy
ZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAK
LSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7Cisg
ICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQgPSByZW5kZXJlcigpLnNjYWxlZEZvbnQo
KTsKICAgICBjb25zdCBGb250TWV0cmljcyYgc2NhbGVkRm9udE1ldHJpY3MgPSBzY2FsZWRGb250
LmZvbnRNZXRyaWNzKCk7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50LngsIGZy
YWdtZW50LnkpOwogICAgIGlmIChzY2FsaW5nRmFjdG9yICE9IDEpCkBAIC0xNzIsNyArMTcyLDcg
QEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgdGV4dFNob3VsZEJlUGFpbnRlZChjb25zdCBSZW5kZXJTVkdJbmxpbmVUZXh0JiB0
ZXh0UmVuZGVyZXIpCiB7Ci0gICAgLy8gRm9udDo6cGl4ZWxTaXplKCksIHJldHVybnMgRm9udERl
c2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5zICJpbnQoeCArIDAu
NSkiLgorICAgIC8vIEZvbnRDYXNjYWRlOjpwaXhlbFNpemUoKSwgcmV0dXJucyBGb250RGVzY3Jp
cHRpb246OmNvbXB1dGVkUGl4ZWxTaXplKCksIHdoaWNoIHJldHVybnMgImludCh4ICsgMC41KSIu
CiAgICAgLy8gSWYgdGhlIGFic29sdXRlIGZvbnQgc2l6ZSBvbiBzY3JlZW4gaXMgYmVsb3cgeD0w
LjUsIGRvbid0IHJlbmRlciBhbnl0aGluZy4KICAgICByZXR1cm4gdGV4dFJlbmRlcmVyLnNjYWxl
ZEZvbnQoKS5waXhlbFNpemUoKTsKIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBUZXh0UnVuIFNWR0lu
bGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAgLCBkaXJlY3Rpb24o
KQogICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRsT3JkZXJpbmco
KSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAgIGlmIChz
dHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHls
ZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAg
cnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZShyZW5kZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTQ3
NSw3ICs0NzUsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHBvc2l0aW9uT2Zmc2V0Rm9yRGVjCiAg
ICAgcmV0dXJuIDAuMGY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgdGhpY2tuZXNzRm9yRGVj
b3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBpbmxpbmUg
ZmxvYXQgdGhpY2tuZXNzRm9yRGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiB7CiAgICAgLy8gRklYTUU6IEZvciBTVkcgRm9udHMgd2UgbmVlZCB0byB1
c2UgdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgPGZvbnQtZmFjZT4gaWYgc3BlY2lmaWVk
LgogICAgIC8vIENvbXBhdGlibGUgd2l0aCBCYXRpay9PcGVyYQpAQCAtNTM1LDcgKzUzNSw3IEBA
IHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAgICBSZW5kZXJTdHls
ZSYgZGVjb3JhdGlvblN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxlKCk7CiAKICAgICBm
bG9hdCBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICBGb250IHNjYWxlZEZvbnQ7CisgICAgRm9udENh
c2NhZGUgc2NhbGVkRm9udDsKICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2Nh
bGVkRm9udEZvclN0eWxlKGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlvblN0eWxlLCBzY2Fs
aW5nRmFjdG9yLCBzY2FsZWRGb250KTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKQEAg
LTU3MCw3ICs1NzAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwog
ICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQg
PSByZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVk
Rm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOwogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNo
YWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CiAKICAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4o
ZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRFbmdp
bmU6OmxheW91dFRleHRPbkxpCiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0
cmluZ1ZpZXcodGV4dC0+dGV4dCgpKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IHN0eWxlLT5mb250Q2FzY2FkZSgpOwogCiAgICAgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcg
c3BhY2luZ0xheW91dChmb250KTsKICAgICBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUgYmFz
ZWxpbmVMYXlvdXQoZm9udCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCIK
IAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRMYXlvdXRFbmdpbmVC
YXNlbGluZShjb25zdCBGb250JiBmb250KQorU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAg
OiBtX2ZvbnQoZm9udCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIFJl
bmRlck9iamVjdDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdSZW5kZXJTdHlsZTsKQEAg
LTM1LDcgKzM1LDcgQEAgY2xhc3MgU1ZHVGV4dE1ldHJpY3M7CiBjbGFzcyBTVkdUZXh0TGF5b3V0
RW5naW5lQmFzZWxpbmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZSk7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5l
KGNvbnN0IEZvbnQmKTsKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9u
dENhc2NhZGUmKTsKIAogICAgIGZsb2F0IGNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQoY29uc3QgU1ZH
UmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0KSBjb25zdDsKICAgICBmbG9h
dCBjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNv
bnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdDsKQEAgLTQ1LDcgKzQ1LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBFQWxpZ25tZW50QmFzZWxpbmUgZG9taW5hbnRCYXNlbGlu
ZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0OwogCi0gICAgY29uc3QgRm9udCYgbV9mb250OworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCkK
ICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKDApCiB7CkBAIC05OCw3
ICs5OCw3IEBAIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWwKIAogICAg
IGZsb2F0IHNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpICsga2VybmluZzsKICAgICBp
ZiAoY3VycmVudENoYXJhY3RlciAmJiBsYXN0Q2hhcmFjdGVyICYmIG1fZm9udC53b3JkU3BhY2lu
ZygpKSB7Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIp
ICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQorICAgICAgICBpZiAoRm9u
dENhc2NhZGU6OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYgIUZvbnRDYXNjYWRl
Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0ZXIpKQogICAgICAgICAgICAgc3BhY2luZyArPSBt
X2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEVuZ2luZVNwYWNpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNs
YXNzIFNWR1JlbmRlclN0eWxlOwogY2xhc3MgU1ZHRWxlbWVudDsKIApAQCAtMzIsMTMgKzMyLDEz
IEBAIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcpOwog
cHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0IEZvbnQmKTsKKyAg
ICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAg
ZmxvYXQgY2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBTVkdU
ZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCk7CiAgICAgZmxvYXQgY2FsY3VsYXRlQ1NT
S2VybmluZ0FuZFNwYWNpbmcoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBsZW5n
dGhDb250ZXh0LCBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3Rlcik7CiAKIHByaXZhdGU6Ci0g
ICAgY29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAg
ICAgY29uc3QgVUNoYXIqIG1fbGFzdENoYXJhY3RlcjsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgU1ZHVGV4
dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWRwogICAgIGZsb2F0IHNjYWxpbmdGYWN0
b3IgPSB0ZXh0UmVuZGVyZXIuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFj
dG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVuZGVyZXIuc2NhbGVk
Rm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVy
LnNjYWxlZEZvbnQoKTsKICAgICBpbnQgbGVuZ3RoID0gMDsKIAogICAgIC8vIENhbGN1bGF0ZSB3
aWR0aC9oZWlnaHQgdXNpbmcgdGhlIHNjYWxlZCBmb250LCBkaXZpZGUgdGhpcyByZXN1bHQgYnkg
dGhlIHNjYWxpbmdGYWN0b3IgYWZ0ZXJ3YXJkcy4KQEAgLTcwLDcgKzcwLDcgQEAgVGV4dFJ1biBT
VkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bgogICAgICAgICAgICAgICAgICwgc3R5bGUu
ZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGlzT3ZlcnJpZGUoc3R5bGUudW5pY29kZUJp
ZGkoKSkgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVy
aW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHRleHQpKTsKIAog
ICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtOTEsNyArOTEsNyBAQCBTVkdUZXh0
TWV0cmljcyBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoCiAKIFNWR1RleHRNZXRyaWNzOjpTVkdU
ZXh0TWV0cmljcyhSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25lZCBwb3NpdGlvbiwg
dW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCwgY29uc3QgU3RyaW5nJiBnbHlwaE5hbWUpCiB7
Ci0gICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250
RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7CiAgICAgZmxvYXQg
c2NhbGluZ0ZhY3RvciA9IHRleHQuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5n
RmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0
cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsOSArMTAwLDkgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Omlu
aXRpYWxpemVNZQogICAgIG1fY29tcGxleFN0YXJ0VG9DdXJyZW50TWV0cmljcyA9IFNWR1RleHRN
ZXRyaWNzKCk7CiAgICAgbV90b3RhbFdpZHRoID0gMDsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxl
ZEZvbnQgPSB0ZXh0LnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVk
Rm9udCA9IHRleHQuc2NhbGVkRm9udCgpOwogICAgIG1fcnVuID0gU1ZHVGV4dE1ldHJpY3M6OmNv
bnN0cnVjdFRleHRSdW4odGV4dCk7Ci0gICAgbV9pc0NvbXBsZXhUZXh0ID0gc2NhbGVkRm9udC5j
b2RlUGF0aChtX3J1bikgPT0gRm9udDo6Q29tcGxleDsKKyAgICBtX2lzQ29tcGxleFRleHQgPSBz
Y2FsZWRGb250LmNvZGVQYXRoKG1fcnVuKSA9PSBGb250Q2FzY2FkZTo6Q29tcGxleDsKIAogICAg
IGlmIChtX2lzQ29tcGxleFRleHQpCiAgICAgICAgIG1fc2ltcGxlV2lkdGhJdGVyYXRvciA9IG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBT
VkdGb250RGF0YSogc3ZnRm9udAogICAgIHJldHVybiBzdmdGb250RGF0YTsKIH0KIAotZmxvYXQg
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmlu
ZyYgZ2x5cGhOYW1lKSBjb25zdAorZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZs
b2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKIHsK
ICAgICBXaWR0aEl0ZXJhdG9yIGl0KCZmb250LCBydW4pOwogICAgIEdseXBoQnVmZmVyIGdseXBo
QnVmZmVyOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ6OmRyYXdTVkcKICAgICB9CiB9CiAKLXN0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9y
Rm9udChjb25zdCBGb250JiBmb250KQorc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JG
b250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
JiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwogICAgIGlmICghcHJp
bWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQpAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyBHbHlw
aERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb24KICAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRF
bGVtZW50LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250RGF0YSk7CiB9CiAKLUdseXBoRGF0
YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0
IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3Rlciwg
Ym9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0
aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCitHbHlwaERhdGEgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBi
b29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3Ro
LCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkKIHsKICAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhID0gZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBtaXJyb3Is
IEF1dG9WYXJpYW50KTsKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkKQEAgLTM0Miw3ICszNDIs
NyBAQCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgLy8gVGhl
IGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBGb3Igc2ltcGxpY2l0eSB3
ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250ZXh0LXNlbnNpdGl2ZWx5
LgogICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9uID0gZm9udC5mb250RGVz
Y3JpcHRpb24oKTsKICAgICBmYWxsYmFja0Rlc2NyaXB0aW9uLnNldEZhbWlsaWVzKFZlY3RvcjxB
dG9taWNTdHJpbmc+IHsgc2Fuc1NlcmlmRmFtaWx5IH0pOwotICAgIEZvbnQgZmFsbGJhY2tGb250
KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250LndvcmRTcGFj
aW5nKCkpOworICAgIEZvbnRDYXNjYWRlIGZhbGxiYWNrRm9udChmYWxsYmFja0Rlc2NyaXB0aW9u
LCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygpKTsKICAgICBmYWxsYmFj
a0ZvbnQudXBkYXRlKGZvbnQuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgcmV0dXJuIGZhbGxiYWNr
Rm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBtaXJyb3IsIEF1dG9WYXJpYW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dF9oCiAjZGVmaW5lIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKIAotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6CiAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KICAgICB2b2lkIHNldEFjdGl2ZVBhaW50aW5nUmVz
b3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UgPSBvYmplY3Q7IH0KIAotICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29s
IG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBT
dHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlJiwgV2lk
dGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRD
aGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFj
ZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNv
bnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJp
bmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZH
S2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZl
ciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94U3R5bGUuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSb290SW5saW5l
Qm94LmgiCiAKQEAgLTg5LDcgKzg5LDcgQEAgR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxvd0Zv
ckRlY29yYXRpbwogICAgIGZsb2F0IHdhdnlPZmZzZXQ7CiAgICAgICAgIAogICAgIFRleHREZWNv
cmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9uU3R5
bGUoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCku
ZmxvYXRIZWlnaHQoKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiAgICAgR2x5cGhPdmVyZmxvdyBvdmVyZmxv
d1Jlc3VsdDsKICAgICAKICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9u
U3R5bGVXYXZ5KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5
bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4
dEJveFN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSW5s
aW5lVGV4dEJveFN0eWxlX2gKICNkZWZpbmUgSW5saW5lVGV4dEJveFN0eWxlX2gKIAotI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gcmVzb2x2ZUZvckRv
Y3VtZW50KGNvbnMKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBk
b2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSA/IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpLT5mb250U2VsZWN0b3IoKSA6IG51bGxwdHI7Ci0gICAgZG9jdW1lbnRTdHlsZS5n
ZXQoKS5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgZG9jdW1lbnRTdHlsZS5nZXQo
KS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgcmV0dXJuIGRvY3Vt
ZW50U3R5bGU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVl
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNv
bHZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OCw3ICs5NzgsNyBAQCB2b2lkIHJlc29s
dmVUcmVlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhCiAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0
dGluZ3MgPSBkb2N1bWVudC5zZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CiAgICAg
ICAgICAgICBpZiAoc2V0dGluZ3MtPmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocygpICYm
IHN0eWxlUmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5mb250
KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKHN0eWxlUmVzb2x2ZXIt
PmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0eWxlOjpDaGFuZ2UgZG9j
dW1lbnRDaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRTdHlsZS5nZXQoKSwgZG9jdW1l
bnQucmVuZGVyVmlldygpLT5zdHlsZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRh
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4MCw5IEBAIHZvaWQgY29tcHV0ZU5vcm1h
bGl6ZWRTcGFjZXMoY29uc3QgVGV4dFIKICAgICBpZiAobm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlLmxlbmd0aCgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihydW4uY2hhcmFjdGVyc0xlbmd0
aCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChydW4uaXM4Qml0KCkpCi0gICAgICAgIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hh
cmFjdGVyczgoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAgIG5vcm1hbGl6ZWRT
cGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJh
Y3RlcnM4KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwogICAgIGVsc2UKLSAgICAgICAgbm9y
bWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFy
YWN0ZXJzMTYoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CisgICAgICAgIG5vcm1hbGl6ZWRT
cGFjZXNTdHJpbmdDYWNoZSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJh
Y3RlcnMxNigpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBpZiAobWlycm9yKQogICAg
ICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBjcmVhdGVTdHJpbmdXaXRoTWlycm9y
ZWRDaGFyYWN0ZXJzKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSEtlcm5FbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIK
ICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlU3JjRWxl
bWVudC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2Niw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZvbnRDYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBAIC00NjMsMTIgKzQ2MywxMiBAQCB2b2lk
IFdlYlByb2Nlc3M6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91CiAKIHZvaWQgV2ViUHJvY2Vzczo6
c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCBhbHdheXNVc2VDb21wbGV4VGV4
dCkKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRDb2RlUGF0aChhbHdheXNVc2VDb21wbGV4VGV4
dCA/IFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250OjpBdXRvKTsKKyAgICBX
ZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQgPyBX
ZWJDb3JlOjpGb250Q2FzY2FkZTo6Q29tcGxleCA6IFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpBdXRv
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wg
dXNlRm9udFNtb290aGluZykKIHsKLSAgICBXZWJDb3JlOjpGb250OjpzZXRTaG91bGRVc2VTbW9v
dGhpbmcodXNlRm9udFNtb290aGluZyk7CisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldFNo
b3VsZFVzZVNtb290aGluZyh1c2VGb250U21vb3RoaW5nKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
Ojp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFu
Z3VhZ2VzKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDIsNyArODAyLDcg
QEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAgIGlmICghc2Vs
ZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKICAgICAgICAg
aWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydCgm
ZnJhbWUsIG5vZGVUb1JlbW92ZSkpIHsKLSAgICAgICAgICAgIENURm9udFJlZiBmb250ID0gc3R5
bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICAgICAgICAgIENU
Rm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
Q1RGb250KCk7CiAgICAgICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBmb250
ID8gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgOiAwOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAodHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3ND
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIFdl
YlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByCiAgICAgbV9jb21wb3NpdGluZ1JlbmRl
clNlcnZlclBvcnQgPSBXVEY6Om1vdmUocGFyYW1ldGVycy5hY2NlbGVyYXRlZENvbXBvc2l0aW5n
UG9ydCk7CiAgICAgbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCA9IHBhcmFtZXRlcnMucHJlc2Vu
dGVyQXBwbGljYXRpb25QaWQ7CiAgICAgbV9zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRp
b24gPSBwYXJhbWV0ZXJzLnNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsKLSAgICBG
b250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7
CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCA/IEtlcm5pbmcgfCBM
aWdhdHVyZXMgOiAwKTsKIAogICAgIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6UmVsaWVmTG9nZ2Vy
OjpzZXRMb2dnaW5nRW5hYmxlZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU1lbW9yeVByZXNzdXJl
UmVsaWVmTG9nZ2luZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNT
dHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJL
aXROU1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKIAogI2ltcG9ydCA8V2Vi
Q29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJD
b3JlTlNTdHJpbmdFeHRyYXMuaD4KQEAgLTkyLDcgKzkyLDcgQEAgLSAodm9pZClfd2ViX2RyYXdB
dFBvaW50OihOU1BvaW50KXBvaW50IAogICAgICAgICBpZiAoIWZsaXBwZWQpCiAgICAgICAgICAg
ICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKIAotICAgICAgICBGb250IHdl
YkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbbnND
b250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSwgZm9udFNtb290aGluZ0lzQWxsb3dlZCA/IEF1dG9T
bW9vdGhpbmcgOiBBbnRpYWxpYXNlZCk7CisgICAgICAgIEZvbnRDYXNjYWRlIHdlYkNvcmVGb250
KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbbnNDb250ZXh0IGlz
RHJhd2luZ1RvU2NyZWVuXSwgZm9udFNtb290aGluZ0lzQWxsb3dlZCA/IEF1dG9TbW9vdGhpbmcg
OiBBbnRpYWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0
aCk7CiAgICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkBAIC0xMzgsNyArMTM4
LDcgQEAgLSAoZmxvYXQpX3dlYl93aWR0aFdpdGhGb250OihOU0ZvbnQgKilmbwogICAgIFtzZWxm
IGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAKICAgICBpZiAoY2FuVXNlRmFzdFJlbmRl
cmVyKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChG
b250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICAgICAgRm9udENh
c2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVd
KSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVu
XSk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAg
IHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogICAgICAgICByZXR1cm4gd2ViQ29yZUZvbnQu
d2lkdGgocnVuKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU3RyaW5nVHJ1bmNh
dG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU3RyaW5nVHJ1
bmNhdG9yLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YlN0cmluZ1RydW5jYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDIxIEBACiAj
aW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKIAogI2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJm
YWNlLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udENh
c2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udFBsYXRmb3JtRGF0YS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNpbXBvcnQgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCi1zdGF0aWMgV2ViQ29yZTo6Rm9udCYgZm9udEZyb21OU0ZvbnQoTlNG
b250ICpmb250KQorc3RhdGljIFdlYkNvcmU6OkZvbnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChO
U0ZvbnQgKmZvbnQpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0Zv
bnQ+PiBjdXJyZW50TlNGb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJDb3JlOjpG
b250PiBjdXJyZW50Rm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29yZTo6Rm9u
dENhc2NhZGU+IGN1cnJlbnRGb250OwogICAgIGlmIChbZm9udCBpc0VxdWFsOmN1cnJlbnROU0Zv
bnQuZ2V0KCkuZ2V0KCldKQogICAgICAgICByZXR1cm4gY3VycmVudEZvbnQ7CiAgICAgY3VycmVu
dE5TRm9udC5nZXQoKSA9IGZvbnQ7Ci0gICAgY3VycmVudEZvbnQuZ2V0KCkgPSBXZWJDb3JlOjpG
b250KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwor
ICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9udENhc2NhZGUoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgcmV0dXJuIGN1cnJl
bnRGb250OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKIAogICAgICAgICBQb3B1cE1l
bnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5pdGVtU3R5bGUoaSk7CiAgICAgICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgaWYgKHN0eWxlLmZvbnQoKSAhPSBGb250
KCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLmZvbnQoKSAhPSBGb250Q2FzY2FkZSgpKSB7CiAgICAg
ICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKICAgICAgICAgICAgICAgICBDR0Zs
b2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCku
c2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDkwLDcgKzE0OTAsNyBAQCAtIChCT09MKV92aWV3Q2xhc3M6KENsYXNzICop
dkNsYXNzIGFuZFJlCiAKICsgKHZvaWQpX3NldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRo
OihCT09MKWYKIHsKLSAgICBGb250OjpzZXRDb2RlUGF0aChmID8gRm9udDo6Q29tcGxleCA6IEZv
bnQ6OkF1dG8pOworICAgIEZvbnRDYXNjYWRlOjpzZXRDb2RlUGF0aChmID8gRm9udENhc2NhZGU6
OkNvbXBsZXggOiBGb250Q2FzY2FkZTo6QXV0byk7CiB9CiAKICsgKHZvaWQpX3NldEFsbG93c1Jv
dW5kaW5nSGFja3M6KEJPT0wpYWxsb3dzUm91bmRpbmdIYWNrcwpAQCAtMzE2OCwxMiArMzE2OCwx
MiBAQCAtIChCT09MKV9kYXNoYm9hcmRCZWhhdmlvcjooV2ViRGFzaGJvYXJkCiAKICsgKHZvaWQp
X3NldFNob3VsZFVzZUZvbnRTbW9vdGhpbmc6KEJPT0wpZgogewotICAgIEZvbnQ6OnNldFNob3Vs
ZFVzZVNtb290aGluZyhmKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5n
KGYpOwogfQogCiArIChCT09MKV9zaG91bGRVc2VGb250U21vb3RoaW5nCiB7Ci0gICAgcmV0dXJu
IEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpOworICAgIHJldHVybiBGb250Q2FzY2FkZTo6c2hv
dWxkVXNlU21vb3RoaW5nKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDcxMCw3ICs0
NzEwLDcgQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgZ3JhbW1hckNoZWNraW5nRW5hYmxlZCA9
IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYkdyYW1tYXJDaGVja2luZ0VuYWJsZWRdOwogI2VuZGlm
CiAKLSAgICBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhbZGVmYXVsdHMgYm9v
bEZvcktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERlZmF1bHRz
S2V5XSA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0RGVm
YXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0S2Vybmlu
Z0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tleV0gPyBLZXJuaW5nIHwgTGln
YXR1cmVzIDogMCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGF1dG9tYXRpY1F1b3RlU3Vi
c3RpdHV0aW9uRW5hYmxlZCA9IFtzZWxmIF9zaG91bGRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bkJlRW5hYmxlZF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244689</attachid>
            <date>2015-01-15 05:50:02 -0800</date>
            <delta_ts>2015-01-15 06:03:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>font-rename-10.patch</filename>
            <type>text/plain</type>
            <size>422834</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZv
bnQoKS5maXJzdEZhbWlseSgpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQo
OCkgPT0gIi13ZWJraXQtIikKICAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFt
ZS5zdWJzdHJpbmcoOCk7CiAKICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1F
KSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpbnQgZm9udFdlaWdodCA9
IC0xOwotICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIHN3aXRjaCAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6
CiAgICAgICAgIGZvbnRXZWlnaHQgPSAxMDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKIAogICAgIHJl
c3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfVU5ERVJMSU5FKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
ICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpID8gInNpbmdsZSIgOiAibm9uZSIpOwogCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAi
aXRhbGljIiA6ICJub3JtYWwiKTsKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwg
c3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3JtYWwiKTsKIAog
ICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmli
dXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERl
Y29yYXRpb24oKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpID8gInRydWUiIDogImZhbHNl
Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgogI2ltcG9ydCAiQ2hyb21l
LmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpAQCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8K
LSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3Ig
PSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4
dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1w
b3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgi
CiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRN
TEFuY2hvckVsZW1lbnQuaCIKQEAgLTg0OCw3ICs4NDgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCBy
YW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNz
aWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNvbG9y
cwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRyYWdJbWFnZS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAi
SFRNTE5hbWVzLmgiCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBh
dXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAj
ZWxzZQogLSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVm
KV9mb250CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
cmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJGbG9hdFBvaW50Lmgi
Ci0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKQEAgLTcxLDcgKzcxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiB1c2luZyBXZWJDb3JlOjpGbG9hdFBvaW50OwotdXNpbmcgV2ViQ29yZTo6Rm9udDsKK3VzaW5n
IFdlYkNvcmU6OkZvbnRDYXNjYWRlOwogdXNpbmcgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Owog
dXNpbmcgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTA0LDggKzE1MDQsOCBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChD
CiBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNl
cGFyYXRlZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+Zm9udCgpLmZh
bWlseUNvdW50KCk7ICsraSkKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQodmFsdWVGb3JGYW1p
bHkoc3R5bGUtPmZvbnQoKS5mYW1pbHlBdChpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+Zm9udENhc2NhZGUoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWls
eUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKQEAgLTI1NDUsNyArMjU0NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWMKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdvcmRCcmVhazoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29y
ZFNwYWNpbmc6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHls
ZS0+Zm9udCgpLndvcmRTcGFjaW5nKCksIHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5n
KCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgogICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1dyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
aXIuaCIKICNpbmNsdWRlICJSR0JDb2xvci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVy
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZjxMb2FkRm9udENhbGxiYWNrPihuZXcgTG9hZEZvbnRDYWxsYmFjayhu
dW1Mb2FkaW5nLCBmb250TG9hZGVyLCBsb2FkQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNrPiBjcmVhdGVGcm9t
UGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYgZm9udExvYWRlciwg
Y29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNr
PiBjcmVhdGVGcm9tUGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYg
Zm9udExvYWRlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBvbnN1Y2Nlc3M7CiAgICAgICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+
IG9uZXJyb3I7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBGb250TG9hZGVyOjpsb2FkRm9udChj
b25zdCBEaWN0aW9uYQogICAgIFN0cmluZyBmb250U3RyaW5nOwogICAgIGlmICghcGFyYW1zLmdl
dCgiZm9udCIsIGZvbnRTdHJpbmcpKQogICAgICAgICByZXR1cm47Ci0gICAgRm9udCBmb250Owor
ICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJp
bmcsIGZvbnQpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+
IGNhbGxiYWNrID0gTG9hZEZvbnRDYWxsYmFjazo6Y3JlYXRlRnJvbVBhcmFtcyhwYXJhbXMsICp0
aGlzLCBmb250KTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250
KGNvbnN0IERpY3Rpb25hCiBib29sIEZvbnRMb2FkZXI6OmNoZWNrRm9udChjb25zdCBTdHJpbmcm
IGZvbnRTdHJpbmcsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzZWNvbmQg
cGFyYW1ldGVyICh0ZXh0KSBpcyBpZ25vcmVkLgotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZvbnRTdHlsZShmb250U3RyaW5nLCBmb250KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250
LmZhbWlseUNvdW50KCk7IGkrKykgewpAQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSgKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShpZCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoaWQp
LmdldCgpKTsKIH0KIAotYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0
cmluZyYgZm9udFN0cmluZywgRm9udCYgZm9udCkKK2Jvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZv
bnRTdHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnRDYXNjYWRlJiBmb250KQogewog
ICAgIC8vIEludGVycHJldCBmb250U3RyaW5nIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2ZvbnQn
IGF0dHJpYnV0ZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuCiAgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9u
dFN0eWxlKGNvbnN0IAogCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZWZhdWx0Rm9u
dERlc2NyaXB0aW9uKTsKIAotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlLT5mb250KCku
Zm9udFNlbGVjdG9yKCkpOworICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250
IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMzE5
LDcgKzMxOSw3IEBAIGJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKICAg
ICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoc3R5bGVSZXNvbHZlciwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZSk7
CiAKLSAgICBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmb250ID0gc3R5bGUtPmZvbnRDYXNj
YWRlKCk7CiAgICAgZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2U7CiBjbGFzcyBEaWN0
aW9uYXJ5OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZvbnQ7CitjbGFz
cyBGb250Q2FzY2FkZTsKIGNsYXNzIExvYWRGb250Q2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBl
bmRpbmdFdmVudHNUaW1lckZpcmVkKCkgeyBmaXJlUGVuZGluZ0V2ZW50cygpOyB9CiAgICAgdm9p
ZCBzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2b2lkIGZpcmVQZW5kaW5n
RXZlbnRzKCk7Ci0gICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYsIEZvbnQm
KTsKKyAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udENhc2NhZGUm
KTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVTaGUKIHsKICAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgdGhpcyk7CiAgICAgaWYgKGF1dG8gcmVuZGVyVmlldyA9IGRvY3VtZW50KCku
cmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnQoKS51cGRhdGUo
Zm9udFNlbGVjdG9yKCkpOworICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIAogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdmlld3BvcnRTdHlsZVJlc29sdmVyKCktPnJlc29sdmUoKTsKQEAgLTc0OCw3
ICs3NDgsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAg
ICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewogICAgICAgICAgICAgc19zdHlsZU5v
dFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwogICAgICAg
ICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3Ip
OworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwogICAgICAgICByZXR1cm4gKnNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC0xMDMxLDkgKzEwMzEsOSBAQCBSZWY8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTCiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBh
cmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBz
dHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7
CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBt
X3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgcmV0
dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvclpvb21DaGFuZ2Uo
c3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNo
YW5nZShzdHlsZSk7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwor
ICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgaWYg
KG1fc3RhdGUuZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKCkpCiAgICAgICAgIHN0eWxlLT5zZXRI
YXNWaWV3cG9ydFVuaXRzKHRydWUpOwogICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0yMTg1LDcgKzIxODUsNyBAQCBp
bmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAKICAgICAvLyBDaGluZXNl
IGFuZCBKYXBhbmVzZSBsYWNrIHdvcmQgYm91bmRhcnkgbWFya3MsIGFuZCB0aGVyZSBpcyBubyBj
bGVhciBhZ3JlZW1lbnQgb24gd2hhdCBjb25zdGl0dXRlcwogICAgIC8vIGEgd29yZCwgc28gdHJl
YXQgdGhlIHBvc2l0aW9uIGJlZm9yZSBhbnkgQ0pLIGNoYXJhY3RlciBhcyBhIHdvcmQgc3RhcnQu
Ci0gICAgaWYgKEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woZmlyc3RDaGFyYWN0ZXIpKQor
ICAgIGlmIChGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJjaFN0
YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFbGVtZW50Lmgi
CiAjaW1wb3J0ICJFbGVtZW50VHJhdmVyc2FsLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVy
LmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgpAQCAtMTExNCw3ICsxMTE0LDcgQEAgc3RhdGlj
IFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0YXRpYyBQbGF0Zm9y
bUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdGF0
aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250
ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEwIEBAIE5TQXR0cmlidXRl
ZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5n
bGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChz
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3Vn
aCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
ICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpXSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKICAgICAgICAgICAgIFthdHRy
cy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSFRNTENvbnZlcnRlci5oIgpAQCAtMjEzLDcgKzIxMyw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVz
dWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkgewogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTIz
NSw3ICsyMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAg
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVu
ZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJp
bWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJp
bWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpA
QCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0Zv
clMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAgIGlm
IChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50
LmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAi
RnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKQEAgLTExNSw3ICsxMTUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpm
b250Rm9yU2VsCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9u
dCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUp
CiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9y
U2VsCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhh
dmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQg
PSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9u
dCkgewpAQCAtMTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclMKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0Zv
bnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAo
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkg
JiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xv
cjo6YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDUsNyArMjEwNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihkZWZhdWx0Rm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dCgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBuZXdTdHls
ZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKQEAgLTIxMjIsNyArMjEyMiw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBzdHlsZVJlc29s
dmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogCi0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9yKCkpOwogICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKICAgICBzdHlsZVJlc29sdmVyLmZvbnRT
ZWxlY3RvcigpLT5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcygmbW9kaWZpYWJsZVN0
YXRlKCkpOwpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdUZXh0SQogICAgIGlmIChmaWxsICYmIGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1pl
cm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBhY2Nl
c3NGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBhY2Nlc3NGb250KCk7CiAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwog
CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gdGV4dDsKQEAgLTIzNzIsMTAgKzIzNzIsMTAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKGxvY2F0aW9uLngoKSAtIG1hc2tSZWN0LngoKSwg
bG9jYXRpb24ueSgpIC0gbWFza1JlY3QueSgpKTsKICAgICAgICAgICAgIC8vIFdlIGRyYXcgd2hl
biBmb250V2lkdGggaXMgMCBzbyBjb21wb3NpdGluZyBvcGVyYXRpb25zIChlZywgYSAiY29weSIg
b3ApIHN0aWxsIHdvcmsuCiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoKGZvbnRXaWR0aCA+IDAgPyAod2lkdGggLyBmb250V2lkdGgpIDogMCksIDEpKTsKLSAg
ICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBG
bG9hdFBvaW50KDAsIDApLCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAg
ICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBGbG9h
dFBvaW50KDAsIDApLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUo
LW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250
ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwpAQCAtMjM5OCwxNSArMjM5OCwxNSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAgICBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNv
bXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBs
b2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAg
ICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250OjpVc2VG
YWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRl
eHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7
CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgewotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhdyh0ZXh0UmVjdCk7CiAgICAgfQogfQpAQCAtMjQyNiw3ICsyNDI2LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmluZmxhdGVTdAogICAgIHJlY3QuaW5mbGF0ZShk
ZWx0YSk7CiB9CiAKLWNvbnN0IEZvbnQmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YWNjZXNz
Rm9udCgpCitjb25zdCBGb250Q2FzY2FkZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nl
c3NGb250KCkKIHsKICAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAKICAgICAgICAgU3RyaW5nIG1f
dW5wYXJzZWRGb250OwotICAgICAgICBGb250IG1fZm9udDsKKyAgICAgICAgRm9udENhc2NhZGUg
bV9mb250OwogICAgICAgICBib29sIG1fcmVhbGl6ZWRGb250OwogICAgIH07CiAKQEAgLTMwOCw3
ICszMDgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0
cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCA9
IDAsIGJvb2wgdXNlTWF4V2lkdGggPSBmYWxzZSk7CiAKLSAgICBjb25zdCBGb250JiBhY2Nlc3NG
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGFjY2Vzc0ZvbnQoKTsKIAogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxNZW5jbG9zZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIFN0cmluZyBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OmxvbmdEaXZM
ZWYKICAgICBUZXh0UnVuIHJ1bihjbG9zaW5nQnJhY2UuaW1wbCgpLCBjbG9zaW5nQnJhY2UubGVu
Z3RoKCkpOwogICAgIE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKG5vZGUgJiYg
bm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBwYWRk
aW5nLmFwcGVuZE51bWJlcihmb250LndpZHRoKHJ1bikpOwogICAgICAgICBwYWRkaW5nLmFwcGVu
ZExpdGVyYWwoInB4Iik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEdlbmVyaWNGYW1pbGll
cy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudVN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51U3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBQb3B1cE1lbnVTdHlsZV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBvcHVwTWVudVNpemVNaW5pCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udCYg
Zm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFw
cGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24s
IGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tn
cm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1l
bnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVT
aXplTm9ybWFsKQorICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgdmlz
aWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5n
dGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHRE
aXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBl
ID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVj
dFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKICAg
ICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAgICAsIG1fYmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQpCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2ZvcmVncm91bmRDb2xvcjsgfQogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIGNvbnN0
IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQogICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25lKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25lOyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0QXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7IH0KQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2xvciBtX2ZvcmVncm91bmRDb2xv
cjsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBGb250IG1fZm9udDsKKyAgICBG
b250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgYm9vbCBtX2lzRGlz
cGxheU5vbmU7CiAgICAgYm9vbCBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRy
b2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CkBAIC00Miw3ICs0Miw3IEBAIExlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250
cm9sUGEKICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ1NTIHN5c3RlbSBjb2xvcnMg
YW5kIGZvbnRzCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihUaGVtZUNvbG9yKSBjb25z
dCB7IHJldHVybiBDb2xvcigpOyB9Ci0gICAgdmlydHVhbCBGb250IHN5c3RlbUZvbnQoVGhlbWVG
b250LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCB7IHJldHVybiBGb250KCk7IH0KKyAgICB2aXJ0
dWFsIEZvbnRDYXNjYWRlIHN5c3RlbUZvbnQoVGhlbWVGb250LCBGb250RGVzY3JpcHRpb24mKSBj
b25zdCB7IHJldHVybiBGb250Q2FzY2FkZSgpOyB9CiAgICAgCiAgICAgLy8gSG93IGZhc3QgdGhl
IGNhcmV0IGJsaW5rcyBpbiB0ZXh0IGZpZWxkcy4KICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiAwLjU7IH0KQEAgLTgyLDE3ICs4MiwxNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5bGVzIG9m
IGNvbnRyb2xzLgogICAgIAogICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3VsdCBzaG91
bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IC8qem9vbUZh
Y3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdmly
dHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5m
b250RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9v
bWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBh
bHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIExlbmd0
aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9v
bWVkU2l6ZTsgfQorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9vbWVkU2l6ZTsgfQogICAgIAogICAg
IC8vIFJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29y
ZGluYXRlcy4gIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KICAgICAKICAgICAv
LyBBbGxvd3MgdGhlIHRoZW1lIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIu
Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29u
c3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAgICAgCiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hp
dGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGcmFtZVZp
ZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIGFsbG93IGNvbXBp
bGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBo
YXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBjbGFzcyBkZWZpbml0aW9uCi10ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRM
YXlvdXQqIHB0cikKLXsKLSAgICBXZWJDb3JlOjpGb250OjpkZWxldGVMYXlvdXQocHRyKTsKLX0K
LQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLQotY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFj
a0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLAotICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAg
IDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotfTsKLQotc3RhdGljIGJvb2wgaXNEcmF3
bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gcnVuLnJlbmRl
cmluZ0NvbnRleHQoKTsKLX0KLQotc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiogc2V0OwotICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHNldCA9IG5ldyBIYXNoU2V0
PEF0b21pY1N0cmluZz47Ci0gICAgICAgIHNldC0+YWRkKCJNUyBQR290aGljIik7Ci0gICAgICAg
IFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwg
MHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBzZXQtPmFk
ZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5p
Y29kZU5hbWVNU1BHb3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsK
LSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywg
MHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWlj
U3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1l
TVNQTWluY2hvKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBHb3RoaWMiKTsKLSAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4
MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0
cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNH
b3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIE1pbmNobyIpOwotICAgICAgICBVQ2hh
ciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBF
LCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TTWluY2hvKSkpOwotCi0gICAgICAg
IHNldC0+YWRkKCJNZWlyeW8iKTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9
IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUF9OwotICAgICAgICBzZXQtPmFkZChBdG9t
aWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVN
ZWlyeW8pKSk7Ci0gICAgfQotICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0K
LUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOwotCi1UeXBlc2V0dGluZ0Zl
YXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAo
Q3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLUZvbnQ6OkZvbnQoKQotICAgIDogbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBt
X3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQot
ICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDApCi17Ci19Ci0KLUZvbnQ6OkZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNp
bmcpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKLSAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZk
LmZpcnN0RmFtaWx5KCkpKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlz
IGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0
ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCi0gICAgLCBtX2xldHRlclNwYWNpbmcoMCkKLSAg
ICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFs
c2UpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSkKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50
ZXJGb250KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9v
dGhpbmdNb2RlKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQo
KSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKLSNlbmRpZgotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9y
UGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwg
bV93b3JkU3BhY2luZygwKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERh
dGEuZm9udCgpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250
R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9u
dFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdl
dFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdl
aWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50ZXJGb250KCkpOwotICAgIG1fZ2x5cGhzID0g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxl
Y3Rvci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikK
LSAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQotICAgICwg
bV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCi0gICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9s
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQot
ICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0Zl
YXR1cmVzKCkpCi17Ci19Ci0KLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhl
cikKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwot
ICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7Ci0gICAgbV9sZXR0ZXJTcGFjaW5nID0gb3Ro
ZXIubV9sZXR0ZXJTcGFjaW5nOwotICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNl
dHRpbmdGZWF0dXJlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgRm9udDo6b3BlcmF0
b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3Jp
cHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dv
cmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVyLm1fZ2x5cGhzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDYW4gdGhl
c2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lw
ZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVj
dG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBv
dGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewotICAgIC8vIFRo
aXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2Fj
aGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCi0gICAgRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCAzPiBmYW1pbGllczsKLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKLSAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdz
OwotfTsKLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhz
Q2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQotICAgICAgICA6IGtleShXVEY6Om1v
dmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShnKSkKLSAgICB7IH0KLSAgICBGb250
R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7Ci19OwotCi10
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVF
bnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHNDYWNoZTsKLQotc3RhdGljIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNo
ZUtleSYgYikKLXsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnRE
ZXNjcmlwdGlvbkNhY2hlS2V5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZm9u
dFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24g
IT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250
U2VsZWN0b3JGbGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmZhbWlsaWVz
LnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxp
ZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgp
Ci17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwg
Y2FjaGUsICgpKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgaW52YWxpZGF0ZUZvbnRH
bHlwaHNDYWNoZSgpCi17Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsKLX0KLQotdm9p
ZCBjbGVhcldpZHRoQ2FjaGVzKCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2Fj
aGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIo
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlRm9udEdseXBo
c0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBrZXkuZm9u
dERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRl
c2NyaXB0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKQotICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpKTsKLSAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwotICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwotICAgIGtleS5m
b250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVz
RmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlv
bikgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2go
Y29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA3
PiBoYXNoQ29kZXM7Ci0gICAgaGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtl
eS5mYW1pbGllcy5zaXplKCkpOwotCi0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgaGFzaENvZGVzLnVu
Y2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9ySWQpOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytpKQotICAgICAgICBoYXNoQ29kZXMudW5jaGVj
a2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2go
a2V5LmZhbWlsaWVzW2ldKSA6IDApOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVk
KSk7Ci19Ci0KLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNo
ZSgpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7Ci0gICAgRm9udEdseXBo
c0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsKLSAgICBmb3Ig
KEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgp
Lmhhc09uZVJlZigpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci19Ci0KLXN0YXRp
YyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi17Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9u
dEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkp
OwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7
Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0Nh
Y2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7
Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVu
dHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIG5ld0VudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSks
IEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBSZWY8Rm9udEdseXBocz4g
Z2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVy
OwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1
bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVuZUNvdW50ZXIg
JSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRF
bnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2Fs
IGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJp
ZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5i
ZWdpbigpKTsKLSAgICByZXR1cm4gZ2x5cGhzOwotfQotCi12b2lkIEZvbnQ6OnVwZGF0ZShQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAotewotICAgIG1fZ2x5cGhz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7Ci0gICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tz
bGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKLSAgICBtX3R5cGVzZXR0aW5n
RmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi1mbG9hdCBGb250
OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Ci17Ci0gICAgLy8gRG9u
J3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJl
IGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCi0gICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2Un
IGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFs
bGJhY2sKLSAgICAvLyBmb250KS4KLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8p
OwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8g
RklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVu
cyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAw
MDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3Ro
KCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9
IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICBy
ZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotCi0g
ICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYgKGlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0byA8IDAp
Ci0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
Y29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIGVsc2UKLSAgICAgICAg
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50
LCBmcm9tLCB0byk7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVy
bmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBl
eHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgotICAgICAgICBpZiAo
IWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQotICAgICAgICAgICAgZmFs
bGJhY2tGb250cyA9IDA7Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUg
dGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCi0gICAgICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92
ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKLSAgICAgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVz
ID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgIGJv
b2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRl
clNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hl
KCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBpZiAoY2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkp
Ci0gICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKLQotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Ci0gICAgaWYgKCFmYWxsYmFja0ZvbnRzKQot
ICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKLQotICAgIGZsb2F0
IHJlc3VsdDsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQotICAgICAgICByZXN1
bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBpZiAoY2FjaGVF
bnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICpjYWNoZUVudHJ5ID0g
cmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkKLSAgICAgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSNlbmRp
ZgotCi0gICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5sZW5ndGgoKTsKLSAgICBnbHlwaE5hbWUgPSAi
IjsKLSAgICByZXR1cm4gd2lkdGgocnVuKTsKLX0KLQotR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkgY29uc3QKLXsKLSAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgp
LmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihj
KTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAgICAgIGMgPSB1
cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKLSAg
ICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gdV9jaGFyTWlycm9yKGMpOwotCi0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3Jp
cHRpb24sIHZhcmlhbnQpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxU
ZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBj
b25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KikKLXsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7
Ci0gICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAotICAgICJBcmlhbCBIZWJyZXciLAotICAgICJD
aGFsa2JvYXJkIiwKLSAgICAiQ29jaGluIiwKLSAgICAiQ29yc2l2YSBIZWJyZXciLAotICAgICJD
b3VyaWVyIiwKLSAgICAiRXVwaGVtaWEgVUNBUyIsCi0gICAgIkdlbmV2YSIsCi0gICAgIkdpbGwg
U2FucyIsCi0gICAgIkhlaSIsCi0gICAgIkhlbHZldGljYSIsCi0gICAgIkhvZWZsZXIgVGV4dCIs
Ci0gICAgIkluYWlNYXRoaSIsCi0gICAgIkthaSIsCi0gICAgIkx1Y2lkYSBHcmFuZGUiLAotICAg
ICJNYXJrZXIgRmVsdCIsCi0gICAgIk1vbmFjbyIsCi0gICAgIk1zaHRha2FuIiwKLSAgICAiTmV3
IFBlbmluaW0gTVQiLAotICAgICJPc2FrYSIsCi0gICAgIlJhYW5hbmEiLAotICAgICJTVEhlaXRp
IiwKLSAgICAiU3ltYm9sIiwKLSAgICAiVGltZXMiLAotICAgICJBcHBsZSBCcmFpbGxlIiwKLSAg
ICAiQXBwbGUgTGlHb3RoaWMiLAotICAgICJBcHBsZSBMaVN1bmciLAotICAgICJBcHBsZSBTeW1i
b2xzIiwKLSAgICAiQXBwbGVHb3RoaWMiLAotICAgICJBcHBsZU15dW5nam8iLAotICAgICIjR3Vu
Z1NlbyIsCi0gICAgIiNIZWFkTGluZUEiLAotICAgICIjUENNeXVuZ2pvIiwKLSAgICAiI1BpbEdp
IiwKLX07Ci0KLS8vIEZvciBmb250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9u
J3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBPUy8yIHRhYmxlCi0vLyBmb3IgYXZnQ2hhcldp
ZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRo
ZSBhdmdDaGFyV2lkdGgKLS8vIGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2Vl
bXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAotLy8gYnV0LCBpbiBv
cmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhp
cyBjaGVjayBmb3IKLS8vIGFsbCBwbGF0Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFt
aWx5KCk7Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotICAgIC8vIEludGVybmFsIGZv
bnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFi
bGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOwot
Ci0gICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgewotICAgICAg
ICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21p
Y1N0cmluZz47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQotICAgICAgICAgICAg
Zm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbaV0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOwot
fQotCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdp
ZHRoKSBjb25zdAotewotICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9u
dERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdo
dCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
LXsKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0g
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgcmV0dXJuIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOwot
Ci0gICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVj
dGlvblJlY3QsIGZyb20sIHRvKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKLQotICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0lu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7Ci0gICAgbm9ybWFsaXplZC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3RlcnNbaV0pKTsKLQotICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKLQotdm9pZCBGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3Ro
aW5nOwotfQotCi1ib29sIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCi17Ci0gICAgcmV0dXJu
IHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci19Ci0KLXZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29k
ZVBhdGggcCkKLXsKLSAgICBzX2NvZGVQYXRoID0gcDsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9u
dDo6Y29kZVBhdGgoKQotewotICAgIHJldHVybiBzX2NvZGVQYXRoOwotfQotCi12b2lkIEZvbnQ6
OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcykKLXsKLSAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlw
ZXNldHRpbmdGZWF0dXJlczsKLX0KLQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlcygpCi17Ci0gICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXM7Ci19Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRS
dW4mIHJ1bikgY29uc3QKLXsKLSAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQotICAgICAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICByZXR1cm4gU2ltcGxlOwotI2VuZGlmCi0KLSAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3Jp
cHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBDb21w
bGV4OwotICAgIAotICAgIGlmIChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMpKQotICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQotICAgICAgICBy
ZXR1cm4gU2ltcGxlOwotCi0gICAgaWYgKHJ1bi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFNp
bXBsZTsKLQotICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRp
bmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCi0gICAgcmV0
dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3Ro
KCkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRo
YXQgd2UgCi0gICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5
L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIG5vdCAnY29tYmluaW5n
JywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KLSAgICAvLyBBbHRl
cm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBz
b3J0ZWQKLSAgICAvLyBsaXN0IG9mIHJhbmdlcy4KLSAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1w
bGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBV
KzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxldHRlcnMpICAK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDJFOSkgCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAg
dGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzNkYpCi0gICAgICAgICAgICByZXR1cm4gQ29t
cGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkx
IHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywg
SGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1a2hhCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJp
YywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAotICAgICAgICAvLyBE
ZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVs
dWd1LCBLYW5uYWRhLCAKLSAgICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8s
IFRpYmV0YW4sIE15YW5tYXIKLSAgICAgICAgaWYgKGMgPCAweDA2MDApIAotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTA5RikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAo
b25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3Nl
OwotICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1
bHQgb2Ygc3RlcCBBKQotICAgICAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDExRkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICBpZiAoYyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0
aGlvcGljIGNvbWJpbmluZyBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChjIDw9IDB4MTM1RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlm
IChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywg
QnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xpYW4KLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE4QUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChV
bmljb2RlIDQuMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDE5
NEYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTk4
MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5ldyBUYWkgTHVlCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOURGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBC
dWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRpYwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MUNGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3Vn
aCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxREZGKQotICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMg
d2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKLSAgICAgICAgaWYgKGMgPD0g
MHgyMDAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAweDIw
RDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDIwRkYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VG
IHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgyQ0YxKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAy
RiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDMwMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJp
bmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHhBNjdEKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFy
ayBmb3IgQmFtdW0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEE2
RjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgIC8vIFUrQTgwMCB0aHJv
dWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5k
ZWQsCi0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRl
bmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAotICAgICAgICBpZiAoYyA8IDB4QTgwMCkg
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQotICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdC
MCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBFeHQuIEIKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9n
YXRlCi0KLSAgICAgICAgICAgIGlmIChpID09IGxlbiAtIDEpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysraV07Ci0gICAg
ICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgVUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFs
IEluZGljYXRvciBTeW1ib2xzCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweDFGMUZGKQotICAgICAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3Rl
ciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9u
IHNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAxRUYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzEx
MDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3Jp
cHRzCi0gICAgICAgICAgICAvLyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KLQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAw
IHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4RkUwRikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZF
MkYgQ29tYmluaW5nIGhhbGYgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoYyA8PSAweEZFMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMp
Ci17Ci0gICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCi0gICAg
aWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgotICAgIGlmIChj
ID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRTgwICYmIGMg
PD0gMHgyRUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBLYW5neGkgUmFk
aWNhbHMuCi0gICAgaWYgKGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgU3Ryb2tlcy4KLSAgICBpZiAoYyA+PSAweDMxQzAg
JiYgYyA8PSAweDMxRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCi0gICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhG
QUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVv
Z3JhcGhzIEV4dGVuc2lvbiBCLgotICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRl
b2dyYXBocyBFeHRlbnNpb24gQy4KLSAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjcz
RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dy
YXBocyBFeHRlbnNpb24gRC4KLSAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRl
b2dyYXBocyBTdXBwbGVtZW50LgotICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKLXsKLSAgICAvLyAweDJDNyBD
YXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQotICAgIC8vIDB4MkNBIE1vZGlmaWVyIExl
dHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKLSAgICAvLyAweDJD
QiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25l
IAotICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKLSAg
ICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMg
PT0gMHgyRDkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIwMjAp
IHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChj
ID09IDB4MjAzQykKLSAgICAgICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8
IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEpCi0gICAgICAg
IHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChj
ID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQotICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8
IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09
IDB4MjEyMSkKLSAgICAgICAgfHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChj
ID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1QSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdC
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09
IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNC
RSkgfHwgKGMgPT0gMHgyM0JGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+
PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAweDI0OTIpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgyNDlDICYmIGMgPD0gMHgyNEZGKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0g
MHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChjID09IDB4MjVBQikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9
PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1
QkMpIHx8IChjID09IDB4MjVCRCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlm
ICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9
PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1
Q0MpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9
IDB4MjVEMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI1RTIgJiYg
YyA8PSAweDI1RTYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyNUVG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4
MjYwMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAo
YyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAw
eDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkg
fHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMg
PT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID09IDB4MkIxQSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgotICAgIGlm
IChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgot
ICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgzMDMwKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0gMHgzMDNGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhpcmFnYW5hCi0gICAgaWYgKGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEthdGFrYW5hIAotICAgIGlmIChjID49
IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBC
b3BvbW9mbwotICAgIGlmIChjID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKLSAgICBpZiAoYyA+PSAw
eDMxQTAgJiYgYyA8PSAweDMxQkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotIAotICAgIC8vIEVu
Y2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCi0gICAgaWYgKGMgPj0gMHgzMjAwICYmIGMg
PD0gMHgzMkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0
aWJpbGl0eS4KLSAgICBpZiAoYyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLgotICAgIGlm
IChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwg
KGMgPT0gMHhGRTE5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHhG
RjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGgg
Rm9ybXMKLSAgICAvLyBVc3VhbGx5IG9ubHkgdXNlZCBpbiBDSksKLSAgICBpZiAoYyA+PSAweEZG
MDAgJiYgYyA8PSAweEZGRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW1vamku
Ci0gICAgaWYgKGMgPT0gMHgxRjEwMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgxRjE0OSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7Ci19Ci0K
LXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAg
IGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
XSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bikKLXsKLSAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7
Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0
ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4
cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAt
IDFdOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFy
YWN0ZXJzW2kgLSAyXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9n
cmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIGlmIChzdHJpbmdWaWV3LmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0
cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBp
c0FmdGVyRXhwYW5zaW9uKTsKLSAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRp
cmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9H
Q19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9y
IGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBO
b3ZlbWJlciAyMDEwLgotICAgIGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVn
ZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90Ci0gICAg
ICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJz
eWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGb250Ojpp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1f
Z2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwotfQotICAgIAotR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgp
Ci17Ci0gICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2
ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNp
cmFibGUgcmVuZGVyaW5ncywKLSAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksg
Y2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KLSAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7Ci0KLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0g
R2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGlj
aCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgotICAgICAgICByZXR1cm4gR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7Ci0g
ICAgfQotICAgIAotICAgIGlmICh0ZXh0UnVuLmlzOEJpdCgpKQotICAgICAgICBiYXNlQ2hhcmFj
dGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKLSAgICBlbHNlCi0g
ICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0
ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAKLSAgICAvLyB1X2dldEludFBy
b3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZv
ciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4g
dXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KLSAg
ICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOwot
ICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NV
UFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgot
ICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURf
SURFT0dSQVBIU19FWFRFTlNJT05fQToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVP
R1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM6Ci0g
ICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM6Ci0gICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQjoKLSAgICBjYXNlIFVCTE9DS19DSktf
Q09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1NUUk9LRVM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9E
OgotICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6Ci0g
ICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TOgotICAgIGNhc2UgVUJMT0NLX0VOQ0xP
U0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6Ci0g
ICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01PRk86Ci0gICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pB
TU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoKLSAgICBjYXNl
IFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VY
VEVOREVEX0E6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQjoKLSAgICAg
ICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3
T3ZlckdseXBoOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5z
bGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7Ci0gICAgfQotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udF9oCi0j
ZGVmaW5lIEZvbnRfaAotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIlBhdGguaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0KLS8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8gMCBhbmQgY29u
ZmxpY3RzCi0vLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4KLSNpZmRlZiBD
b21wbGV4Ci0jdW5kZWYgQ29tcGxleAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnREYXRhOwotY2xh
c3MgRm9udE1ldHJpY3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgRm9udFNlbGVj
dG9yOwotY2xhc3MgR2x5cGhCdWZmZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBM
YXlvdXRSZWN0OwotY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFRleHRMYXlvdXQ7Ci1jbGFzcyBU
ZXh0UnVuOwotCi1zdHJ1Y3QgR2x5cGhEYXRhOwotCi1zdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7Ci0g
ICAgR2x5cGhPdmVyZmxvdygpCi0gICAgICAgIDogbGVmdCgwKQotICAgICAgICAsIHJpZ2h0KDAp
Ci0gICAgICAgICwgdG9wKDApCi0gICAgICAgICwgYm90dG9tKDApCi0gICAgICAgICwgY29tcHV0
ZUJvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNFbXB0eSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRv
bTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlwaE92ZXJmbG93
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0
KTsKLSAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQpOwotICAgICAg
ICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7Ci0gICAgICAgIGJvdHRvbSA9IHN0ZDo6
bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbGVmdCAh
PSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBvdGhlci50b3Ag
fHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbnQgbGVmdDsKLSAgICBp
bnQgcmlnaHQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgYm90dG9tOwotICAgIGJvb2wgY29tcHV0
ZUJvdW5kczsKLX07Ci0KLWNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5
cGgsIERyYXdPdmVyR2x5cGh9OwotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygp
ID0gMDsKLSAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Ci0gICAgdmlydHVhbCBHbHlwaFVuZGVybGlu
ZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0g
MDsKLSAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KLX07Ci1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwotCi1jbGFzcyBG
b250IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBm
bG9hdCB3b3JkU3BhY2luZyk7Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQg
aWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRp
bmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLSNlbmRpZgotICAgIH5Gb250KCk7Ci0KLSAgICBGb250KGNv
bnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9u
dCYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90
aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9
Ci0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRQaXhlbFNpemUoKTsgfQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotCi0gICAgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKLQotICAgIGVudW0gQ3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKLQotICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
Ci0gICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0
TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9Ci0KLSAgICBmbG9hdCB3b3JkU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KLSAgICBmbG9hdCBsZXR0ZXJTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgdm9pZCBzZXRXb3JkU3Bh
Y2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9Ci0gICAgdm9pZCBzZXRMZXR0ZXJT
cGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQotICAgIAotICAgIEZvbnRSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCk7IH0KLQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0aW5nRmVhdHVy
ZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpOyB9Ci0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsgfQotCi0gICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lkdGhWYXJpYW50
IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFy
aWFudCgpOyB9Ci0KLSAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9n
bHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KLQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNz
KCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lk
dGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9z
aXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXpl
LCBwb3NpdGlvbik7IH0KLSAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0
OwotICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgp
IGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwotCi0gICAgaW50IGVtcGhhc2lzTWFy
a0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
RGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
SGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZh
bGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9W
YXJpYW50KSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOwotICAgIHN0YXRpYyBib29s
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7Ci0KLSAgICAvLyBCRVdBUkU6IElmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhl
IHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkKLSAgICAvLyB3
aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29tcGVuc2F0ZXMK
LSAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZhbHVlIGlmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiwgVGV4
dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7Ci0KLSAgICBlbnVtIENvZGVQ
YXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB9Owot
ICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAgICBzdGF0aWMg
Q29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVuc2lnbmVkKSB7
IHJldHVybiBTaW1wbGU7IH0KLSAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2Rl
UGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7Ci0KLSAgICBib29sIHByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gRm9yVGV4dEVt
cGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0
RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBo
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBmbG9hdCBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAgICBib29sIGdl
dEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBj
b25zdDsKLQotICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4
VGV4dCgpOwotICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNl
LgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JO
b3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7Ci0KLXB1
YmxpYzoKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9y
VGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbikKLSAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhlci5t
X2xldHRlclNwYWNpbmcKLSAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0gb3RoZXIubV93
b3JkU3BhY2luZzsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5n
IHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7Ci0gICAgc3RhdGljIENvZGVQ
YXRoIGNvZGVQYXRoKCk7Ci0gICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhU
eXBlc2V0dGluZ0ZlYXR1cmVzKTsKLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBkZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19y
b3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwotICAgIHN0YXRpYyBib29sIGlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGMgJiB+
MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKLSAgICB9Ci0KLSAgICBG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIHRyZWF0
QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAn
XG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9X
aWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVy
biBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4g
fHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8
IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3Bh
Y2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQotICAgIHN0YXRpYyBib29s
IGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
VUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLQot
ICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBG
b250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKLQotICAgIFR5
cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnRE
ZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1
cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgICAgICBz
d2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXV0b1RleHRSZW5kZXJp
bmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcHRpbWl6ZVNwZWVkOgotICAg
ICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKLSAgICAgICAgY2FzZSBP
cHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGln
YXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9u
LmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1
cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpF
bmFibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVy
ZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBt
X2ZvbnREZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBo
czsKLSAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Ci0gICAgZmxvYXQgbV93b3JkU3BhY2luZzsK
LSAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1
cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRpb24uCi19Owot
Ci12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
Ci0KLWlubGluZSBGb250Ojp+Rm9udCgpCi17Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVGb250
RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlw
aHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERl
c2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNr
UmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsK
LSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2Ny
aXB0aW9uLCBpbmRleCk7Ci19Ci0KLWlubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4
ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBGb250U2VsZWN0b3IqIEZv
bnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlw
aHMtPmZvbnRTZWxlY3RvcigpIDogMDsKLX0KLQotaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRo
KGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCF0YWJTaXplKQotICAgICAgICByZXR1cm4gbGV0
dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNw
YWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJEZWx0YVdpZHRoID0g
dGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOwotICAgIHJldHVybiAodGFiRGVs
dGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0
YVdpZHRoOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
bGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250U2Vs
ZWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNz
IEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBPcGVuVHlwZVZl
cnRpY2FsRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExh
eW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRM
YXlvdXQgY2xhc3MgZGVmaW5pdGlvbgordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxX
ZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCit7CisgICAgV2Vi
Q29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7Cit9CisKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisK
K2NvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
eworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKKyAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMSAvKj8qLywKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKK307CisKK3N0YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0
UnVuJiBydW4pCit7CisgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Cit9CisKK3N0
YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKKyAgICBpZiAo
IXNldCkgeworICAgICAgICBzZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAg
ICBzZXQtPmFkZCgiTVMgUEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdv
dGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcs
IDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVO
YW1lTVNQR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwor
CisgICAgICAgIHNldC0+YWRkKCJNUyBQTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNQTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUs
IDB4NjcxRH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKKworICAgICAg
ICBzZXQtPmFkZCgiTVMgR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3Ro
aWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAw
eDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhp
YywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TR290aGljKSkpOworCisgICAgICAgIHNl
dC0+YWRkKCJNUyBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1td
ID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKKyAgICAgICAgc2V0
LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgo
dW5pY29kZU5hbWVNU01pbmNobykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Cisg
ICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBF
QSwgMHgzMEFBfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVp
cnlvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOworICAgIH0KKyAgICBy
ZXR1cm4gc2V0LT5jb250YWlucyhmYW1pbHkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250Ojpz
X2NvZGVQYXRoID0gQXV0bzsKKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIEZvbnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24p
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb250OjpGb250KCkK
KyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcygwKQoreworfQorCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZs
b2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorICAgIDogbV9mb250RGVzY3Jp
cHRpb24oZmQpCisgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcod29yZFNwYWNpbmcpCisgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
fQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1p
bmRlcGVuZGVudC4KK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEs
IGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
CisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisg
ICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGlu
Z0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0
U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBl
bmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkp
CisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
ICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmlt
YXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5
bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5
Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5v
cm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEu
aXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlm
CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhz
KQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKKyAgICAsIG1fdHlwZXNl
dHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQoreworfQorCitGb250
JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250RGVzY3Jp
cHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtX2dseXBocyA9IG90aGVyLm1f
Z2x5cGhzOworICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKKyAg
ICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKKyAgICBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgPSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZm9u
dERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2lu
ZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dv
cmRTcGFjaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzID09IG90
aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fZ2x5cGhzIHx8
ICFvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVo
b3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJl
Y2FsYy4KKyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5t
X2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fZ2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdHJ1
Y3QgRm9udEdseXBoc0NhY2hlS2V5IHsKKyAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBz
aGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9i
amVjdHMpLgorICAgIEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
dW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lv
bjsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKK307CisKK3N0cnVjdCBGb250R2x5
cGhzQ2FjaGVFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRH
bHlwaHM+JiYgZykKKyAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQorICAgICAgICAsIGdseXBo
cyhXVEY6Om1vdmUoZykpCisgICAgeyB9CisgICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKKyAg
ICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBG
b250R2x5cGhzQ2FjaGU7CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBo
c0NhY2hlS2V5JiBhLCBjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCit7CisgICAgaWYgKGEu
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNl
bGVjdG9ySWQgfHwgYS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lv
biB8fCBhLmZvbnRTZWxlY3RvckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYS5mYW1pbGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGEuZmFtaWxpZXNbaV0uaW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Rm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgcmV0dXJu
IGNhY2hlOworfQorCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQoreworICAgIGZv
bnRHbHlwaHNDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3ZvaWQgY2xlYXJXaWR0aENhY2hlcygpCit7
CisgICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9u
dEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVl
LT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlw
dCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
KTsKK30KKworc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2Fj
aGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCit7CisgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0g
Rm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAg
ICAga2V5LmZhbWlsaWVzLmFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAga2V5
LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgp
IDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRT
ZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250
U2VsZWN0b3IgJiYgZm9udFNlbGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikg
PyBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKK30KKworc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtl
eSYga2V5KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOworICAgIGhhc2hD
b2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKKwor
ICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5
LmNvbXB1dGVIYXNoKCkpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvcklkKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JWZXJzaW9uKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JGbGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNb
aV0uaW1wbCgpID8gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsK
KworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwg
aGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworfQorCit2b2lkIHBydW5lVW5y
ZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQoreworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgNTA+IHRvUmVtb3ZlOworICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0g
Zm9udEdseXBoc0NhY2hlKCkuZW5kKCk7CisgICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBmb250R2x5cGhzQ2FjaGUo
KS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQoreworICAgIEZv
bnRHbHlwaHNDYWNoZUtleSBrZXk7CisgICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOworICAgIEZvbnRHbHlwaHNDYWNoZTo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkgJiYgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKKyAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9u
dEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9u
dFNlbGVjdG9yKSk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlw
aHMuZ2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJ
bnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7
CisgICAgc3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAvLyBSZWZlcmVuY2VkIEZv
bnRHbHlwaHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUg
bWVtb3J5LgorICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRl
cnZhbCkpCisgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2Fj
aGUoKTsKKyAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCisgICAgaWYgKGZvbnRH
bHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQorICAgICAgICBmb250R2x5cGhz
Q2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAgcmV0dXJuIGds
eXBoczsKK30KKwordm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKK3sKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Zmlyc3RGYW1pbHkoKSk7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVz
ZXR0aW5nRmVhdHVyZXMoKTsKK30KKworZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAoreworICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAorICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCisgICAgLy8gZm9udCkuCisg
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0
byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29k
ZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRv
VXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdG
b250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNv
bnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBkcmF3Q29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5n
dGgoKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAg
IC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFs
IHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdG
ZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxl
bmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9V
c2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAg
ICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9p
bnQsIGZyb20sIHRvKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworfQorCitmbG9h
dCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK3sKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKKyAgICBp
ZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CisgICAgICAgIC8vIFRoZSBjb21wbGV4IHBh
dGggaXMgbW9yZSByZXN0cmljdGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhh
biB0aGUgc2ltcGxlIHBhdGgsIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRo
ZWlyIGJlaGF2aW9ycyBtYXRjaC4KKyAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOworICAgICAg
ICAvLyBUaGUgc2ltcGxlIHBhdGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92
ZXJmbG93IGlzIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBT
aW1wbGVXaXRoR2x5cGhPdmVyZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxv
dy0+Y29tcHV0ZUJvdW5kcykpCisgICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKKyAgICB9
CisKKyAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMo
KSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0
ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQq
IGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGNhY2hl
RW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1cm4gKmNhY2hl
RW50cnk7CisKKyAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFj
a0ZvbnRzOworICAgIGlmICghZmFsbGJhY2tGb250cykKKyAgICAgICAgZmFsbGJhY2tGb250cyA9
ICZsb2NhbEZhbGxiYWNrRm9udHM7CisKKyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKGNvZGVQ
YXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMs
IGdseXBoT3ZlcmZsb3cpOworCisgICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+
aXNFbXB0eSgpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hh
cnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIHJldHVybiBy
dW4ucmVuZGVyaW5nQ29udGV4dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4s
IGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisjZW5kaWYKKworICAgIGNoYXJzQ29uc3VtZWQg
PSBydW4ubGVuZ3RoKCk7CisgICAgZ2x5cGhOYW1lID0gIiI7CisgICAgcmV0dXJuIHdpZHRoKHJ1
bik7Cit9CisKK0dseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7CisgICAgaWYg
KHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgICAgICBpZiAodXBw
ZXJDICE9IGMpIHsKKyAgICAgICAgICAgICAgICBjID0gdXBwZXJDOworICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgfQorCisgICAgaWYgKG1pcnJvcikK
KyAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKKworICAgIHJldHVybiBtX2dseXBocy0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKwor
I2lmICFQTEFURk9STShDT0NPQSkKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRl
TGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit7Cit9CisK
K2Zsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250
RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3Jp
dGVyIiwKKyAgICAiQXJpYWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hp
biIsCisgICAgIkNvcnNpdmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlh
IFVDQVMiLAorICAgICJHZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAg
ICJIZWx2ZXRpY2EiLAorICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAg
ICJLYWkiLAorICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJN
b25hY28iLAorICAgICJNc2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nh
a2EiLAorICAgICJSYWFuYW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAg
IlRpbWVzIiwKKyAgICAiQXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAg
ICAiQXBwbGUgTGlTdW5nIiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGlj
IiwKKyAgICAiQXBwbGVNeXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVB
IiwKKyAgICAiI1BDTXl1bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBm
YW1pbGllcyB3aGVyZSBhbnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBp
biB0aGUgT1MvMiB0YWJsZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxl
Z2FjeSB3ZWJraXQgYmVoYXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9t
IHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQg
bnVtYmVyIG9mIE1hYyBmb250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVu
ZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxh
dGZvcm1zLgorYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorewor
ICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOworICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKElPUykKKyAgICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxz
byBoYXZlIGFuIGludmFsaWQgZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCisg
ICAgaWYgKHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1p
bGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gMDsKKworICAgIGlmICghZm9udEZhbWlsaWVz
V2l0aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFs
aWRDaGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aCk7ICsraSkKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlk
Q2hhcldpZHRoTWFwLT5hZGQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoW2ldKSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworYm9vbCBGb250OjpmYXN0QXZl
cmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKKyAgICBpZiAoc3VjY2VzcykK
KyAgICAgICAgd2lkdGggPSByb3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkp
OyAvLyBGSVhNRTogcHJpbWFyeUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmly
c3RGYW1pbHkoKS4KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBGb250OjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgdG8gPSAodG8gPT0gLTEg
PyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCisgICAgICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBhZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Cit9
CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFVz
ZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtl
cm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAg
aWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8
fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkpCisgICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3Np
dGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CisKKyAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBu
b3JtYWxpemVkOworICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIG5vcm1hbGl6
ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisKKyAgICBy
ZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOworfQorCitTdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisK
K1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IHRydWU7CisKK3ZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxk
VXNlU21vb3RoaW5nKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKK30KKworYm9vbCBGb250Ojpz
aG91bGRVc2VTbW9vdGhpbmcoKQoreworICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OworfQorCit2b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit7CisgICAgc19jb2Rl
UGF0aCA9IHA7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKK3sKKyAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKK30KKwordm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCit7CisgICAg
c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisK
K1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQor
eworICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworfQorCitGb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAg
aWYgKHNfY29kZVBhdGggIT0gQXV0bykKKyAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7CisKKyNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAg
ICAgICAgcmV0dXJuIFNpbXBsZTsKKyNlbmRpZgorCisgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygp
LT5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICAKKyAgICBpZiAocnVu
Lmxlbmd0aCgpID4gMSAmJiAhV2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1
cmVzKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICBpZiAoIXJ1bi5jaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIGlm
IChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisKKyAgICAvLyBTdGFydCBm
cm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hh
cmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgorICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQ
YXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKworRm9udDo6Q29kZVBh
dGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBp
biBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90ZSB0aGF0IHdlIAorICAgIC8vIGNhbid0IHNp
bXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hh
cmFjdGVycworICAgIC8vIGFyZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdv
IHRvIHRoZSBjb21wbGV4IHBhdGguCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdl
bGwgY29uc2lkZXIgYmluYXJ5IHNlYXJjaCBvdmVyIGEgc29ydGVkCisgICAgLy8gbGlzdCBvZiBy
YW5nZXMuCisgICAgQ29kZVBhdGggcmVzdWx0ID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVy
c1tpXTsKKyAgICAgICAgaWYgKGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChN
b2RpZmllciBMZXR0ZXJzIDogVG9uZSBsZXR0ZXJzKSAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyRTkpIAorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmlu
ZyBkaWFjcml0aWNhbCBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MzZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMg
PCAweDA1OTEgfHwgYyA9PSAweDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRp
bmcgVSswNUJFIEhlYnJldyBjb21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNl
cSwgU29mIFBhc3VxIGFuZCBOdW4gSGFmdWtoYQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MDVDRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIC8vIFUrMDYwMCB0aHJvdWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28s
IFNhbWFyaXRhbiwgTWFuZGFpYywKKyAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3Vy
bXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCisgICAgICAg
IC8vIE1hbGF5YWxhbSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCisgICAg
ICAgIGlmIChjIDwgMHgwNjAwKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweDEwOUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICAvLyBV
KzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hv
dWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJlY29tcG9zZTsKKyAgICAgICAgLy8gTW9kZXJuIEtv
cmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKKyAgICAgICAg
aWYgKGMgPCAweDExMDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxMUZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAw
eDEzNUQpIC8vIFUrMTM1RCB0aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEzNUYpCisgICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgw
IHRocm91Z2ggVSsxOEFGIFRhZ2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwg
TW9uZ29saWFuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOEFG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5MDAp
IC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOTRGKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUr
MTlERiBOZXcgVGFpIEx1ZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9
IDB4MTlERikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwg
MHgxQTAwKSAvLyBVKzFBMDAgdGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxp
bmVzZSwgQmF0YWssIExlcGNoYSwgVmVkaWMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDFDRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MURDMCkgLy8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNy
aXRpY2FsIG1hcmsgc3VwcGxlbWVudAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChjIDw9IDB4MURGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8v
IFUrMUUwMCB0aHJvdWdoIFUrMjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3Rh
Y2tlZCBkaWFjcml0aWNzCisgICAgICAgIGlmIChjIDw9IDB4MjAwMCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3c7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBV
KzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5p
bmcgbWFya3MgZm9yIENvcHRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MkNGMSkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgzMDJBKSAvLyBVKzMwMkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1
bCBUb25lIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
MDJGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2
N0MpIC8vIFUrQTY3QyB0aHJvdWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJp
bGxpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QTY3RCkKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBV
K0E2RjAgdGhyb3VnaCBVK0E2RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNkYxKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdz
LXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgIC8vIEhhbmd1bCBK
YW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRl
aSBNYXllaywKKyAgICAgICAgaWYgKGMgPCAweEE4MDApIAorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjIDw9IDB4QUJGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgIGlmIChjIDwgMHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3Vs
IEphbW8gRXh0LiBCCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhE
N0ZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPD0gMHhE
QkZGKSB7CisgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZQorCisgICAgICAgICAgICBpZiAo
aSA9PSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBV
Q2hhciBuZXh0ID0gY2hhcmFjdGVyc1srK2ldOworICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJB
SUwobmV4dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFy
MzIgc3VwcGxlbWVudGFyeUNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0
KTsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAv
LyBVKzFGMUU2IHRocm91Z2ggVSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFy
YWN0ZXIgPD0gMHgxRjFGRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAw
IHRocm91Z2ggVStFMDFFRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweEUwMUVGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICAvLyBGSVhNRTogQ2hlY2sgZm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsx
MTA4MCBibG9jaykgYW5kIG90aGVyIGNvbXBsZXggc2NyaXB0cworICAgICAgICAgICAgLy8gaW4g
cGxhbmUgMSBvciBoaWdoZXIuCisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGMgPCAweEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2Rl
IHZhcmlhdGlvbiBzZWxlY3RvcnMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEZFMEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4RkUyMCkgLy8gVStGRTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtz
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQorICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jv
b2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQoreworICAgIC8vIFRoZSBiYXNpYyBD
SksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgorICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9
IDB4OUZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQg
SWRlb2dyYXBocyBFeHRlbnNpb24gQS4KKyAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDRE
QkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBSYWRpY2FscyBTdXBw
bGVtZW50LgorICAgIGlmIChjID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gS2FuZ3hpIFJhZGljYWxzLgorICAgIGlmIChjID49IDB4
MkYwMCAmJiBjIDw9IDB4MkZERikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
Q0pLIFN0cm9rZXMuCisgICAgaWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
LgorICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KKyAg
ICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCisg
ICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCisgICAg
aWYgKGMgPj0gMHgyQjc0MCAmJiBjIDw9IDB4MkI4MUYpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KKyAg
ICBpZiAoYyA+PSAweDJGODAwICYmIGMgPD0gMHgyRkExRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMyIGMpCit7CisgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2Ug
M3JkIFRvbmUKKyAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5k
YXJpbiBDaGluZXNlIDJuZCBUb25lCisgICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZl
IEFjY2VzcywgTWFuZGFyaW4gQ2hpbmVzZSA0dGggVG9uZSAKKyAgICAvLyAweDJEOSBEb3QgQWJv
dmUsIE1hbmRhcmluIENoaW5lc2UgNXRoIFRvbmUgCisgICAgaWYgKChjID09IDB4MkM3KSB8fCAo
YyA9PSAweDJDQSkgfHwgKGMgPT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChj
ID09IDB4MjAzMCkgfHwgKGMgPT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCisgICAgICAgIHx8
IChjID09IDB4MjA0MikgfHwgKGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09
IDB4MjA0OSkgfHwgKGMgPT0gMHgyMDUxKQorICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChj
ID09IDB4MjBERSkgfHwgKGMgPT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4
MjEwNSkKKyAgICAgICAgfHwgKGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09
IDB4MjExMykgfHwgKGMgPT0gMHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCisgICAgICAgIHx8IChj
ID09IDB4MjEyQikgfHwgKGMgPT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4
MjE1MSkgfHwgKGMgPT0gMHgyMTUyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDIxNTYgJiYgYyA8PSAweDIxNUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyMTYwICYmIGMgPD0gMHgyMTZCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjE3MCAmJiBjIDw9IDB4MjE3QikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMw
NykgfHwgKGMgPT0gMHgyMzEyKSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0ND
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09
IDB4MjQyMykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDYwICYm
IGMgPD0gMHgyNDkyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjQ5
QyAmJiBjIDw9IDB4MjRGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0g
MHgyNUEwKSB8fCAoYyA9PSAweDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFB
KSB8fCAoYyA9PSAweDI1QUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI1QjEpIHx8IChjID09IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1
QjYpIHx8IChjID09IDB4MjVCNykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9
PSAweDI1QzEpIHx8IChjID09IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1
QzkpIHx8IChjID09IDB4MjVDQikgfHwgKGMgPT0gMHgyNUNDKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09IDB4MjVFRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI2MDAgJiYgYyA8PSAweDI2MDMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKChjID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAw
eDI2MEUpIHx8IChjID09IDB4MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDAp
IHx8IChjID09IDB4MjY0MikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNjYwICYmIGMgPD0gMHgyNjZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MjY3MiAmJiBjIDw9IDB4MjY3RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoKGMgPT0gMHgyNkEwKSB8fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMg
PT0gMHgyNzEzKSB8fCAoYyA9PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgy
NzQwKSB8fCAoYyA9PSAweDI3NTYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Mjc3NiAmJiBjIDw9IDB4Mjc3RikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoYyA9PSAweDJCMUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWRlb2dyYXBo
aWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycy4KKyAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAw
eDJGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBTeW1ib2xzIGFu
ZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KKyAgICBpZiAoYyA+PSAweDMwMDAgJiYg
YyA8IDB4MzAzMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+IDB4MzAzMCAm
JiBjIDw9IDB4MzAzRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIaXJhZ2FuYQor
ICAgIGlmIChjID49IDB4MzA0MCAmJiBjIDw9IDB4MzA5RikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBLYXRha2FuYSAKKyAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21vZm8KKyAgICBpZiAoYyA+PSAw
eDMxMDAgJiYgYyA8PSAweDMxMkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMg
Pj0gMHgzMTkwICYmIGMgPD0gMHgzMTlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEJvcG9tb2ZvIEV4dGVuZGVkCisgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQg
TW9udGhzLgorICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCisgICAgaWYgKGMgPj0g
MHgzMzAwICYmIGMgPD0gMHgzM0ZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Rjg2MCAmJiBjIDw9IDB4Rjg2MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcy4KKyAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAw
eEZFNEYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkUxMCkgfHwg
KGMgPT0gMHhGRTExKSB8fCAoYyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8
fCAoYyA9PSAweEZGMUMpIHx8IChjID09IDB4RkYxRSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCisgICAgLy8gVXN1YWxseSBv
bmx5IHVzZWQgaW4gQ0pLCisgICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtb2ppLgorICAgIGlmIChjID09IDB4MUYxMDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4
MUYxMjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBj
IDw9IDB4MUYxNDkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjE1
MCAmJiBjIDw9IDB4MUYxNjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgxRjE3MCAmJiBjIDw9IDB4MUYxODkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgxRjIwMCAmJiBjIDw9IDB4MUY2QzUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOworfQorCit1bnNpZ25lZCBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9u
KQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IExUUikg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
IC0gMV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgc3RhdGljIGJvb2wg
ZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
Y2hhcmFjdGVyKSAmJiBpICsgMSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tp
ICsgMV0pKSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGNoYXJhY3RlciwgY2hhcmFjdGVyc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYm
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlm
ICghaXNBZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJh
Y3RlcikgJiYgaSA+IDEgJiYgVTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7CisgICAg
ICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNb
aSAtIDJdLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFu
c2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KKwor
dW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKK3sKKyAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCks
IHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNp
b24pOworfQorCitib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQor
eworICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNL
IHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQWRkaXRpb25hbCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBD
U1MgVGV4dCBMZXZlbCAzIEVkaXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KKyAgICBpZiAo
YyA9PSBldGhpb3BpY1dvcmRzcGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8
IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckRvdAorICAgICAgICB8fCBjID09IHVnYXJpdGljV29y
ZERpdmlkZXIgfHwgYyA9PSB0aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRp
YmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKTsKK30KKyAgICAKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQoreworICAgIC8vIEluIGdlbmVyYWws
IHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJz
IG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCisgICAg
Ly8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFj
dGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5k
ZXgpOworCisgICAgaWYgKG9mZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkg
eworICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhp
cyBnbHlwaC4gQmFpbC4KKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIH0KKyAgICAKKyAgICBpZiAodGV4
dFJ1bi5pczhCaXQoKSkKKyAgICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVy
czgoKVtvZmZzZXRJblN0cmluZ107CisgICAgZWxzZQorICAgICAgICBVMTZfTkVYVCh0ZXh0UnVu
LmNoYXJhY3RlcnMxNigpLCBvZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNo
YXJhY3Rlcik7CisgICAgCisgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJf
SURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNv
ZGVwb2ludHMuCisgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2Nh
dGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgVUJsb2NrQ29kZSBibG9ja0NvZGUg
PSB1YmxvY2tfZ2V0Q29kZShiYXNlQ2hhcmFjdGVyKTsKKyAgICBzd2l0Y2ggKGJsb2NrQ29kZSkg
eworICAgIGNhc2UgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJM
T0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NF
RF9DSktfTEVUVEVSU19BTkRfTU9OVEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklM
SVRZOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6
CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUzoKKyAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01Q
QVRJQklMSVRZX0ZPUk1TOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNf
RVhURU5TSU9OX0I6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBI
U19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgorICAgIGNhc2UgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0M6CisgICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRDoKKyAgICBjYXNlIFVCTE9DS19JREVP
R1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTOgorICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9C
X0lERU9HUkFNUzoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVN
RU5UOgorICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgorICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5B
OgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPOgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VY
VEVOREVEOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1POgorICAgIGNhc2UgVUJMT0NLX0hB
TkdVTF9DT01QQVRJQklMSVRZX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxF
UzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgorICAgIGNhc2UgVUJM
T0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0I6CisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5
cGU6OlNraXBEZXNjZW5kZXJzOworICAgIH0KK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRleHRMYXlvdXQ+
IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBUZXh0TGF5b3V0
IGNsYXNzIGRlZmluaXRpb24KIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogewotICAgIFdlYkNvcmU6
OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkZWxl
dGVMYXlvdXQocHRyKTsKIH0KIAogfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAot
Y29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7
Citjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAxIC8qPyovLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsCkBAIC05OCwxNSArOTgsMTUgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5T
aWduRm9yRmFtaQogICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7CiB9CiAKLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOworRm9udENhc2NhZGU6OkNvZGVQYXRo
IEZvbnRDYXNjYWRlOjpzX2NvZGVQYXRoID0gQXV0bzsKIAotVHlwZXNldHRpbmdGZWF0dXJlcyBG
b250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKK1R5cGVzZXR0aW5nRmVhdHVy
ZXMgRm9udENhc2NhZGU6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwogCiAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlv
biAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vIEZvbnRDYXNjYWRlIEltcGxlbWVudGF0aW9u
IChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIAotRm9udDo6Rm9udCgpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogICAg
IDogbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTE0LDcgKzExNCw3IEBAIEZvbnQ6OkZv
bnQoKQogewogfQogCi1Gb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorRm9udENhc2NhZGU6OkZvbnRDYXNj
YWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0
IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRl
clNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcp
CkBAIC0xMjQsNyArMTI0LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZk
LCBmbAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udERhdGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFj
aW5nKDApCkBAIC0xNDMsNyArMTQzLDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9u
dFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
ICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udEQKIH0K
ICNlbmRpZgogCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGU6OkZv
bnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0
aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlw
aHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQpAQCAtMTY5
LDcgKzE2OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiB7CiB9CiAKLUZvbnQm
IEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK0ZvbnRDYXNjYWRlJiBGb250Q2Fz
Y2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKIHsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwogICAgIG1fZ2x5cGhzID0gb3Ro
ZXIubV9nbHlwaHM7CkBAIC0xODAsNyArMTgwLDcgQEAgRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBGb250OjpvcGVy
YXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0
b3I9PShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAgc3RhdGljIFJlZjxGb250R2x5cGhz
PiByZXRyaWV2ZU9yQWRkQ2FjaAogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKLXZvaWQgRm9udDo6
dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3Rv
cikgY29uc3QKIHsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhz
KG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1p
bHkoKSk7CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVh
dHVyZXMoKTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzUxLDcgKzM1MSw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY28KICAgICByZXR1cm4gZHJhd0Nv
bXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAg
ICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbgogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNv
bnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQgRm9udDo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAg
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIGZs
b2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKGlzRHJhd25XaXRo
U1ZHRm9udChydW4pKQpAQCAtNDE1LDcgKzQxNSw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAotR2x5cGhEYXRh
IEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK0dseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7CiAgICAg
ICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCkpIHsKQEAgLTQzNiwxNiArNDM2LDE2IEBAIEdseXBoRGF0YSBGb250Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUMKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwg
Ym9vbCkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxh
eW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQordm9pZCBGb250
Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQogewogfQogCi1mbG9hdCBGb250Ojp3
aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC00OTYsNyArNDk2LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbAogLy8gZnJvbSB0aGUgd2lk
dGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBv
ZiBNYWMgZm9udHMsCiAvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBh
Y3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgogLy8gYWxsIHBsYXRmb3Jtcy4K
LWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgQXRvbWljU3Ry
aW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCkBA
IC01MjAsNyArNTIwLDcgQEAgYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
bwogICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRh
aW5zKGZhbWlseSk7CiB9CiAKLWJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKIHsKICAgICBib29sIHN1Y2Nl
c3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKICAgICBpZiAoc3VjY2VzcykKQEAgLTUy
OCw3ICs1MjgsNyBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFiCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0
aCgpIDogdG8pOwogCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChjbwogICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CiB9CiAKLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKQEAgLTU1
OSw1NSArNTU5LDU1IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGUK
ICAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBub3JtYWxpemVkLmFwcGVuZChG
b250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICBub3JtYWxpemVk
LmFwcGVuZChGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAog
ICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0
cmluZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFs
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZyBGb250Q2Fz
Y2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVl
OwogCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3VsZFVzZVNtb290
aGluZykKK3ZvaWQgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3Vs
ZFVzZVNtb290aGluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7CiB9CiAKLWJvb2wgRm9udDo6
c2hvdWxkVXNlU21vb3RoaW5nKCkKK2Jvb2wgRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGlu
ZygpCiB7CiAgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAKLXZvaWQgRm9u
dDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3ZvaWQgRm9udENhc2NhZGU6OnNldENvZGVQYXRo
KENvZGVQYXRoIHApCiB7CiAgICAgc19jb2RlUGF0aCA9IHA7CiB9CiAKLUZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKCkKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29k
ZVBhdGgoKQogewogICAgIHJldHVybiBzX2NvZGVQYXRoOwogfQogCi12b2lkIEZvbnQ6OnNldERl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykKK3ZvaWQgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKIHsKICAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCitUeXBlc2V0
dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCiB7
CiAgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAKLUZvbnQ6OkNv
ZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK0ZvbnRDYXNj
YWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBj
b25zdAogewogICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCiAgICAgICAgIHJldHVybiBzX2Nv
ZGVQYXRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRo
KGNvbnN0IFRleHQKICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFj
dGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiB9CiAKLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikK
K0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQogewogICAgIC8vIEZJWE1F
OiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90
ZSB0aGF0IHdlIAogICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9w
ZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwpAQCAtNzM0LDggKzczNCw4IEBAIEZv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAKICAgICAgICAgaWYgKGMgPD0g
MHhBNkYxKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAKLSAgICAgICAvLyBVK0E4MDAg
dGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4
dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIg
RXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgLy8gVStBODAwIHRo
cm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRl
bmRlZCwKKyAgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBF
eHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAogICAgICAgICBpZiAoYyA8IDB4QTgw
MCkgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQpAQCAt
Nzg3LDcgKzc4Nyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFy
MzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKIHsKICAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KICAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCkBAIC04MTIsMTEgKzgxMiwxMSBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVv
Z3JhcGhzLgogICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lv
biBCLgogICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVu
c2lvbiBDLgogICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
KFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTkxNCw3ICs5MTQsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gSWRlb2dyYXBoaWMgRGVzY3Jp
cHRpb24gQ2hhcmFjdGVycy4KICAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgogICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0MCw3ICs5NDAsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQK
ICAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCiAgICAgICAgIHJldHVybiB0cnVl
OwotIAorCiAgICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocy4KICAgICBpZiAo
YyA+PSAweDMyMDAgJiYgYyA8PSAweDMyRkYpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTg5
LDcgKzk4OSw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAg
ICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
Cit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHVu
c2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CkBAIC0xMDYyLDE0ICsxMDYyLDE0IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikK
IHsKICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmlu
Z1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgcmV0dXJu
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMx
NigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwog
fQogCi1ib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiB7CiAgICAgaWYg
KFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0ND
X01BU0sgfCBVX0dDX0NGX01BU0spKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDgyLDcg
KzEwODIsNyBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAorYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewogICAg
IHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCisKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
KyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250R2x5cGhzLmgiCisj
aW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29t
cGxleCB0byAwIGFuZCBjb25mbGljdHMKKy8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0
aCBlbnVtLgorI2lmZGVmIENvbXBsZXgKKyN1bmRlZiBDb21wbGV4CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgRm9udERhdGE7CitjbGFzcyBGb250TWV0cmljczsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CitjbGFzcyBGb250U2VsZWN0b3I7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIExheW91dFJlY3Q7CitjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgVGV4
dExheW91dDsKK2NsYXNzIFRleHRSdW47CisKK3N0cnVjdCBHbHlwaERhdGE7CisKK3N0cnVjdCBH
bHlwaE92ZXJmbG93IHsKKyAgICBHbHlwaE92ZXJmbG93KCkKKyAgICAgICAgOiBsZWZ0KDApCisg
ICAgICAgICwgcmlnaHQoMCkKKyAgICAgICAgLCB0b3AoMCkKKyAgICAgICAgLCBib3R0b20oMCkK
KyAgICAgICAgLCBjb21wdXRlQm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQg
JiYgIXRvcCAmJiAhYm90dG9tOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNv
bnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4
KGxlZnQsIG90aGVyLmxlZnQpOworICAgICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhl
ci5yaWdodCk7CisgICAgICAgIHRvcCA9IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKKyAgICAg
ICAgYm90dG9tID0gc3RkOjptYXgoYm90dG9tLCBvdGhlci5ib3R0b20pOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBsZWZ0ICE9IG90aGVyLmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwg
dG9wICE9IG90aGVyLnRvcCB8fCBib3R0b20gIT0gb3RoZXIuYm90dG9tOworICAgIH0KKworICAg
IGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGludCBib3R0b207
CisgICAgYm9vbCBjb21wdXRlQm91bmRzOworfTsKKworY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xh
dG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERl
c2NlbmRlcnMsIFNraXBHbHlwaCwgRHJhd092ZXJHbHlwaH07CisgICAgdmlydHVhbCBib29sIGNv
bnRhaW5zTW9yZVBhdGhzKCkgPSAwOworICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOworICAg
IHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKKyAgICB2aXJ0
dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1bmRlcmxpbmVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhZHZhbmNlKCkgPSAwOworICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigp
IHsgfQorfTsKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBp
bmRleCk7CisKK2NsYXNzIEZvbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworI2VuZGlmCisgICAgfkZvbnQo
KTsKKworICAgIEZvbnQoY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9w
ZXJhdG9yPShjb25zdCBGb250Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb247IH0KKworICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CisgICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OworCisgICAgZW51
bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVz
ZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworCisgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBm
bG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91
dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7CisgICAgc3RhdGlj
IGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworCisgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisKKyAgICBib29sIGlzU21hbGxDYXBzKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0KKworICAgIGZs
b2F0IHdvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQorICAgIGZs
b2F0IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KKyAg
ICB2b2lkIHNldFdvcmRTcGFjaW5nKGZsb2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KKyAg
ICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9
CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzUHJpbnRlckZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Cisg
ICAgCisgICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKTsgfQorCisgICAgVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZXNldHRpbmdGZWF0dXJlcz4obV90eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQorCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0KKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CisKKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CisgICAgRm9udFdlaWdodCB3
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQorICAg
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KKworICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQorCisgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuZm9udE1ldHJpY3MoKTsgfQorICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5Rm9udERhdGEoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0K
KyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0
YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZv
bnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQorICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdl
Q2hhcldpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCisKKyAg
ICBpbnQgZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisKKyAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7CisgICAgY29u
c3QgRm9udFJhbmdlcyYgZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OworICAgIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBj
b25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7
CisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKKworICAg
IC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rp
b24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBv
cnR1bml0eQorICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQu
IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21l
bnQoKSBjb21wZW5zYXRlcworICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0
dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBs
aW5lLgorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29s
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsK
KworICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhH
bHlwaE92ZXJmbG93IH07CisgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNv
bnN0OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQorICAgIHN0YXRpYyBDb2RlUGF0aCBj
aGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKKworICAg
IGJvb2wgcHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4
dEVtcGhhc2lzIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZh
bmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Cisg
ICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKworICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEdseXBoRGF0YSYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJh
Y2tGb250c0ZvckNvbXBsZXhUZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwg
aW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgZnJpZW5k
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDsKKworcHVibGljOgorI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQor
ICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgJiYgbV9sZXR0ZXJT
cGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZworICAgICAgICAgICAgJiYgbV93b3JkU3Bh
Y2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVXNl
ZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRpZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhz
LgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsK
KyAgICBzdGF0aWMgQ29kZVBhdGggY29kZVBhdGgoKTsKKyAgICBzdGF0aWMgQ29kZVBhdGggc19j
b2RlUGF0aDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgIHN0YXRpYyBUeXBlc2V0
dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdWludDhfdCBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl07CisgICAgc3Rh
dGljIGJvb2wgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoYyAmIH4weEZGKSAmJiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2Nd
OworICAgIH0KKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMg
PT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KKyAgICBzdGF0aWMg
Ym9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9X
aWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBk
OyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8
IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAm
JiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHpl
cm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9
CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworCisg
ICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHNwYWNlOworCisgICAgICAgIGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFj
dGVyKSkKKyAgICAgICAgICAgIHJldHVybiB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAgICByZXR1
cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2Vz
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1h
bGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBib29sIHVz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbDsgfQorICAgIEZvbnRHbHlwaHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0OworCisgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0
dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVy
aW5nTW9kZSA9IG1fZm9udERlc2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7CisgICAgICAg
IFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVhdHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzOworCisgICAgICAgIHN3aXRjaCAodGV4dFJlbmRlcmluZ01vZGUpIHsKKyAgICAgICAgY2Fz
ZSBBdXRvVGV4dFJlbmRlcmluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9w
dGltaXplU3BlZWQ6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVy
ZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9u
OgorICAgICAgICBjYXNlIE9wdGltaXplTGVnaWJpbGl0eToKKyAgICAgICAgICAgIGZlYXR1cmVz
IHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVz
ICY9IH5LZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tl
cm5pbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
bV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZlYXR1
cmVzIHw9IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworCisgICAg
Rm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIG11dGFibGUgUmVmUHRyPEZv
bnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKKyAgICBmbG9h
dCBtX3dvcmRTcGFjaW5nOworICAgIG11dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sOworICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8g
KFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnRE
ZXNjcmlwdGlvbi4KK307CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwordm9p
ZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKKworaW5saW5lIEZvbnQ6On5Gb250KCkKK3sKK30KKworaW5saW5l
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxl
Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgY29uc3QgRm9udFJhbmdl
cyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGJvb2wgRm9udDo6
aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVy
biBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5l
IEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCitpbmxpbmUgZmxv
YXQgRm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25l
ZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXRhYlNpemUpCisg
ICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJT
aXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0
IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Cisg
ICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0
YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7Cit9CisKK30KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29y
ZTo6VGV4dExheW91dCopOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udF9oCi0jZGVmaW5lIEZv
bnRfaAorI2lmbmRlZiBGb250Q2FzY2FkZV9oCisjZGVmaW5lIEZvbnRDYXNjYWRlX2gKIAogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTA2
LDI0ICsxMDYsMjQgQEAgcHVibGljOgogfTsKIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CiAKLWNsYXNzIEZvbnQgeworY2xhc3MgRm9udENhc2Nh
ZGUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZs
b2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAjZW5kaWYKLSAg
ICB+Rm9udCgpOworICAgIH5Gb250Q2FzY2FkZSgpOwogCi0gICAgRm9udChjb25zdCBGb250Jik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQmKTsKKyAgICBG
b250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRD
YXNjYWRlJiBvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBlcXVhbEZvclRleHRB
dXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIGJvb2wgZXF1YWxGb3JUZXh0
QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhl
ci5tX2xldHRlclNwYWNpbmcKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0
JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNw
YWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9CiAg
ICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFy
IGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0g
c29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9
IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0
aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAg
c3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworICAgIHN0YXRp
YyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMik7CiAKICAgICBzdGF0aWMgaW5s
aW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCiAgICAgewpAQCAtMzQ3
LDM0ICszNDcsMzQgQEAgdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CiB2b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgY2xlYXJX
aWR0aENhY2hlcygpOwogCi1pbmxpbmUgRm9udDo6fkZvbnQoKQoraW5saW5lIEZvbnRDYXNjYWRl
Ojp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZv
bnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEm
IEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAogewogICAgIEFTU0VSVChtX2ds
eXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250
RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJh
Y2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAotaW5saW5lIGJvb2wg
Rm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0Zp
eGVkUGl0Y2goKSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1f
Z2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoraW5saW5lIEZvbnRTZWxlY3Rv
ciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ2x5
cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAotaW5saW5lIGZsb2F0IEZv
bnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCF0YWJTaXplKQogICAgICAgICByZXR1
cm4gbGV0dGVyU3BhY2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29yayBpZiB0aGUg
ZW1waGFzaXMgbWFyayB1c2VzIGEgY29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9mIHRoZQogLy8g
c3RhbmRhcmQgZW1waGFzaXMgbWFya3MgZG8gc28uCi1ib29sIEZvbnQ6OmdldEVtcGhhc2lzTWFy
a0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRh
KSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0CiB7CiAgICAg
aWYgKG1hcmsuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Niw3ICs2Niw3
IEBAIGJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERh
dGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0
YSkpCkBAIC04MCw3ICs4MCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3Qg
QXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpOwog
fQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwog
ICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpA
QCAtOTQsNyArOTQsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9t
CiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CiB9CiAK
LWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBj
b25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlm
ICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtMTA4
LDcgKzEwOCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWkKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsK
IApAQCAtMTM4LDcgKzEzOCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZh
bmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CkBAIC0xNTQsNyArMTU0LDcgQEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZQogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleAogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVuKTsKQEAgLTIz
MSw3ICsyMzEsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAg
ICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkp
LCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0
YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRh
KSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29uCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwgc3Rh
cnRQb2ludCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxs
YmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTI3Niw3ICsyNzYsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChj
b25zCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotdm9pZCBGb250OjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBy
dW4pOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVQKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVX
aWR0aCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
ewogICAgIGZsb2F0IGRlbHRhID0geDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTI2NCw3ICsyNjQsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtCiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhKQogICAgICAg
ICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJh
Y2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKGMpKQorICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5o
YXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEds
eXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBHbHlwaERhdGEg
Rm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YSkgewotICAgICAgICBp
ZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEu
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZh
bGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFs
bGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZv
ck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNK
S0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0KIApAQCAtMzIy
LDcgKzMyMiw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWwKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAg
ICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0
MzAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAvLyB0aGUg
d2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBub3RpY2Vh
YmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KICNpZiAhUExBVEZPUk0oSU9TKQogI2lmICFVU0Uo
V0lOR0RJKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb24KIH0KICNlbmRpZgogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAgZmxvYXQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1Niw3ICs0NTYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGCiAgICAgZm9udC5k
cmF3R2x5cGhzKHRoaXMsICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKIH0KIAogLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUg
aU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0
aG9kIHVzZSB0aGUKLS8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Ojpk
cmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8v
IHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Q2FzY2FkZTo6ZHJhd1RleHQo
KSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCiAvLyBhcmVuJ3Qg
bm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hhbmdlLgogI2lm
ICFQTEFURk9STShJT1MpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikK
ICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3Rh
dHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50IGxlbmd0aCkK
ICNlbmRpZgogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC01MTUsNyArNTE1LDcg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29ucwogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwotICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgorICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250Q2FzY2FkZTo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBv
ZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4K
ICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250Lndp
ZHRoKHN1YnJ1biksIDApOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtMzU2LDE2
ICszNTYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2Vsc2UKLSAg
ICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIGZsb2F0IGRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhC
dWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAg
ICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKICNlbHNlCi0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50
IGxlbmd0aCA9IC0xKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOwog
I2VuZGlmCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxs
U2lkZXMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDggQEAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogI2luY2x1ZGUgIkNvcmVUZXh0U1BJ
LmgiCiAjZW5kaWYKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQxOSw3ICs0MTksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzCiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50IGNvZGVVbml0
c0xlbmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IGNvZGVVbml0c1swXSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKIAotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxlZnRUcnVuY2F0
ZVRvQnVmZmVyKGNvbgogICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXg7CiB9
CiAKLXN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJlciwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdI
YWNrcykKK3N0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgcmVuZGVy
ZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgZGlzYWJs
ZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBpZiAoZGlzYWJsZVJvdW5kaW5nSGFja3MpCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGlj
IGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbgogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVl
LCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1
bmNhdGUgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgVHJ1bmNh
dGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTI5NSw0MiArMjk1LDQyIEBAIHN0YXRpYyBTdHJpbmcgdHJ1
bmNhdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZlciwg
dHJ1bmNhdGVkTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1
bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBm
b250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmlu
ZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmluZyBT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0
cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MpOwogfQogCi1mbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcykKK2Zsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gc3RyaW5nV2lkdGgoZm9u
dCwgU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwg
IWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMs
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6
OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hh
Y2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjps
ZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVT
dHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFy
YWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZElu
c2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCiB7CiAgICAgcmV0dXJuIHRy
dW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZl
ciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMgKzMzLDIzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBGb250OwotICAgIAotICAg
IGNsYXNzIFN0cmluZ1RydW5jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFibGVSb3VuZGlu
Z0hhY2tzIH07Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlz
YWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRy
dW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxl
Um91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0
IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNr
c09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0
cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFs
c2UpOworY2xhc3MgRm9udENhc2NhZGU7CisKK2NsYXNzIFN0cmluZ1RydW5jYXRvciB7CitwdWJs
aWM6CisgICAgZW51bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxlUm91bmRpbmdI
YWNrcywgRW5hYmxlUm91bmRpbmdIYWNrcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRp
bmdIYWNrcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRl
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBy
aWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJv
b2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKIAotICAgICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAg
ICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcm
LCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVS
b3VuZGluZ0hhY2tzKTsKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENh
c2NhZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNz
IEdseXBoVG9QYXRoVHJhbnNsYXRvcjsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25z
dCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgPSAwOworICAgICAgICB2aXJ0dWFsIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRy
YW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0
YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRF
bXBoYXNpcykKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0
RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
Y3VycmVudENoYXJhY3RlcigwKQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
PSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2lzQWZ0
ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRy
KCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFp
bGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0t
OwogCkBAIC0yMjksOSArMjI5LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbgogICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVyU3BhY2luZygp
KQogICAgICAgICAgICAgICAgIHdpZHRoICs9IG1fZm9udC0+bGV0dGVyU3BhY2luZygpOwogCi0g
ICAgICAgICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udDo6Y2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICAgICAgICAgIGJvb2wg
dHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBpZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBi
b29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgewogICAgICAgICAgICAgICAgIC8v
IERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhw
YW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICBpZiAobV9l
eHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24g
PSBtX2V4cGFuc2lvbjsKQEAgLTI2OCw5ICsyNjgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1faXNBZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9y
bXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhCdWZmZXItPnNp
emUoKSwKICAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/IGdseXBoQnVm
ZmVyLT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3aWR0
aCkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykg
ewogICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsK
QEAgLTI3OCw3ICsyNzksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUluCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoYXJhY3RlcikpCisgICAg
ICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAhRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0
RW1waGFzaXMoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIGdseXBoID0gMDsKIAogICAgICAgICAv
LyBBZHZhbmNlIHBhc3QgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IGRlYWx0IHdpdGguCkBAIC0yODgs
NyArMjg5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogCiAg
ICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd29y
ZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgICAgICAvLyB0byBiZSBpbnRl
Z2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2VyIGJv
dW5kYXJ5LgotICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojpp
c1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGlmIChtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3Rl
cihjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKIAogICAg
ICAgICAgICAgLy8gU2luY2Ugd2lkdGhTaW5jZUxhc3RSb3VuZGluZyBjYW4gbG9zZSBwcmVjaXNp
b24gaWYgd2UgaW5jbHVkZSBtZWFzdXJlbWVudHMgZm9yCkBAIC0zMDEsNyArMzAyLDcgQEAgaW5s
aW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICJy
b3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QKICAgICAgICAgICAgIC8vIHdp
ZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91
bmRhcnkuCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpIDwgbV9y
dW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpKSkpCisgICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hh
cmFjdGVyKCoodGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQogICAgICAgICAgICAgICAgIHx8
IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpID49IG1fcnVuLmxlbmd0aCgpKSkgewogICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICsgd2lk
dGg7CiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyA9IGNlaWxmKHRvdGFs
V2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3JfaAogI2RlZmluZSBXaWR0aEl0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNW
R0dseXBoLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsK
K2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBTaW1wbGVGb250
RGF0YTsKIGNsYXNzIFRleHRSdW47CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBHbHlwaERhdGE7
CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNj
b3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2Up
OworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBi
b29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiYg
YXJhYmljRm9ybXMoKSB7IHJldHVybiBtX2FyYWJpY0Zvcm1zOyB9CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250JiBmb250KQor
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICAgICAgICAgaWYgKCFm
b250LmlzUHJpbnRlckZvbnQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBt
X2ZvbnQ7CiAKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXMuaCIKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjphZHZhbmNlCiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9p
bmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitE
YXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZs
b2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAg
IGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0
YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3Ro
KCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6
ek5HLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVy
LmgiCkBAIC0zOSw3ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50LCBpbnQs
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4
dEVtcGhhc2lzICovKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOwogICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKQEAgLTUwLDcgKzUw
LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIC8vIEZJ
WE1FOiBNYWMgcmV0dXJucyBhbiBpbml0aWFsIGFkdmFuY2UgaGVyZS4KICAgICByZXR1cm4gMDsK
IH0KLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZl
ciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGgu
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC02OCwyMiArNjgsMjIgQEAgZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50
LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiti
b29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0
IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QK
IHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVy
LnNoYXBlKCkpCkBAIC05Miw3ICs5Miw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb24KICAgICByZXR1cm4gMDsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCkgY29uc3QKIHsKICAgICBIYXJmQnV6elNoYXBl
ciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0
aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIK
ICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKIAog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFw
ZXIuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgPGhiLWljdS5oPgpAQCAtMTczLDkgKzE3Myw5IEBAIHN0YXRp
YyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGUKICAgICAgICAgaW50IG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwg
bGVuZ3RoLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgdGFicyBhcyB0
aGV5IGFyZSBub3QgdHJlYXRlZCBhcyBzcGFjZXMgZm9yIHdvcmQtZW5kLgotICAgICAgICBpZiAo
Rm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCisgICAg
ICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVy
ICE9ICdcdCcpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7Ci0gICAgICAgIGVsc2UgaWYg
KEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQor
ICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21w
bGV4U2NyaXB0KGNoYXJhY3RlcikpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhT
cGFjZTsKICAgICAgICAgVTE2X0FQUEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwg
Y2hhcmFjdGVyLCBlcnJvcik7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7
CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25z
dCBUZQogICAgIH0KIH0KIAotSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZv
bnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNo
YXBlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQogICAgIDog
bV9mb250KGZvbnQpCiAgICAgLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgoMCkKICAgICAsIG1f
cnVuKHJ1bikKQEAgLTIxNCw5ICsyMTQsOSBAQCBzdGF0aWMgdm9pZCBub3JtYWxpemVTcGFjZXNB
bmRNaXJyb3JDaGFyCiAgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAg
ICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKICAg
ICAgICAgLy8gRG9uJ3Qgbm9ybWFsaXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMg
c3BhY2VzIGZvciB3b3JkLWVuZAotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJh
Y3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJl
YXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCiAgICAgICAgICAgICBj
aGFyYWN0ZXIgPSAnICc7Ci0gICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhT
cGFjZShjaGFyYWN0ZXIpKQorICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1pl
cm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lk
dGhTcGFjZTsKICAgICAgICAgZWxzZSBpZiAobm9ybWFsaXplTW9kZSA9PSBIYXJmQnV6elNoYXBl
cjo6Tm9ybWFsaXplTWlycm9yQ2hhcnMpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJN
aXJyb3IoY2hhcmFjdGVyKTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVy
Ojpjb2xsZWN0SGFyZkJ1enpSdW5zCiAgICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQg
PSBuZXh0U2NyaXB0OwogCiAgICAgICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVu
Z3RoKTsgaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRv
ci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpKSB7Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRB
c1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6
OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICBpZiAoVV9HRVRfR0NfTUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19N
X01BU0spIHsKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRHbHlw
aFBvc2l0aW9uc0ZvCiAKICAgICAgICAgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV0gPSBnbHlw
aEluZm9zW2ldLmNsdXN0ZXI7CiAKLSAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udDo6
dHJlYXRBc1plcm9XaWR0aFNwYWNlKG1fbm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50Q2hhcmFjdGVy
SW5kZXhdKSkKKyAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udENhc2NhZGU6OnRyZWF0
QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4
XSkpCiAgICAgICAgICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIAogICAgICAgICBp
ZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hhcmFjdGVySW5kZXgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9u
dDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIEhh
cmZCdXp6U2hhcGVyIHsKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBOb3JtYWxp
emVNaXJyb3JDaGFycwogICAgIH07CiAKLSAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250Kiwg
Y29uc3QgVGV4dFJ1biYpOworICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwg
Y29uc3QgVGV4dFJ1biYpOwogICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CiAKICAgICBi
b29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6
CiAKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0
LCBmbG9hdCk7CiAKLSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUqIG1fZm9udDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VUNoYXJbXT4gbV9ub3JtYWxpemVkQnVm
ZmVyOwogICAgIHVuc2lnbmVkIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKICAgICBjb25zdCBU
ZXh0UnVuJiBtX3J1bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9Gb250Q2FjaGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNp
bXBvcnQgIkNvcmVUZXh0U1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2Fz
Y2FkZS5oIgogI2ltcG9ydCAiUmVuZGVyVGhlbWVJT1MuaCIKICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlP
Uy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4
IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNz
U1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZv
bnRTZXJ2aWNlc0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJv
bGxlci5oIgogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTQzLDEz
ICs0MywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRMYXlvdXQgewogcHVi
bGljOgotICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZv
bnQmIGZvbnQpCisgICAgc3RhdGljIGJvb2wgaXNOZWVkZWQoUmVuZGVyVGV4dCogdGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIHRleHQtPnN0eWxlKCkp
OwotICAgICAgICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnQ6OkNvbXBsZXg7Cisg
ICAgICAgIHJldHVybiBmb250LmNvZGVQYXRoKHJ1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7
CiAgICAgfQogCi0gICAgVGV4dExheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBm
b250LCBmbG9hdCB4UG9zKQorICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgICAgIDogbV9mb250KGZvbnQpCiAg
ICAgICAgICwgbV9ydW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB4UG9zKSkKICAgICAg
ICAgLCBtX2NvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+
KCZtX2ZvbnQsIG1fcnVuLCB0cnVlKSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZh
bGxiYWNrRm9udHMpOwogICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+
cnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJv
bSAmJiBGb250Ojp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQorICAgICAgICBpZiAobV9mb250
LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVu
W2Zyb21dKSkKICAgICAgICAgICAgIGJlZm9yZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygp
OwogICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUds
eXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRy
b2xsZXItPnJ1bldpZHRoU29GYXIoKTsKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRl
eHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgc3RhdGljIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgZmxvYXQgeFBvcykKICAgICB7CiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7CiAg
ICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSk7CkBAIC03
OCwyNSArNzgsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJ1bjsKICAgICB9CiAKLSAg
ICAvLyBDb21wbGV4VGV4dENvbnRyb2xsZXIgaGFzIG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9u
dCBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnQg
bV9mb250OworICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlciBoYXMgb25seSByZWZlcmVuY2Vz
IHRvIGl0cyBGb250Q2FzY2FkZSBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2
ZSBoZXJlLgorICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICBUZXh0UnVuIG1fcnVuOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4VGV4dENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07
CiAKLVBhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQq
IHRleHQsIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAorUGFzc093
blB0cjxUZXh0TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRl
eHQsIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAogewogICAgIGlm
ICghY29sbGFwc2VXaGl0ZVNwYWNlIHx8ICFUZXh0TGF5b3V0Ojppc05lZWRlZCh0ZXh0LCAqdGhp
cykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4
dExheW91dCh0ZXh0LCAqdGhpcywgeFBvcykpOwogfQogCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KiBsYXlvdXQpCit2b2lkIEZvbnRDYXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4
dExheW91dCogbGF5b3V0KQogewogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnQ6
OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitmbG9hdCBGb250
Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKIHsK
ICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBA
IC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxv
YQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4
dEVtcGhhc2lzKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIo
Y29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkK
ICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0xNDQsNyArMTQ0
LDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRybwogICAgICAgICBt
X2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBp
c0FmdGVyRXhwYW5zaW9uID0gbV9hZnRlckV4cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
bV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7
CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2Fk
ZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8g
TFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNp
b24gJiYgIW1fcnVuLmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50LS07CiAKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgbmV4dENoID0gKihtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMo
KSArIG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7CiAKLSAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAg
ICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udERhdGEuc3BhY2VHbHlw
aCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3Bh
Y2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNl
c1tpXTsKICNpZiBQTEFURk9STShJT1MpCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0
JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0g
bV9mb250LnRhYldpZHRoKGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSAr
IG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgewor
ICAgICAgICAgICAgZWxzZSBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShj
aCkgJiYgIXRyZWF0QXNTcGFjZSkgewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAw
OwogICAgICAgICAgICAgICAgIGdseXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOwogICAgICAg
ICAgICAgfQpAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjph
ZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBtX2ZvbnQu
bGV0dGVyU3BhY2luZygpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRp
b24gYW5kIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8
IEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhw
YW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVu
LgogICAgICAgICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHByZXZpb3VzRXhwYW5zaW9uID0gbV9leHBhbnNpb247CkBAIC02ODUs
MTIgKzY4NSwxMyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAg
ICAgICAgICAgICAvLyBXZSBhZGp1c3QgdGhlIHdpZHRoIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBv
ZiBhICJ3b3JkIiB0byBlbnN1cmUgYW4gaW50ZWdlciB3aWR0aC4gCiAgICAgICAgICAgICAvLyBG
b3JjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdvcmQgYm91bmRhcmll
cyBmb3IgdGhlIHJvdW5kaW5nIGhhY2sgCiAgICAgICAgICAgICAvLyB0byBiZSBpbnRlZ2VyIHdp
ZHRoLCBzbyB0aGUgZm9sbG93aW5nIHdvcmRzIHdpbGwgc3RhcnQgb24gYW4gaW50ZWdlciBib3Vu
ZGFyeS4gCi0gICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250
Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaCkpIAorICAgICAgICAgICAgaWYgKG1fcnVuLmFw
cGx5V29yZFJvdW5kaW5nKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVy
KGNoKSkgCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGNlaWxDR0Zsb2F0KGFkdmFu
Y2Uud2lkdGgpOyAKIAogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNo
YXJhY3RlciBpcyBhICJyb3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QgdGhl
IAotICAgICAgICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwg
YmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4gCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5
V29yZFJvdW5kaW5nKCkgJiYgIWxhc3RHbHlwaCAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJh
Y3RlcihuZXh0Q2gpKSB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkp
IHsgCisgICAgICAgICAgICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2ls
bCBiZSBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LgorICAgICAgICAgICAgYm9vbCBuZWVkc1JvdW5k
aW5nRm9yQ2hhcmFjdGVyID0gbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEdseXBo
ICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0Q2gpOworICAgICAg
ICAgICAgaWYgKG5lZWRzUm91bmRpbmdGb3JDaGFyYWN0ZXIgfHwgKG1fcnVuLmFwcGx5UnVuUm91
bmRpbmcoKSAmJiBsYXN0R2x5cGgpKSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCB0b3RhbFdp
ZHRoID0gd2lkdGhTaW5jZUxhc3RDb21taXQgKyBhZHZhbmNlLndpZHRoOyAKICAgICAgICAgICAg
ICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCA9IGNlaWxDR0Zsb2F0KHRvdGFsV2lkdGgpOyAKICAg
ICAgICAgICAgICAgICBDR0Zsb2F0IGV4dHJhV2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1pdCAt
IHRvdGFsV2lkdGg7IApAQCAtNzA5LDcgKzcxMCw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCAr
PSBhZHZhbmNlLndpZHRoOyAKIAogICAgICAgICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBtYXJr
cyBzaG91bGQgcmVjZWl2ZSBhIHRleHQgZW1waGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21iaW5l
IHdpdGggYSBzcGFjZS4KLSAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZv
bnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoY2gpIHx8IChVX0dFVF9HQ19NQVNLKGNoKSAmIFVf
R0NfTV9NQVNLKSkpCisgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgKCFGb250
Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaCkgfHwgKFVfR0VUX0dDX01BU0soY2gp
ICYgVV9HQ19NX01BU0spKSkKICAgICAgICAgICAgICAgICBnbHlwaCA9IDA7CiAKICAgICAgICAg
ICAgIGFkdmFuY2UuaGVpZ2h0ICo9IC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmUKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBTaW1wbGVG
b250RGF0YTsKIGNsYXNzIFRleHRSdW47CiAKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBHbHlwaEl0
ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYQogLy8gY29tcGxleCBzY3JpcHRzIG9uIE9TIFgu
CiBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJh
bFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAg
Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYs
IGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFz
aXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBlbWl0IGdseXBocyB1cCB0byB0aGUg
c3BlY2lmaWVkIGNoYXJhY3Rlci4KICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0x
MzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBtX3J1bklu
ZGljZXM7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9J
bmRleDsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
bV9mb250OwogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogICAgIGJvb2wgbV9pc0xUUk9ubHk7
CiAgICAgYm9vbCBtX21heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVU
ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAi
Q29tcGxleFRleHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCiAKQEAgLTQwLDE5ICs0MCwxOSBAQAogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVM
aXN0IDogTlNBcnJheSB7CiAgICAgQHByaXZhdGUKLSAgICBjb25zdCBXZWJDb3JlOjpGb250KiBf
Zm9udDsKKyAgICBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZSogX2ZvbnQ7CiAgICAgVUNoYXIz
MiBfY2hhcmFjdGVyOwogICAgIE5TVUludGVnZXIgX2NvdW50OwogICAgIFZlY3RvcjxSZXRhaW5Q
dHI8Q1RGb250RGVzY3JpcHRvclJlZj4sIDE2PiBfZm9udERlc2NyaXB0b3JzOwogfQogCi0tIChp
ZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqKWZvbnQgY2hhcmFjdGVyOihVQ2hh
cjMyKWNoYXJhY3RlcjsKKy0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENh
c2NhZGUqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJhY3RlcjsKIAogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gV2ViQ2FzY2FkZUxpc3QKIAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBX
ZWJDb3JlOjpGb250Kilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXIKKy0gKGlkKWlu
aXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZvbnQgY2hhcmFjdGVyOihV
Q2hhcjMyKWNoYXJhY3RlcgogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAg
ICAgICByZXR1cm4gbmlsOwpAQCAtNjAsNyArNjAsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNv
bnN0IFdlYkNvcmU6OkZvbnQqCiAgICAgX2ZvbnQgPSBmb250OwogICAgIF9jaGFyYWN0ZXIgPSBj
aGFyYWN0ZXI7CiAKLSAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQs
IHRoZSBGb250IGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCisg
ICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENhc2Nh
ZGUgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKICAgICAvLyBG
b250RGF0YSwgc28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdo
aWxlICghX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAg
X2NvdW50Kys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKICNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3JlR3Jh
cGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAj
aW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgog
I2ltcG9ydCAiTlNGb250U1BJLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
b21wbGV4VGV4dE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJGb250R2x5cGhzLmgiCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0
aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAgLTUyLDcgKzUyLDcg
QEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleAogICAgIHNlbGVjdGlv
blJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJv
bSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApA
QCAtNzUsNyArNzUsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
CiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENh
c2NhZGU6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFu
Y2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVm
ZmVyOwpAQCAtOTMsNyArOTMsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBn
bHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwg
cG9pbnQueSgpKSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVy
ZmxvdykgewpAQCAtMTE2LDEzICsxMTYsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbgogICAgIHJldHVybiBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKIH0KIAot
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRD
YXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBDb21w
bGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIHJldHVybiBjb250
cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAot
Y29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRh
VmFyaWFudCB2YXJpYW50KSBjb25zdAorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRl
Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsK
ICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CiAgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5n
dGggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJG
b250Q2FzY2FkZS5oIgogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCkBAIC01OCwxMiArNTgsMTIgQEAgU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRH
ZXRUZXh0RWZmZWN0c0NhdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgRm9udDo6Y2Fu
UmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNh
blJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KQorYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRl
eHQoKQogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyB2
b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoQ0dDb24KIH0KICNlbmRpZgogCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewog
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3Jt
RGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTUyNiw3ICs1MjYsNyBA
QCB2b2lkIE1hY0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZSgpCiAgICAgfSB3aGlsZSAo
bV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgp
KTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZs
b2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7
CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJy
YXkoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCBEYXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJz
ZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIu
c2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZsb2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBh
dGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRD
YXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
clNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNl
CiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiB9CiAjZW5kaWYKIAotYm9vbCBG
b250OjpwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2Fk
ZTo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJ
T1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCiAgICAgY29uc3Qg
YXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5
cGhQYWdlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVk
ZSAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKLSNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZP
Uk0oSU9TKQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChj
b25zdCBVQ2hhCiAgICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQo
KSAhPSBSZWd1bGFyV2lkdGggfHwgZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAg
ICAgICAgLy8gSWRlb2dyYXBocyBkb24ndCBoYXZlIGEgdmVydGljYWwgdmFyaWFudCBvciB3aWR0
aCB2YXJpYW50cy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltp
XSkpCisgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJb
aV0pKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw4ICszMiw4IEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQg
IkNvcmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIK
ICNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTEyNyw3
ICsxMjcsNyBAQCBzdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChIREMgCiAgICAg
cmV0dXJuIHBhdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAt
NDEsMTcgKzQxLDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQor
Ym9vbCBGb250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2
b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICBp
dC5hZHZhbmNlKGZyb20pOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRo
IC0gYmVmb3JlV2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMp
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAog
ewogICAgIGlmIChmb3JUZXh0RW1waGFzaXMpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JU
ZXh0RW1waGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4K
QEAgLTkyLDcgKzkyLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bAogICAgIHJldHVybiBiZWZvcmVXaWR0aDsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnRDYXNj
YWRlOjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNl
cyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZl
cjsKQEAgLTEwOSw3ICsxMDksNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBn
bHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwg
cG9pbnQueSgpKSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9s
bGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSk7CkBAIC0xMzMsMTAgKzEzMywxMCBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
OwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0g
Zm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9p
bnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRw
Oi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgorICAgIC8v
IHRvIEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5v
cmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KICAgICBpbnQgeCA9IHN0YXRp
Y19jYXN0PGludD4oeEZsb2F0KTsKIAogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxl
cih0aGlzLCBydW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dp
bi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkhXbmREQy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Vbmlz
Y3JpYmVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkhXbmRE
Qy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpA
QCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyB0aGF0IGRvZXMgc3R1ZmYg
aW4gdGhhdCBtZXRob2QgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGluIHRoZSBjb25zdHJ1
Y3Rvci4gIEhhdmUgYWR2YW5jZSgpCiAvLyB0YWtlIHRoZSBHbHlwaEJ1ZmZlciBhcyBhbiBhcmcg
c28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlIHRoZSBnbHlwaCBidWZmZXIgd2hlbgog
Ly8gbWVhc3VyaW5nLgotVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihj
b25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cykKK1VuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmli
ZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQogICAgIDogbV9m
b250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxi
YWNrRm9udHMpCkBAIC02Myw3ICs2Myw3IEBAIFVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmli
ZUNvbnRyb2xsZXIKICAgICBlbHNlIHsKICAgICAgICAgZmxvYXQgbnVtU3BhY2VzID0gMDsKICAg
ICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7Ci0gICAgICAg
ICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKKyAgICAgICAgICAgIGlmIChG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKICAgICAgICAgICAgICAgICBudW1T
cGFjZXMrKzsKICAgICAgICAgfQogCkBAIC0yODcsOCArMjg3LDggQEAgYm9vbCBVbmlzY3JpYmVD
b250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogCiAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBsZW47
IGsrKykgewogICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7Ci0gICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgYm9vbCB0cmVhdEFz
WmVyb1dpZHRoU3BhY2UgPSBGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOworICAgICAg
ICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOworICAg
ICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVy
b1dpZHRoU3BhY2UoY2gpOwogICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJv
V2lkdGhTcGFjZSkgewogICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5
cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMKICAgICAgICAgICAgIC8v
IGFycmF5LgpAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hh
cGVBbmRQbGFjZUkKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEp
KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIUZvbnQ6OnRyZWF0QXNTcGFjZShjYW5kaWRh
dGVTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNT
cGFjZShjYW5kaWRhdGVTcGFjZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9
IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDE2IEBACiAjaWZuZGVmIFVuaXNjcmliZUNvbnRyb2xsZXJf
aAogI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKIAotI2luY2x1ZGUgPHVzcDEwLmg+Ci0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlIDx1c3AxMC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKIHB1
YmxpYzoKLSAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVu
JiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Cisg
ICAgVW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAog
ICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFy
YWN0ZXIuCiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsK
QEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZTogICAgCiAgICAgICAgICAgICAgICBWZWN0b3I8V09S
RD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKICAgICAgICAgICAgICAgIFZlY3Rv
cjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwogCi0gICAgY29uc3QgRm9udCYg
bV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1
biYgbV9ydW47CiAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBtX2ZhbGxiYWNr
Rm9udHM7CiAgICAgRmxvYXRQb2ludCBtX2dseXBoT3JpZ2luOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkN1cnNvci5o
IgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW1wb3J0ICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2Fr
L1dLR3JhcGhpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XS0dyYXBoaWNzLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIldlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKICNpbXBvcnQg
PEltYWdlSU8vSW1hZ2VJTy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ry
YWdJbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAjaW1w
b3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxl
Y3Rvci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xNTcsMTAgKzE1NywxMCBA
QCBjb25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CiAKIC8vIEZJWE1FIC0gd2Ug
c2hvdWxkIG1vdmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5nIGV4dHJhcyB0byBX
ZWJDb3JlCiAgICAgCi1zdGF0aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250KQor
c3RhdGljIEZvbnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCiB7CiAgICAg
c3RhdGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChGb250Q2FzY2FkZSwgY3VycmVudFJlbmRlcmVyLCAoKSk7CiAgICAgCiAg
ICAgaWYgKFtmb250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQogICAgICAgICByZXR1cm4gY3VycmVu
dFJlbmRlcmVyOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBGb250JiBmb250RnJvbU5TRm9u
dChOU0ZvbnQgKmZvbnQKICAgICBjdXJyZW50Rm9udCA9IGZvbnQ7CiAgICAgQ0ZSZXRhaW4oY3Vy
cmVudEZvbnQpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgZihmb250LCBbZm9udCBwb2ludFNpemVd
KTsKLSAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250KGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgIGN1cnJlbnRSZW5kZXJlciA9
IEZvbnRDYXNjYWRlKGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0Ry
YXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CiB9CiAKQEAgLTE5
Miw3ICsxOTIsNyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhXaXRoRm9udChOU1N0cmluZyAqc3RyCiAg
ICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogICAgIAogICAgIGlmIChj
YW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBGb250
IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwor
ICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtm
b250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNE
cmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVu
Z3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJldHVy
biB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lk
IGRyYXdBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAg
ICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250
IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0sIEFudGlhbGlhc2Vk
KTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250
LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBBbnRp
YWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAg
ICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwx
MyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVz
dG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBjb25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVh
bCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9s
U2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1D
b250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFj
dG9yKSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQg
em9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmco
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRC
b3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRy
b2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3QgeyBy
ZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDks
NyBAQCBUaGVtZSogcGxhdGZvcm1UaGVtZSgpCiAKIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBi
eSBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgogCi1zdGF0aWMgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAg
ICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAx
NikKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbU5TQ29udHJv
bFNpemUoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgc2l6ZUZy
b21Gb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZs
b2F0IHpvb21GYWN0b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQorc3Rh
dGljIExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6OmFy
cmF5PEludFNpemUsIDM+JiBzaXplcykKIHsKICAgICByZXR1cm4gc2l6ZUZyb21OU0NvbnRyb2xT
aXplKGNvbnRyb2xTaXplRm9yRm9udChmb250KSwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvciwgc2l6
ZXMpOwogfQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIGNoZWNrYm94TWFy
Z2lucyhOU0NvbnQKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRp
YyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUgY2hl
Y2tib3hTaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVp
Z2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAg
aWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6
ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtMzIzLDcgKzMyMyw3IEBAIHN0YXRp
YyBjb25zdCBpbnQqIHJhZGlvTWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2luc1tj
b250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQor
c3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5v
dGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtNTkz
LDcgKzU5Myw3IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PEludFNpemUsIDM+JiBzdGUKIAog
Ly8gV2UgZG9uJ3QgdXNlIGNvbnRyb2xTaXplRm9yRm9udCgpIGZvciBzdGVwcGVycyBiZWNhdXNl
IHRoZSBzdGVwcGVyIGhlaWdodAogLy8gc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0
aGUgY29ycmVzcG9uZGluZyB0ZXh0IGZpZWxkIGhlaWdodCwKLXN0YXRpYyBOU0NvbnRyb2xTaXpl
IHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0Nv
bnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQpCiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKICAgICBpZiAoZm9u
dFNpemUgPj0gMTgpCkBAIC02NzMsNyArNjczLDcgQEAgaW50IFRoZW1lTWFjOjpiYXNlbGluZVBv
c2l0aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVz
dG1lbnQocGFydCk7CiB9CiAKLUZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQo
Q29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3QKK0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKQEAgLTY5
MSw3ICs2OTEsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvCiAg
ICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0
KSB7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgpAQCAtNzEwLDcgKzcxMCw3IEBAIExlbmd0
aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2wKICAgICB9CiB9CiAKLUxlbmd0aFNp
emUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBG
b250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6
bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAg
ICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MjcsNyArNzI3LDcgQEAgTGVuZ3RoU2l6
ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKAogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRo
ZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVu
Z3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVC
dXR0b25QYXJ0OgpAQCAtNzM5LDcgKzczOSw3IEBAIExlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJv
bEJvcmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBh
ZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVNYWM6
OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQgIkN1
cnNvci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3Lmgi
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oSU9T
KQotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogI2VuZGlmCiAKIGNsYXNzIExvY2Fs
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9M
b2NhbGl6ZWREYXRlQ2FjaGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKIAogI2luY2x1ZGUg
IkRhdGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKIGNsYXNzIExvY2FsaXplZERhdGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgTlNEYXRlRm9y
bWF0dGVyICpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7Ci0gICAg
ZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0
IEZvbnQmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOworICAgIGZsb2F0IG1heGltdW1XaWR0
aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IE1lYXN1cmVUZXh0Q2xpZW50Jik7CiAgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7CiAKIHBy
aXZhdGU6CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgZmxvYXQ+IERhdGVUeXBlTWF4V2lkdGhNYXA7CiAgICAgRGF0ZVR5cGVGb3JtYXR0ZXJNYXAg
bV9mb3JtYXR0ZXJNYXA7CiAgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdpZHRoTWFwOwot
ICAgIEZvbnQgbV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKIAogICAgIGZyaWVuZCBM
b2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOwogICAgIGZyaWVuZCBOZXZl
ckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVk
RGF0ZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJj
b25maWcuaCIKICNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCi0jaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiVGV4dFJ1bi5oIgogI2ltcG9y
dCA8bWF0aC5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTUyLDcgKzUyLDYgQEAg
c3RhdGljIHZvaWQgX2xvY2FsZUNoYW5nZWQoQ0ZOb3RpZmljYXRpbwogfQogCiBMb2NhbGl6ZWRE
YXRlQ2FjaGU6OkxvY2FsaXplZERhdGVDYWNoZSgpCi0gICAgOiBtX2ZvbnQoRm9udCgpKQogewog
ICAgIC8vIExpc3RlbiB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBhbmQg
Y2xlYXIgdGhlIGNhY2hlIHdoZW4gaXQgZG9lcy4KICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFk
ZE9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQqKXRo
aXMsIF9sb2NhbGVDaGFuZ2VkLApAQCAtODQsMTQgKzgzLDE0IEBAIE5TRGF0ZUZvcm1hdHRlciAq
TG9jYWxpemVkRGF0ZUNhY2hlOjpmb3IKICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKIH0KIAot
ZmxvYXQgTG9jYWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29t
cG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBNZWFzdXJlVGV4dENs
aWVudCYgbWVhc3VyZXIpCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZv
ckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYgbWVhc3VyZXIpCiB7CiAgICAgaW50IGtleSA9
IHN0YXRpY19jYXN0PGludD4odHlwZSk7CiAgICAgaWYgKG1fZm9udCA9PSBmb250KSB7CiAgICAg
ICAgIGlmIChtX21heFdpZHRoTWFwLmNvbnRhaW5zKGtleSkpCiAgICAgICAgICAgICByZXR1cm4g
bV9tYXhXaWR0aE1hcC5nZXQoa2V5KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnQgPSBG
b250KGZvbnQpOworICAgICAgICBtX2ZvbnQgPSBGb250Q2FzY2FkZShmb250KTsKICAgICAgICAg
bV9tYXhXaWR0aE1hcC5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludAogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgIHBhaW50U2Vs
ZWN0aW9uKGNvbnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCkBAIC0xMTAs
NyArMTEwLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRNYXJrdXBCb3goUGFpbnRJbgogSW50
UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0
eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJv
b3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3Np
bmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAgICBMYXlvdXRSZWN0IHNlbGVjdGlv
blJlY3QgPSBMYXlvdXRSZWN0KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3Rl
ZEZvclByZWNlZGluZ0Jsb2NrKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRG
b3JQcmVjZWRpbmdCbG9jaygpKTsKQEAgLTExOSw3ICsxMTksNyBAQCBJbnRSZWN0IEVsbGlwc2lz
Qm94OjpzZWxlY3Rpb25SZWN0KCkKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rp
b25SZWN0KTsKIH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxsaXBzaXNCb3g6OnBh
aW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250KQogewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjID0gYmxvY2tGbG93KCkuc2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIGNvbnN0
IFJlbmRlclN0eWxlJik7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0
OyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0
YXRlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQotICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250Q2FzY2FkZSYpOwogICAgIElubGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAKICAg
ICBib29sIG1fc2hvdWxkUGFpbnRNYXJrdXBCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMjIs
NyArMTIyLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KgogICAg
ICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2Vs
aW5lID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmJlaGF2ZXNMaWtlVGV4dCgpKSB7
CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSB8fCBjaGls
ZC0+cmVuZGVyZXIoKS5wYXJlbnQoKSAhPSAmcmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAg
IGlmICghcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50
RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5o
YXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUubGlu
ZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAgICAg
IHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElu
bGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdo
dEFuZEJhc2VsaW5lID0gdHJ1ZTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIElubGluZUZsb3dC
b3g6OmFkZFRvTGluZShJbmxpbmVCb3gqCiAgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRGbG93
Qm94ID0gZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgICAgICAgICAv
LyBDaGVjayB0aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZlcmVu
Y2VzIGluIGZvbnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgogICAgICAgICAgICAgICAg
IGlmICghY2hpbGRGbG93Qm94LmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxp
bmUoKQotICAgICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRy
aWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250
KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZv
bnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGlu
ZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAg
ICAgICAgICAgfHwgcGFyZW50U3R5bGUubGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhl
aWdodCgpCiAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgICAgICAgICB8fCBjaGlsZFN0eWxl
Lmhhc0JvcmRlcigpIHx8IGNoaWxkU3R5bGUuaGFzUGFkZGluZygpIHx8IGNoaWxkU3R5bGUuaGFz
VGV4dENvbWJpbmUoKSkKQEAgLTM4OCw3ICszODgsNyBAQCBmbG9hdCBJbmxpbmVGbG93Qm94Ojpw
bGFjZUJveFJhbmdlSW5JbmxpCiAgICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0g
dGV4dEJveC5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlclRleHQudGV4dExlbmd0
aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9y
TmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3guc3RhcnQoKSkpKQotICAgICAg
ICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS53
b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94
LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAg
ICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0
ZXJBdCh0ZXh0Qm94LmVuZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXh0Qm94
LnNldExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29sIElu
bGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5mb250
RGVzY3JpcHRpb24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmll
bnRhdGlvblVwcmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERh
dGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtNDYwLDcgKzQ2MCw3IEBAIGJv
b2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChk
b3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNoaWxk
LT5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2Fs
R2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMg
PSBudWxscHRyOwpAQCAtODczLDcgKzg3Myw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6
OmFkZFRleHRCb3hWaXMKIAogICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICBpZiAo
bGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiB0
ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNpc01h
cmtJc0Fib3ZlKSkgewotICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxl
LmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJp
bmcoKSk7CisgICAgICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5lU3R5bGUuZm9udENh
c2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJp
bmcoKSk7CiAgICAgICAgIGlmIChlbXBoYXNpc01hcmtJc0Fib3ZlID09ICFsaW5lU3R5bGUuaXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxvdyA9
IHN0ZDo6bWluKHRvcEdseXBoT3ZlcmZsb3csIC1lbXBoYXNpc01hcmtIZWlnaHQpOwogICAgICAg
ICBlbHNlCkBAIC04ODIsNyArODgyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRk
VGV4dEJveFZpcwogCiAgICAgLy8gSWYgbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmUsIHdlIHNo
b3VsZCBmYWN0b3IgdGhhdCBpbnRvIHJpZ2h0IGxheW91dCBvdmVyZmxvdy4gKEV2ZW4gaW4gUlRM
LCBsZXR0ZXItc3BhY2luZyBpcwogICAgIC8vIGFwcGxpZWQgdG8gdGhlIHJpZ2h0LCBzbyB0aGlz
IGlzIG5vdCBhbiBpc3N1ZSB3aXRoIGxlZnQgb3ZlcmZsb3cuCi0gICAgcmlnaHRHbHlwaE92ZXJm
bG93IC09IHN0ZDo6bWluKDAsIChpbnQpbGluZVN0eWxlLmZvbnQoKS5sZXR0ZXJTcGFjaW5nKCkp
OworICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5m
b250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSk7CiAKICAgICBMYXlvdXRVbml0IHRleHRTaGFk
b3dMb2dpY2FsVG9wOwogICAgIExheW91dFVuaXQgdGV4dFNoYWRvd0xvZ2ljYWxCb3R0b207CkBA
IC0xNTM0LDEwICsxNTM0LDEwIEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92
ZXJBbm4KICAgICAgICAgICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICAgICAgICAg
IGlmIChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFy
a05vbmUgJiYgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlz
dHNBbmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKSAmJiBlbXBo
YXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHlsZS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRv
cE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZv
bnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0
cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY2hp
bGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNN
YXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9u
IC0gdG9wT2ZFbXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90
dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGlu
dCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZExp
bmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dGQ6Om1heChyZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBvc2l0aW9uKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTgzLDEwICsxNTgzLDEwIEBA
IExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZVVuZGVyQW4KICAgICAgICAgICAgIGRv
d25jYXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92
ZShjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSk7CiAgICAgICAgICAgICBpZiAo
Y2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25l
ICYmICFlbXBoYXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExp
bmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9t
KCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0
eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hp
bGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5
bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3NpdGlv
bik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVT
dHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNp
c01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZFbXBo
YXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENhc2Nh
ZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0
cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBh
bGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTQgKzI0NSwxNCBAQCBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAgICAgcmV0dXJuIHN0YXRlOwog
fQogCi1zdGF0aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgRm9udENhc2NhZGUm
IGZvbnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlcmVyKQogewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNv
bWJpbmVUZXh0PihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJpbmVS
ZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAgICAg
IGlmICh0ZXh0Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJldHVy
biB0ZXh0Q29tYmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KLSAgICByZXR1
cm4gc3R5bGUuZm9udCgpOworICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQogCiBM
YXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3Ms
IGludCBlbmRQb3MpIGNvbnN0CkBAIC0yNjYsNyArMjY2LDcgQEAgTGF5b3V0UmVjdCBJbmxpbmVU
ZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gdGhp
cy0+c2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlz
LT5zZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0g
dGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5l
U3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRv
VXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlcjsKICAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5
cGhlbigpOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWkKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHRleHRQYWludFN0eWxl
OwogCiAgICAgLy8gU2V0IG91ciBmb250LgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9V
c2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIC8vIDEuIFBhaW50IGJhY2tn
cm91bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gRXhhbXBsZXMgb2Ygc3VjaCBiYWNrZ3JvdW5k
cyBpbmNsdWRlIHNlbGVjdGlvbgogICAgIC8vIGFuZCBjb21wb3NpdGlvbiB1bmRlcmxpbmVzLgog
ICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZVRleHRDbGlwICYmICFpc1ByaW50aW5nKSB7CkBAIC02Nzgs
NyArNjc4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgogICAg
IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKIH0KIAotdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCit2b2lkIElubGluZVRleHRCb3g6OnBh
aW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBDb2xvciB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQogICAg
IGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAjZW5kaWYKIH0KIAotdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lk
IElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQ
b3MpCiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBzdGQ6Om1h
eChzdGFydFBvcyAtIG9mZnNldCwgMCk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBzdGF0aWMgR3Jh
cGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpCiAgICAgfQogfQogCi12b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIp
Cit2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgYm9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dy
YW1tYXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnBy
aW50aW5nKCkpCkBAIC0xMTI4LDcgKzExMjgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
RG9jdW1lbnRNYXJrZXIoCiAgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKEZs
b2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5l
T2Zmc2V0KSwgd2lkdGgsIGxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkpOwog
fQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYg
Zm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCkKIHsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRoaXMt
PnNlbGVjdGlvbkhlaWdodCgpOwogCkBAIC0xMTU5LDcgKzExNTksNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRC
b3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtl
ciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2
b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJlIG5v
dCBhY3R1YWxseSBkcmF3biwgYnV0IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQgZm9y
IGhpdCB0ZXN0aW5nLgogICAgIExheW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CkBAIC0x
MTc3LDcgKzExNzcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFj
CiAgICAgbWFya2VyLnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKLXZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQordm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQogewogICAgIGlmICghcmVuZGVyZXIoKS50
ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbnQgSW5s
aW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAgICAgIHJldHVybiBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogbGVuKCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
bGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZv
bnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIGZvbnQu
b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBsaW5l
T2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCkBAIC0x
MzQyLDcgKzEzNDIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChp
CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBm
b250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIGludCBmcm9tID0g
IWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwogICAgIGlu
dCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3Rh
cnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwpA
QCAtMTM1Miw3ICsxMzUyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZz
ZXQoaQogICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rp
b24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCksIHJ1bi5sdHIoKSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0
cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBT
dHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAogewog
ICAgIEFTU0VSVChyZW5kZXJlcigpLnRleHQoKSk7CiAKQEAgLTEzNjYsNyArMTM2Niw3IEBAIFRl
eHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKICAgICByZXR1cm4gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAt
IHN0YXJ0UG9zLCBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKTsKIH0KIAotVGV4dFJ1biBJbmxpbmVU
ZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
Rm9udCYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3RyaW5n
KiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyog
aHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKICAgICBMYXlvdXRVbml0
IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1M
ZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZv
bnRDYXNjYWRlJiwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29u
c3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyog
aHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwogCiBwdWJsaWM6CiAgICAg
dmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIEZs
b2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNDgsMTcgKzE0OCwx
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zm
c2V0KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwot
ICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29s
IGJhY2tncm91bmQpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2
b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJv
b2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRp
b25VbmRlcmxpbmUmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFRleHREZWNvcmF0aW9u
LCBUZXh0RGVjb3JhdGlvblN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwgVGV4dFBhaW50ZXImKTsK
LSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQ29sb3IgdGV4
dENvbG9yKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBh
aW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgQ29sb3IgdGV4dENvbG9yKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJv
b2wgZ3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKLSAgICB2b2lkIGNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgY29tcHV0ZVJlY3RGb3JS
ZXBsYWNlbWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyNSw3
ICsyMzI1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAg
ICAgICByZXR1cm4gbGVmdDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcg
YXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUg
ZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRo
ID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhD
aGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIGxlZnQ7
CiAKQEAgLTIzNjUsNyArMjM2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExv
Z2ljYWxSaWcKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBs
ZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0
IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5z
dHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9h
dCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAg
ICByZXR1cm4gcmlnaHQ7CiAKQEAgLTMwMDMsNyArMzAwMyw3IEBAIHN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIHBzZXVkb1N0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcHNldWRv
U3R5bGUtPmZvbnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7
CisgICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQgZGVz
aXJlZENhcEhlaWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkg
KiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0
KCk7CiAgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJp
Y3MoKS5jYXBIZWlnaHQoKTsKQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsK
ICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHBzZXVk
b1N0eWxlLT5mb250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHBzZXVkb1N0
eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIGFjdHVhbENh
cEhlaWdodCA9IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzY5Myw3ICszNjkzLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6
OnJlbmRlck5hbWUoKSBjbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2Jq
ZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b24pCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wg
ZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7
CkBAIC0zNzA4LDcgKzM3MDgsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4
dFJ1bkluCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlu
bGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxl
LnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBAIC0zNzI3LDI0ICszNzI3LDI0IEBAIHN0
YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICByZXR1cm4gcnVuOwog
fQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVu
OjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRl
eHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0eWxlLCBl
eHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJu
IGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5n
dGgsIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
UmVuZGVyVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBh
bnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFJlbmRlclRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6
RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIGlmICh0ZXh0LT5pczhCaXQoKSkK
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCB0
ZXh0LT5jaGFyYWN0ZXJzOCgpLCB0ZXh0LT50ZXh0TGVuZ3RoKCksIHN0eWxlLCBleHBhbnNpb24p
OwogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4
dC0+Y2hhcmFjdGVyczE2KCksIHRleHQtPnRleHRMZW5ndGgoKSwgc3R5bGUsIGV4cGFuc2lvbik7
CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBU
ZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHRleHQt
PnRleHRMZW5ndGgoKSk7CiAgICAgaWYgKHRleHQtPmlzOEJpdCgpKQpAQCAtMzc1Miw3ICszNzUy
LDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZQogICAgIHJldHVy
biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFjdGVy
czE2KCkgKyBvZmZzZXQsIGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25z
dCBGb250JiBmb250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBm
bGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwyMiArMjAyLDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpICYmICFvYmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYgIW9i
ai0+Y29udGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6
RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4
dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRS
dW5GbGFncyk7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5k
ZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIGNvbnN0
IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFu
c2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlv
ciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFk
aW5nRXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVu
ZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAg
ICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0
aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3Qg
Rm9udCYsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJT
dHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3Qq
IGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9y
YmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0
eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAg
ICAgCiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlw
VHJhaWxpbmdTcGFjZShmbAogICAgICAgICAvLyBDb2xsYXBzZSBhd2F5IHRoZSB0cmFpbGluZyBz
cGFjZSBhdCB0aGUgZW5kIG9mIGEgYmxvY2suCiAgICAgICAgIFJlbmRlclRleHQmIHJlbmRlclRl
eHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqdHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAgICAg
Y29uc3QgVUNoYXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5k
ZXJUZXh0LnN0eWxlKCkuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUu
CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgpLmZv
bnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAg
ZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oJnJlbmRlclRleHQsIGZvbnQsICZzcGFjZSwgMSwgcmVuZGVyVGV4dC5zdHlsZSgpKSk7CiAg
ICAgICAgIGlubGluZU1heCAtPSBzcGFjZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOwogICAg
ICAgICBpZiAoaW5saW5lTWluID4gaW5saW5lTWF4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNl
dExvZ2ljYWxXaWR0aEZvclRleAogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBm
YWxsYmFja0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8p
LmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVy
ZXItPnBhcmVudCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKICAgICAvLyBBbHdheXMgY29t
cHV0ZSBnbHlwaCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJveC1jb250YWluIHZhbHVl
IGlzICJnbHlwaHMiLgogICAgIGlmIChsaW5lQm94LT5maXRzVG9HbHlwaHMoKSkgewogICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdzIGZvbnQgYm94LCB0
aGVuIGRvbid0IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93LiBUaGlzIG9wdGlt
aXphdGlvbgpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2Fs
V2lkdGhGb3JUZXgKICAgICAgICAgICAgICAgICAgICAgJndvcmRNZWFzdXJlbWVudC5mYWxsYmFj
a0ZvbnRzLCAmb3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgIFVDaGFyIGMgPSByZW5kZXJlci0+
Y2hhcmFjdGVyQXQod29yZE1lYXN1cmVtZW50LnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBpZiAoaSA+IDAgJiYgd29yZExlbmd0aCA9PSAxICYmIChjID09ICcgJyB8fCBjID09ICdcdCcp
KQotICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRlcmVyLT5zdHlsZSgp
LmZvbnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRo
ICs9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1lYXN1
cmVtZW50LndpZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tG
b250cy5pc0VtcHR5KCkpIHsKQEAgLTc0MywxNCArNzQzLDE0IEBAIEJpZGlSdW4qIFJlbmRlckJs
b2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT0gSlVT
VElGWSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1bikgewogICAgICAgICAgICAgICAgIGlmICgh
aXNBZnRlckV4cGFuc2lvbikKICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4
dEJveD4oKnJ1bi0+Ym94KCkpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKHRydWUpOwotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFydCwgcnVu
LT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9z
dGFydCwgcnVuLT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bw
b3J0dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGludCBsZW5ndGggPSByZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAg
ICAgIGlmICghcnVuLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3
bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+bV9zdGFydCkpKQotICAgICAgICAgICAg
ICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFyZW50
KCksIGxpbmVJbmZvKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
dG90YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5l
SW5mbykuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIG5lZWRz
V29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1
bi0+bV9zdG9wIC0gMSkpICYmIHJ1bi0+bV9zdG9wID09IGxlbmd0aDsKICAgICAgICAgICAgIH0K
IApAQCAtNzY4LDcgKzc2OCw3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlu
bGluZUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0Qm94
PigqbGVhZkNoaWxkKS5zZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4o
bGVhZkNoaWxkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVu
ZGVyVGV4dC5zdHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBh
bnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0lu
UnVuID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5z
dHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bw
b3J0dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0xOTA3LDkgKzE5MDcsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tMaW5lc0Zv
clRleHRPCiB7CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMgdXNp
bmcgdGhlIGN1cnJlbnQgZm9udC4KICAgICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29u
ZmlndXJhYmxlLCBhbHNvIG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jpem9u
dGFsIGVsbGlwc2lzIGlzICJub3QgcmVuZGVyYWJsZSIKLSAgICBjb25zdCBGb250JiBmb250ID0g
c3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7Ci0gICAgY29uc3Qg
Rm9udCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOwogICAgIGZsb2F0IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxp
cHNpcywgMSwgZmlyc3RMaW5lU3R5bGUoKSkpOwogICAgIGZsb2F0IGVsbGlwc2lzV2lkdGggPSAo
Zm9udCA9PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwg
c3R5bGUoKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6c2V0UmVuZGVyZWRUZXh0KAogICAgIG1fbmVlZHNG
b250VXBkYXRlID0gdHJ1ZTsKIH0KIAotZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBv
c2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4
dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAg
ICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgcmV0dXJuIGZvbnQuc2l6ZSgpOwpAQCAtMTA4
LDcgKzEwOCw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBm
bG9hdCBjb21iaW5lZFRleHRXaWR0aCA9IHdpZHRoKDAsIHRleHRMZW5ndGgoKSwgb3JpZ2luYWxG
b250KCksIDAsIG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKICAgICBtX2lzQ29tYmluZWQgPSBj
b21iaW5lZFRleHRXaWR0aCA8PSBlbVdpZHRoOwogICAgIAotICAgIEZvbnRTZWxlY3RvciogZm9u
dFNlbGVjdG9yID0gc3R5bGUoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7
CiAKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICBzaG91bGRVcGRhdGVGb250ID0gbV9j
b21iaW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOyAvLyBOZWVk
IHRvIGNoYW5nZSBmb250IG9yaWVudGF0aW9uIHRvIGhvcml6b250YWwuCkBAIC0xMTcsNyArMTE3
LDggQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBzdGF0
aWMgY29uc3QgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnRzW10gPSB7IEhhbGZXaWR0aCwg
VGhpcmRXaWR0aCwgUXVhcnRlcldpZHRoIH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgod2lkdGhWYXJpYW50cykgOyArK2kpIHsKICAgICAgICAgICAg
IGRlc2NyaXB0aW9uLnNldFdpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnRzW2ldKTsKLSAgICAgICAg
ICAgIEZvbnQgY29tcHJlc3NlZEZvbnQgPSBGb250KGRlc2NyaXB0aW9uLCBzdHlsZSgpLmZvbnQo
KS5sZXR0ZXJTcGFjaW5nKCksIHN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCkpOworCisgICAg
ICAgICAgICBGb250Q2FzY2FkZSBjb21wcmVzc2VkRm9udChkZXNjcmlwdGlvbiwgc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRT
cGFjaW5nKCkpOwogICAgICAgICAgICAgY29tcHJlc3NlZEZvbnQudXBkYXRlKGZvbnRTZWxlY3Rv
cik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZsb2F0IHJ1bldpZHRoID0gUmVuZGVyVGV4
dDo6d2lkdGgoMCwgdGV4dExlbmd0aCgpLCBjb21wcmVzc2VkRm9udCwgMCwgbnVsbHB0ciwgJmds
eXBoT3ZlcmZsb3cpOwpAQCAtMTM2LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6
OmNvbWJpbmVUZXh0KCkKICAgICAgICAgc2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZvbnRT
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigp
KTsKIAogICAgIGlmIChzaG91bGRVcGRhdGVGb250KQotICAgICAgICBtX2NvbWJpbmVGb250U3R5
bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKyAgICAgICAgbV9jb21iaW5lRm9udFN0
eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgaWYgKG1faXND
b21iaW5lZCkgewogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclN0cmluZywgKCZvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciwgMSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAj
aWZuZGVmIFJlbmRlckNvbWJpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyQ29tYmluZVRleHRfaAog
Ci0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCkBAIC0zOCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdp
bihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0
OwogICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmLCBpbnQmIGxlbmd0aCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVk
OyB9Ci0gICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9udCkgY29uc3Qg
eyByZXR1cm4gZm9udC5zaXplKCk7IH0KLSAgICBjb25zdCBGb250JiBvcmlnaW5hbEZvbnQoKSBj
b25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250KCk7IH0KLSAgICBjb25zdCBGb250
JiB0ZXh0Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUtPmZv
bnQoKTsgfQorICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBvcmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250Q2Fz
Y2FkZSgpOyB9CisgICAgY29uc3QgRm9udENhc2NhZGUmIHRleHRDb21iaW5lRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKTsgfQogCiBwcml2YXRl
OgogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmlydHVhbCBib29sIGlz
Q29tYmluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQm
LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZv
bnRDYXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuICJSZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtOTk3LDcg
Kzk5Nyw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUwKICAgICAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNB
bmRTcGFjZVN0ciwgKGVsbGlwc2lzQW5kU3BhY2UsIDIpKTsKICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRh
bEVsbGlwc2lzLCAxKSk7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBu
dW1WaXNpYmxlTGluZXMgPT0gMSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgICAg
ICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKIAogICAgICAgICAvLyBH
ZXQgZWxsaXBzaXMgd2lkdGgsIGFuZCBpZiB0aGUgbGFzdCBjaGlsZCBpcyBhbiBhbmNob3IsIGl0
IHdpbGwgZ28gYWZ0ZXIgdGhlIGVsbGlwc2lzLCBzbyBhZGQgaW4gYSBzcGFjZSBhbmQgdGhlIGFu
Y2hvciB3aWR0aCB0b28KICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRP
YmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBG
bG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0Owot
ICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIi
KTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFnZXRSZXBsYWNlbWVudFRleHRHZW9t
ZXRyeShwYWludE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50
VGV4dFJlY3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtMzQ5LDcgKzM0
OSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFVuYXZhaWxhYmwKICAgICByZXBh
aW50KCk7CiB9CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0
JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxh
Y2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiBmb250LCBUZXh0UnVu
JiBydW4sIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0Citib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0
OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVj
dCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwg
Rm9udENhc2NhZGUmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3QK
IHsKICAgICBib29sIGluY2x1ZGVzQXJyb3cgPSBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3Nh
Z2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKIApA
QCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2Vt
ZW4KICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShmcmFtZSgpLnNldHRpbmdzKCkuZm9udFJl
bmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7
Ci0gICAgZm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKKyAgICBmb250ID0gRm9u
dENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZSgwKTsKIAog
ICAgIHJ1biA9IFRleHRSdW4obV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCk7CkBA
IC0zOTEsNyArMzkxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dW5hdmFp
bAogICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVu
dFRleHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAg
IEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIsIDApOwogICAgIGZsb2F0IHRl
eHRXaWR0aDsKICAgICBpZiAoZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoYWNjdW11bGF0ZWRP
ZmZzZXQsIGNvbnRlbnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBh
cnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBib29s
IFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFiCiAgICAgRmxvYXRSZWN0IGluZGlj
YXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRS
ZWN0IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAg
ICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIHJldHVybiBnZXRS
ZXBsYWNlbWVudFRleHRHZW9tZXRyeShJbnRQb2ludCgpLCBjb250ZW50UmVjdCwgaW5kaWNhdG9y
UmVjdCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0
aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9v
bCk7CiAgICAgYm9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VF
dmVudCYpIGNvbnN0OwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21l
dHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250
ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50
VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0
ZXh0V2lkdGgpIGNvbnN0OworICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0
LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVj
dCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiwgVGV4dFJ1biYsIGZsb2F0JiB0
ZXh0V2lkdGgpIGNvbnN0OwogICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0
b3JCb3VuZHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjCiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheWVkRmlsZW5hbWUgPSBm
aWxlVGV4dFZhbHVlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQo
KTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCk7CiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9u
dCwgZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBh
bnNpb24sIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwogICAg
ICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBA
QCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlSW50CiAgICAgLy8gKHVzaW5n
ICIwIiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgIGNvbnN0IFVDaGFyIGNoYXJhY3Rl
ciA9ICcwJzsKICAgICBjb25zdCBTdHJpbmcgY2hhcmFjdGVyQXNTdHJpbmcgPSBTdHJpbmcoJmNo
YXJhY3RlciwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcgY29u
c3RydWN0VGV4dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KICAgICBSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbCogcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250
cm9sKj4odGhpcyk7CiAgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0V2lk
dGhOdW1DaGFycyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwg
Y2hhcmFjdGVyQXNTdHJpbmcsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNp
b24pKTsKQEAgLTI3MSw5ICsyNzEsOSBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmZpbGVUZXh0CiAgICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLmZpbGVzKCkpOwogI2lmIFBMQVRG
T1JNKElPUykKICAgICBpZiAoaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50KCku
ZGlzcGxheVN0cmluZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udCgpLCBTdHJp
bmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICByZXR1cm4gU3RyaW5n
VHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwg
bWF4RmlsZW5hbWVXaWR0aCgpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIFN0cmluZ1RydW5jYXRv
cjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CiAjZW5kaWYKLSAgICByZXR1cm4gdGhlbWUoKS5maWxl
TGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHlsZSgpLmZvbnQoKSwg
bWF4RmlsZW5hbWVXaWR0aCgpLCBpbnB1dEVsZW1lbnQoKS5tdWx0aXBsZSgpKTsKKyAgICByZXR1
cm4gdGhlbWUoKS5maWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBz
dHlsZSgpLmZvbnRDYXNjYWRlKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCku
bXVsdGlwbGUoKSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBSZW5kZXJG
bG93VGhyZWFkOjpjcmVhdAogICAgIG5ld1N0eWxlLmdldCgpLnNldFRvcChMZW5ndGgoMCwgRml4
ZWQpKTsKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRXaWR0aChMZW5ndGgoMTAwLCBQZXJjZW50KSk7
CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0SGVpZ2h0KExlbmd0aCgxMDAsIFBlcmNlbnQpKTsKLSAg
ICBuZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIG5ld1N0eWxlLmdldCgpLmZv
bnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogICAgIHJldHVybiBuZXdTdHlsZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxT
Y3JlZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBSZWY8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0
WkluZGV4KElOVF9NQVgpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEZvbnREZXNj
cmlwdGlvbihGb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZv
bnQoKS51cGRhdGUoMCk7CisgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCku
dXBkYXRlKG51bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3BsYXko
RkxFWCk7CiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEp1c3RpZnlDb250ZW50KEp1c3Rp
ZnlDZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6c2V0
SW1hZ2VTaXplRm9yQWx0VGV4dAogCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2Vy
IG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgp
OworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KTsKICAgICAgICAgSW50U2l6ZSBwYWRkZWRUZXh0U2l6ZShwYWRkaW5nV2lkdGggKyBzdGQ6Om1p
bihjZWlsZihmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZv
bnQsIG1fYWx0VGV4dCwgc3R5bGUoKSkpKSwgbWF4QWx0VGV4dFdpZHRoKSwgcGFkZGluZ0hlaWdo
dCArIHN0ZDo6bWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhlaWdo
dCkpOwogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemUuZXhwYW5kZWRUbyhwYWRkZWRUZXh0
U2l6ZSk7CiAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKG1fYWx0VGV4dCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZSgpLmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IEZv
bnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3MoKTsKICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwogICAgICAgICAg
ICAgICAgIExheW91dFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXND
cmVhdGVMaW4KICAgICAgICAgfHwgKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRTdHlsZS0+
dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FKQogICAgICAgICB8fCBzdHlsZSgpLnZlcnRpY2Fs
QWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgpLnRleHRFbXBoYXNpc01hcmso
KSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZQotICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAoIXBh
cmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50
QW5kTGluZUdhcChzdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICB8fCAoY2hl
Y2tGb250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFz
SWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZv
bnRNZXRyaWNzKCkpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5
bGUoKS5saW5lSGVpZ2h0KCkpKQogICAgICAgICB8fCAoZmxvd1RocmVhZCAmJiBmbG93VGhyZWFk
LT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKTsgLy8gRklYTUU6IEVuYWJsZSB0aGUgb3B0aW1p
emF0aW9uIG9uY2Ugd2UgbWFrZSBvdmVyZmxvdyBjb21wdXRhdGlvbiBmb3IgY3VsbGVkIGlubGlu
ZXMgaW4gcmVnaW9ucy4KIApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1
cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3Qg
bGluZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmly
c3RMaW5lU3R5bGUoKTsKICAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExp
bmVTdHlsZSgpOwotICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2Fw
KGNoaWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgIGFsd2F5c0NyZWF0ZUxp
bmVCb3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lk
ZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5m
b250TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkg
IT0gQkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0g
Y2hpbGRTdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgfQpAQCAtNTc0LDggKzU3NCw4IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgIGlmIChyZW5k
ZXJCb3guaW5saW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElu
bGluZUJveCYgcm9vdEJveCA9IHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290
Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWlu
ZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94Lmxv
Z2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwot
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udCgp
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3Ag
PSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWln
aHQgPSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT54
KCkgLSByZW5kZXJCb3gubWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCByZW5kZXJCb3gud2lkdGgo
KSArIHJlbmRlckJveC5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGxvZ2ljYWxIZWlnaHQpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxv
d0JveCogY2hpbGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7
IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgewogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJv
b3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRh
aW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290
Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNh
bFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXJTdHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3Qo
RmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgp
LApAQCAtNjEwLDggKzYxMCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExp
bmVCb3gKICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRl
eHQuZmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5uZXh0
VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJv
eCA9IGNoaWxkVGV4dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBjb250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmly
c3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCku
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gu
bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFp
bmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KGNoaWxkVGV4
dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVp
Z2h0KSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCB1c2UgYSBoZWxwZXIgdG8gc2hhcmUgdGhlc2Ugd2l0aCB0ZXh0IHBhdGgu
CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGlubGluZUJv
eC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJT
dHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUo
KSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJT
dHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6
b250YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QoaW5s
aW5lQm94LT54KCksIGxvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFdpZHRoKCksIGxvZ2lj
YWxIZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxp
c3RJdGVtc1tpXTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwotICAgICAgICAgICAgRm9udCBp
dGVtRm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgRm9udENhc2NhZGUgaXRlbUZv
bnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVu
dCkpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVu
dD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBk
LnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVtRm9udCA9
IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygp
KTsKKyAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250Lmxl
dHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICAgICAg
aXRlbUZvbnQudXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxl
Y3RvcigpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRT
aXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSog
aXRlbVN0eWxlLCBGb250IGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3Rh
dGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJl
bmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0
ZW1Cb3VkaW5nQm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0
eWxlLT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3Qg
SlVTVElGWS4gU2hvdWxkIHdlPwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxs
Q29sb3IodGV4dENvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihpdGVt
VGV4dCwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgaXRlbVN0eWxlLT5k
aXJlY3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUtPnVuaWNvZGVCaWRpKCkpLCB0cnVlLCBU
ZXh0UnVuOjpOb1JvdW5kaW5nKTsKLSAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250KCk7
CisgICAgRm9udENhc2NhZGUgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
TGF5b3V0UmVjdCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4
KTsKICAgICByLm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVuLCBpdGVtU3R5bGUs
IGl0ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJ
dGVtRWxlbWVudCkpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0g
ICAgICAgIGl0ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1G
b250LndvcmRTcGFjaW5nKCkpOworICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0
ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAg
IGl0ZW1Gb250LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgpAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7
CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAg
ICAgVGV4dFJ1biB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywg
Zm9udCwgbV90ZXh0LCBzdHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogCiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGggPSAwOwogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLmxp
c3RTdHlsZVR5cGUoKTsKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1h
cmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBB
c3Rlcmlza3M6CiAgICAgICAgIGNhc2UgRm9vdG5vdGVzOiB7Ci0gICAgICAgICAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVu
ID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHls
ZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVh
ZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICByZWxhdGl2
ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIGZvbnQud2lkdGgocnVuKSwgZm9udC5mb250TWV0cmljcygp
LmhlaWdodCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1MSw3ICsxODUxLDcgQEAgSW50
UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICBjYXNlIFVyZHU6
CiAgICAgICAgICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9u
dCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRU
ZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgocnVu
KTsKICAgICAgICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4
KHR5cGUsIG1fbGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsNyArMTk2LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bAogICAgIGlmIChtX2lubmVyQmxvY2spIC8vIFJlbmRlckJsb2NrIGhhbmRsZWQgdXBkYXRpbmcg
dGhlIGFub255bW91cyBibG9jaydzIHN0eWxlLgogICAgICAgICBhZGp1c3RJbm5lclN0eWxlKCk7
CiAKLSAgICBib29sIGZvbnRDaGFuZ2VkID0gIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5mb250KCkg
IT0gc3R5bGUoKS5mb250KCk7CisgICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8fCBv
bGRTdHlsZS0+Zm9udENhc2NhZGUoKSAhPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYg
KGZvbnRDaGFuZ2VkKSB7CiAgICAgICAgIHVwZGF0ZU9wdGlvbnNXaWR0aCgpOwogICAgICAgICBt
X25lZWRzT3B0aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CkBAIC0yMjIsMTMgKzIyMiwxMyBAQCB2
b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgICAgICBpZiAo
UmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAg
ICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25T
dHlsZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCk7CiAgICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWls
aW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRl
eHRSdW5GbGFncyk7CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gZm9udC53aWR0aChy
dW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGggPSBzdGQ6Om1h
eChtYXhPcHRpb25XaWR0aCwgb3B0aW9uV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9u
dCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxp
bmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4
dFJ1bkZsYWdzKTsKICAgICAgICAgICAgIG1heE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0
aW9uV2lkdGgsIGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIH0KQEAgLTUyMyw3ICs1MjMsNyBA
QCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgZ2V0SXRlbUJh
Y2tncm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXNDdXN0
b21CYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+
cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5jb21wdXRl
ZFN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwg
c3R5bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVy
biBzdHlsZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250Q2FzY2FkZSgp
LCBzdHlsZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLT5kaXNwbGF5
KCkgPT0gTk9ORSwgdHJ1ZSwgc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlvbigp
LCBpc092ZXJyaWRlKHN0eWxlLT51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3Rv
bUJhY2tncm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3Ig
OiBQb3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcikgOiBtZW51U3R5bGUoKTsK
IH0KQEAgLTU2NCw3ICs1NjQsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVu
dVN0eWxlCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBtX2lubmVyQmxvY2sg
PyBtX2lubmVyQmxvY2stPnN0eWxlKCkgOiBzdHlsZSgpOwogICAgIEludFJlY3QgYWJzQm91bmRz
ID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICByZXR1
cm4gUG9wdXBNZW51U3R5bGUoc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSwKLSAgICAgICAgc3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9Vc2Uu
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsCisg
ICAgICAgIHN0eWxlVG9Vc2UuZm9udENhc2NhZGUoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwKICAgICAgICAgc3R5bGUo
KS5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
LCBzdHlsZVRvVXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5kaXJlY3Rpb24oKSwg
aXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6RGVmYXVs
dEJhY2tncm91bmRDb2xvciwKICAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0
aGVtZSgpLnBvcHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFJlbmRlclJ1YnlSdW46OmxheW91dCgpCiAg
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcnQtPnN0eWxlKCkucnVieVBvc2l0
aW9uKCkgPT0gUnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIpIHsKICAgICAgICAgLy8gQm9wb21v
Zm8uIFdlIG5lZWQgdG8gbW92ZSB0aGUgUmVuZGVyUnVieVRleHQgb3ZlciB0byB0aGUgcmlnaHQg
c2lkZSBhbmQgY2VudGVyIGl0CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgcmVsYXRpdmUgdG8gdGhl
IGJhc2UuCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKLSAgICAg
ICAgZmxvYXQgZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250LmxldHRlclNwYWNpbmcoKSwg
Mi4wZiAqIHJ0LT5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpKTsKKyAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CisgICAg
ICAgIGZsb2F0IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9udC5sZXR0ZXJTcGFjaW5nKCks
IDIuMGYgKiBydC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkp
OwogICAgICAgICBzZXRXaWR0aCh3aWR0aCgpICsgZGlzdGFuY2VCZXR3ZWVuQmFzZSAtIGZvbnQu
bGV0dGVyU3BhY2luZygpKTsKICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiByYiA9IHJ1YnlC
YXNlKCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgZmlyc3RMaW5lVG9wID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIFBvcHVwTWVudVN0eWxl
IFJlbmRlclNlYXJjaEZpZWxkOjppdGVtU3QKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNo
RmllbGQ6Om1lbnVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCku
Zm9udCgpLCBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBQb3B1
cE1lbnVTdHlsZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSwgc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lC
TEUsCiAgICAgICAgIHN0eWxlKCkuZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlKCkudGV4
dEluZGVudCgpLCBzdHlsZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29k
ZUJpZGkoKSksIFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOSw4ICsyMjksOCBAQCBib29sIFJlbmRlclRleHQ6OmlzVGV4dEZyYWdtZW50
KCkgY29uc3QKIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KCkgY29uc3QKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OwotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9u
dCgpLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChzdHlsZS5mb250KCkudXNlQmFja3NsYXNo
QXNZZW5TeW1ib2woKSkKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKHN0eWxl
LmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIG1fdXNl
QmFja3NsYXNoQXNZZW5TeW1ib2wgPSBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKTsK
ICAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAg
IH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9
IG5ld1N0eWxlLmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKSB7CisgICAgfSBlbHNl
IGlmIChvbGRTdHlsZS0+Zm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9
IG5ld1N0eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkgewogICAg
ICAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC00NTEs
NyArNDUxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAg
IHJldHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0
Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0
IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAorQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBG
b250Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5
bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CiAg
ICAgICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJl
bmRlckNvbWJpbmVUZXh0PigqdGhpcyk7CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBSZW5kZXJU
ZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0
cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcg
fHwgKHRleHRbMF0gPT0gJ1xuJyAmJiAhc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHx8IHRleHRb
MF0gPT0gJ1x0JykgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOyAv
LyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBm
aXJzdC1saW5lLgogICAgICAgICBpZiAoc3RyaXBGcm9udFNwYWNlcykgewogICAgICAgICAgICAg
Y29uc3QgVUNoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0g
Zm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmc3Bh
Y2UsIDEsIHN0eWxlKSk7CkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmlt
bWVkUHJlZldpZHRocyhmbG9hdAogCiAgICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRocyBieSBz
Y2FubmluZyB0aGUgc3RyaW5nIGZvciBuZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWspIHsKLSAg
ICAgICAgY29uc3QgRm9udCYgZiA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3Jl
cyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZiA9IHN0eWxlLmZvbnRD
YXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgYm9v
bCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBiZWdpbk1heFcgPSBtYXhXOwogICAgICAgICBl
bmRNYXhXID0gbWF4VzsKQEAgLTYzNywxMyArNjM3LDEzIEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmRO
b0ZhbGxiYWNrRm9udHMgPSB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldp
ZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQorc3RhdGljIGlubGlu
ZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSkp
OwogfQogCi1zdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5n
VmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZp
eExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZs
b2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQs
IGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBp
bnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAgc3VmZml4U3RhcnQg
PSAwOwogICAgIGlmICh3b3JkLmxlbmd0aCgpIDw9IG1pbmltdW1TdWZmaXhMZW5ndGgpCkBAIC03
MDEsNyArNzAxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAog
ICAgIG1faGFzRW5kV1MgPSBmYWxzZTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9
IHRoaXMtPnN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsgLy8g
RklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1s
aW5lLgogICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gZm9udC53b3JkU3BhY2luZygpOwogICAgIGlu
dCBsZW4gPSB0ZXh0TGVuZ3RoKCk7CiAgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRl
cmF0b3IobV90ZXh0LCBzdHlsZS5sb2NhbGUoKSwgbWFwTGluZUJyZWFrVG9JdGVyYXRvck1vZGUo
c3R5bGUubGluZUJyZWFrKCkpKTsKQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgICAgICBsZW4gPSB0ZXh0TGVuZ3RoKCkg
LSBmcm9tOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IGZpcnN0TGluZSA/
IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4s
IGxpbmVTdHlsZS5mb250KCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwor
ICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4UG9z
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6
d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmLCBmbG9hdCB4
UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdCB4
UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBsZW4g
PD0gdGV4dExlbmd0aCgpKTsKICAgICBpZiAoIXRleHRMZW5ndGgoKSkKQEAgLTEyMjYsNyArMTIy
Niw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKIAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgZmxvYXQgdzsKLSAg
ICBpZiAoJmYgPT0gJnN0eWxlLmZvbnQoKSkgeworICAgIGlmICgmZiA9PSAmc3R5bGUuZm9udENh
c2NhZGUoKSkgewogICAgICAgICBpZiAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSgpICYmICFmcm9t
ICYmIGxlbiA9PSB0ZXh0TGVuZ3RoKCkgJiYgKCFnbHlwaE92ZXJmbG93IHx8ICFnbHlwaE92ZXJm
bG93LT5jb21wdXRlQm91bmRzKSkgewogICAgICAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZ2x5cGhPdmVyZmxvdyk7CkBAIC0xNTU2LDcgKzE1NTYs
NyBAQCBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVDYW5Vc2VTaW1wbGVGb250CiB7CiAgICAgaWYg
KGlzQWxsQVNDSUkoKSB8fCBtX3RleHQuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIHJldHVybiBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgoKSkgPT0gRm9udDo6U2ltcGxlOworICAgIHJldHVybiBGb250Q2FzY2FkZTo6Y2hhcmFj
dGVyUmFuZ2VDb2RlUGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnRDYXNjYWRl
OjpTaW1wbGU7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6bW9tZW50YXJpbHlSZXZlYWxMYXN0VHlw
ZWRDaGFyYWN0ZXIodW5zaWduZWQgb2Zmc2V0QWZ0ZXJMYXN0VHlwZWRDaGFyYWN0ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1l
bnRhdGlvbiBvZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRC
b3gmKTsKIAotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBjb25zdCBGb250JiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9u
dENhc2NhZGUmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwg
ZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29s
IGZpcnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogCiAgICAgZmxvYXQgbWlu
TG9naWNhbFdpZHRoKCkgY29uc3Q7CkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4pIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQm
LCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmLCBp
bnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJ
OyB9CiAgICAgYm9vbCBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sOjpoaXRJbm5lclRleHRFbGVtCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJv
bDo6Z2V0QXZlcmFnZUNoYXJXaWR0aCgpCiB7CiAgICAgZmxvYXQgd2lkdGg7Ci0gICAgaWYgKHN0
eWxlKCkuZm9udCgpLmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQorICAg
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJs
ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiB3aWR0aDsKIAogICAgIGNvbnN0IFVDaGFyIGNoID0g
JzAnOwogICAgIGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKLSAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0
VGV4dFJ1bih0aGlzLCBmb250LCBzdHIsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdF
eHBhbnNpb24pOwogICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICByZXR1
cm4gZm9udC53aWR0aCh0ZXh0UnVuKTsKQEAgLTE4OSw3ICsxODksNyBAQCBmbG9hdCBSZW5kZXJU
ZXh0Q29udHJvbDo6c2NhbGVFbVRvVW5pdHMoCiB7CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSB1
bml0c1BlckVtIHZhbHVlIGZvciBNUyBTaGVsbCBEbGcgYW5kIENvdXJpZXIgTmV3IGZyb20gdGhl
ICJoZWFkIiBmb250IHRhYmxlLgogICAgIGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOwotICAg
IHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOwor
ICAgIHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAqIHggLyB1bml0
c1BlckVtKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZUludHJpbnNpY0xv
Z2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhM
b2dpY2FsV2lkdGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmU6OmdldEF2ZQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRl
ZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIENv
dXJpZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3gg
YW5kIFNhZmFyaSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGlu
IHRoZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KLSAgICBpZiAoc3R5bGUoKS5mb250KCku
Zmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCisgICAgaWYgKHN0eWxlKCkuZm9udENh
c2NhZGUoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJu
IHNjYWxlRW1Ub1VuaXRzKDEyMjkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIGZs
b2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXYKICAgICAvLyBvZiBNUyBTaGVs
bCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkg
V2luIGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0
IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldp
ZHRoIHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKHN0
eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAgIGlmIChz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAg
ICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwogI2VuZGlmCiAKQEAgLTMzOCwxNSAr
MzM4LDE1IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjoKICAgICBm
bG9hdCBtYXhDaGFyV2lkdGggPSAwLmY7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5maXJz
dEZhbWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9u
dCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIE1TIFNoZWxsIERs
ZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4g
YW5kCiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9u
dCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCiAgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4TWlu
KSB2YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KICAgICBp
ZiAoZmFtaWx5ID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgbWF4Q2hhcldpZHRoID0gc2Nh
bGVFbVRvVW5pdHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoc3R5bGUoKS5mb250KCkuaGFzVmFsaWRB
dmVyYWdlQ2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgp
LmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CisgICAgZWxzZSBpZiAo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQorICAgICAg
ICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLm1heENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5wdXRz
LCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgY2FzZSBCdXR0
b25QYXJ0OiB7CiAgICAgICAgIC8vIEJvcmRlcgogICAgICAgICBMZW5ndGhCb3ggYm9yZGVyQm94
KHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUu
Ym9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICBi
b3JkZXJCb3ggPSBtX3RoZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnQoKSwgYm9y
ZGVyQm94LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBib3JkZXJCb3ggPSBtX3Ro
ZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIGJvcmRlckJveCwg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1
ZSgpICE9IHN0YXRpY19jYXN0PGludD4oc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSkpIHsKICAgICAg
ICAgICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUoKSkKICAgICAgICAgICAgICAgICBzdHls
ZS5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJCb3gudG9wKCkudmFsdWUoKSk7CkBAIC0xNDMsNyAr
MTQzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAg
ICB9CiAKICAgICAgICAgLy8gUGFkZGluZwotICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCA9
IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUucGFkZGlu
Z0JveCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhCb3ggcGFkZGlu
Z0JveCA9IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCks
IHN0eWxlLnBhZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYg
KHBhZGRpbmdCb3ggIT0gc3R5bGUucGFkZGluZ0JveCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0
UGFkZGluZ0JveChwYWRkaW5nQm94KTsKIApAQCAtMTU0LDI1ICsxNTQsMjUgQEAgdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICAvLyBXaWR0aCAvIEhlaWdo
dAogICAgICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBoZXJlIGFyZSBhZmZlY3RlZCBieSB0
aGUgem9vbS4KICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9l
c24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgotICAgICAgICBMZW5n
dGhTaXplIGNvbnRyb2xTaXplID0gbV90aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUuZm9u
dCgpLCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUt
PmNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIExlbmd0aFNpemUoc3R5bGUu
d2lkdGgoKSwgc3R5bGUuaGVpZ2h0KCkpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAg
ICBpZiAoY29udHJvbFNpemUud2lkdGgoKSAhPSBzdHlsZS53aWR0aCgpKQogICAgICAgICAgICAg
c3R5bGUuc2V0V2lkdGgoY29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChjb250cm9s
U2l6ZS5oZWlnaHQoKSAhPSBzdHlsZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxlLnNldEhl
aWdodChjb250cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8v
IE1pbi1XaWR0aCAvIE1pbi1IZWlnaHQKLSAgICAgICAgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6
ZSA9IG1fdGhlbWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxl
LmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUgPSBt
X3RoZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5
bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLndpZHRoKCkg
IT0gc3R5bGUubWluV2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldE1pbldpZHRoKG1pbkNv
bnRyb2xTaXplLndpZHRoKCkpOwogICAgICAgICBpZiAobWluQ29udHJvbFNpemUuaGVpZ2h0KCkg
IT0gc3R5bGUubWluSGVpZ2h0KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQobWlu
Q29udHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBGb250
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRyb2xG
b250KHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAgICAg
aWYgKGNvbnRyb2xGb250ICE9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKSkgeworICAg
ICAgICBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChw
YXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAg
ICBpZiAoY29udHJvbEZvbnQgIT0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24o
KSkgewogICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgZm9udC4KICAgICAgICAgICAgIGlm
IChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQotICAgICAgICAgICAgICAg
IHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgICAgICAgICAgc3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoMCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgb3VyIGxpbmUtaGVp
Z2h0CiAgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxl
TGlzdERlZmF1bHRMYWJlbAogICAgIHJldHVybiBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJl
bCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11
bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdE5h
bWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAgICAg
aWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcg
KzIzOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1
cm4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxp
c3REZWZhdWx0TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBG
b250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0
IEZvbnRDYXNjYWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25z
dDsKIAogICAgIGVudW0gRmlsZVVwbG9hZERlY29yYXRpb25zIHsgU2luZ2xlRmlsZSwgTXVsdGlw
bGVGaWxlcyB9OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiAvKmlucHV0UmVuZGVyZXIqLywgY29uc3QgUmVuZGVyT2Jq
ZWN0JiAvKmJ1dHRvblJlbmRlcmVyKi8sIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
LCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKICNpbXBvcnQgIkRhdGVDb21wb25lbnRzLmgiCiAj
aW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2ltcG9y
dCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5o
IgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiR3Jh
ZGllbnQuaCIKQEAgLTU0NSw3ICs1NDUsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTZWxlY3RMaXN0
QnV0dG9uU3R5bGUoCiAgICAgCiBjbGFzcyBSZW5kZXJUaGVtZU1lYXN1cmVUZXh0Q2xpZW50IDog
cHVibGljIE1lYXN1cmVUZXh0Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZU1lYXN1
cmVUZXh0Q2xpZW50KGNvbnN0IEZvbnQmIGZvbnQsIFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCisgICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENs
aWVudChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAg
ICAgLCBtX3JlbmRlck9iamVjdChyZW5kZXJPYmplY3QpCiAgICAgICAgICwgbV9zdHlsZShzdHls
ZSkKQEAgLTU1Nyw3ICs1NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2ZvbnQud2lk
dGgocnVuKTsKICAgICB9CiBwcml2YXRlOgotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBj
b25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJPYmpl
Y3Q7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CiB9OwpAQCAtNTc3LDcgKzU3Nyw3
IEBAIHN0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRW5mb3JjZSB0aGUgd2lkdGggYW5kIHNldCB0aGUgYm94LXNpemluZyB0
byBjb250ZW50LWJveCB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcGFkZGluZy4KLSAgICBGb250
IGZvbnQgPSBzdHlsZS5mb250KCk7CisgICAgRm9udENhc2NhZGUgZm9udCA9IHN0eWxlLmZvbnRD
YXNjYWRlKCk7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0RWxlbWVu
dC5yZW5kZXJlcigpOwogICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgp
ICYmICFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbmFwc2hvdHRlZFBsdWdpbk92ZXJsYXkoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNv
bnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVz
QWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1l
Rm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0aCwg
Ym9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJl
Y3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJl
ciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5w
dXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODE3
LDcgKzgxNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFMKICAg
ICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsK
IAogICAgIGlmIChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAg
ICAgICAgc3R5bGUuZm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3R5bGUuZm9udENhc2NhZGUo
KS51cGRhdGUoMCk7CiB9CiAKIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xT
aXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CkBAIC0xOTk3LDcgKzE5
OTcsNyBAQCBOU1RleHRGaWVsZENlbGwqIFJlbmRlclRoZW1lTWFjOjp0ZXh0RmllCiAgICAgcmV0
dXJuIG1fdGV4dEZpZWxkLmdldCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmZpbGVM
aXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9u
dCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJl
bmRlclRoZW1lTWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxp
c3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxl
c0FsbG93ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgUm9vdElu
bGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBi
b3hMaW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250cyAmJiAhdXNl
ZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGluZUhl
aWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAgICAgIHVzZWRG
b250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpKTsKKyAg
ICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9udHMt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJp
Y3MgPSB1c2VkRm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAgICAgICAgaW50IHVz
ZWRGb250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSgpKTsKQEAgLTEw
MTcsNyArMTAxNyw3IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6dmVydGljYWxQb3NpdGkK
ICAgICAKICAgICBpZiAodmVydGljYWxBbGlnbiAhPSBCQVNFTElORSkgewogICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgcGFyZW50TGluZVN0eWxlID0gZmlyc3RMaW5lID8gcGFyZW50LT5maXJz
dExpbmVTdHlsZSgpIDogcGFyZW50LT5zdHlsZSgpOwotICAgICAgICBjb25zdCBGb250JiBmb250
ID0gcGFyZW50TGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQgPSBwYXJlbnRMaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgY29uc3QgRm9udE1l
dHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgICAgICBpbnQgZm9u
dFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NCwxNyArMTg0LDE3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
ZmwKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJl
bHkgb24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHls
ZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAocHJpbWFyeUZv
bnREYXRhLmlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChjb25z
dCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkg
ewogICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSB8fCB0ZXh0UmVuZGVy
ZXIuaXNDb3VudGVyKCkgfHwgdGV4dFJlbmRlcmVyLmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVyZXIu
aXNUZXh0RnJhZ21lbnQoKQogICAgICAgICAgICAgfHwgdGV4dFJlbmRlcmVyLmlzU1ZHSW5saW5l
VGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc3R5bGUuZm9u
dCgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnQ6OlNpbXBs
ZSkKKyAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0
UmVuZGVyZXIudGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJp
bWFyeUZvbnREYXRhKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50cy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7
CiAKIEZsb3dDb250ZW50czo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
LSAgICA6IGZvbnQoc3R5bGUuZm9udCgpKQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgp
KQogICAgICwgdGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigpKQogICAgICwgY29sbGFwc2VXaGl0
ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQogICAgICwgcHJlc2VydmVOZXdsaW5l
KHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dD
b250ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHNfaAogI2RlZmluZSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzX2gKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJicmVha19saW5lcy5oIgpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAg
c3RydWN0IFN0eWxlIHsKICAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
KTsKIAotICAgICAgICBjb25zdCBGb250JiBmb250OworICAgICAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udDsKICAgICAgICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247CiAgICAgICAgIGJvb2wgY29s
bGFwc2VXaGl0ZXNwYWNlOwogICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0
aW9ucy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
NyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgYm9vbCBk
ZWJ1Z0JvcmRlcnNFbmFibGVkID0gZmxvdy5mcmFtZSgpLnNldHRpbmdzKCkuc2ltcGxlTGluZUxh
eW91dERlYnVnQm9yZGVyc0VuYWJsZWQoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCA9ICpwYWludEluZm8uY29udGV4dDsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9u
dCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsK
ICAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0UGFpbnRTdHlsZSA9IGNvbXB1dGVUZXh0UGFpbnRTdHls
ZShmbG93LmZyYW1lKCksIHN0eWxlLCBwYWludEluZm8pOwogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+
IDApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dFJlc29sdmVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMCw4ICsxMjAsOCBAQCBSdW5SZXNvbHZlcjo6UnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVy
QmxvCiAgICAgLCBtX2xpbmVIZWlnaHQobGluZUhlaWdodEZyb21GbG93KGZsb3cpKQogICAgICwg
bV9iYXNlbGluZShiYXNlbGluZUZyb21GbG93KGZsb3cpKQogICAgICwgbV9ib3JkZXJBbmRQYWRk
aW5nQmVmb3JlKGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKQotICAgICwgbV9hc2NlbnQo
Zmxvdy5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9kZXNj
ZW50KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCisgICAgLCBt
X2FzY2VudChmbG93LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgp
KQorICAgICwgbV9kZXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNz
KCkuZGVzY2VudCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEF1dG9TaXppbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b1NpemluZy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQs
NyBAQCBib29sIFRleHRBdXRvU2l6aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVyYWdl
U2l6ZSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+
ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAg
ICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVu
dCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB0
ZXh0LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gdGV4dC0+
cGFyZW50KCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjph
ZGp1c3ROb2RlU2l6ZQogICAgICAgICAgICAgaWYgKGxpc3RNYXJrZXJSZW5kZXJlci0+aXNMaXN0
TWFya2VyKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0g
Y2xvbmVSZW5kZXJTdHlsZVdpdGhTdGF0ZShsaXN0TWFya2VyUmVuZGVyZXItPnN0eWxlKCkpOwog
ICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+
ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOworICAgICAg
ICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9j
dW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KCpsaXN0TWFya2VyUmVuZGVyZXIpLnNl
dFN0eWxlKHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3RO
b2RlU2l6ZQogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0KExl
bmd0aChsaW5lSGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxl
LT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KGxpbmVIZWlnaHRMZW5ndGgpOwogICAgICAgICAgICAg
ICAgIG5ld1BhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5n
Tm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwor
ICAgICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRv
U2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9y
KCkpOwogICAgICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRTdHlsZShuZXdQYXJlbnRT
dHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIw
LDcgKzIyMCw3IEBAIHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShvcmlnaW5hbFNpemUpOwogICAgICAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3Rh
dGUodGV4dC0+c3R5bGUoKSk7CiAgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRv
U2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9y
KCkpOworICAgICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGF1dG9TaXppbmdO
b2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiAg
ICAgICAgICAgICB0ZXh0LT5wYXJlbnQoKS0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBw
YXJlbnQuCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpyZXNl
dCgpCiAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1BhcmVudFN0eWxlID0gY2xv
bmVSZW5kZXJTdHlsZVdpdGhTdGF0ZShwYXJlbnRTdHlsZSk7CiAgICAgICAgICAgICBuZXdQYXJl
bnRTdHlsZS0+c2V0TGluZUhlaWdodChvcmlnaW5hbExpbmVIZWlnaHQpOwogICAgICAgICAgICAg
bmV3UGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
ICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRv
Y3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAg
ICAgIG5ld1BhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+
ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAg
ICAgICAgcGFyZW50UmVuZGVyZXItPnNldFN0eWxlKG5ld1BhcmVudFN0eWxlLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRQYWludGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dFBhaW50ZXI6OlRleHRQYWludGVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRT
ZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250JiBmb250LAorVGV4dFBhaW50ZXI6OlRl
eHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBwYWludFNlbGVjdGVkVGV4
dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwKICAgICBpbnQgc3RhcnRQb3NpdGlvbkluVGV4dFJ1biwgaW50IGVuZFBvc2l0aW9u
SW5UZXh0Qm94U3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lz
TWFyaywgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCwgVGV4dFJ1biYgdGV4dFJ1biwK
ICAgICBGbG9hdFJlY3QmIGJveFJlY3QsIEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBlbXBo
YXNpc01hcmtPZmZzZXQsIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRv
d0RhdGEqIHNlbGVjdGlvblNoYWRvdywKICAgICBib29sIHRleHRCb3hJc0hvcml6b250YWwsIFRl
eHRQYWludFN0eWxlJiB0ZXh0UGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBh
aW50U3R5bGUpCkBAIC01Niw3ICs1Niw3IEBAIFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFw
aGljc0NvbnRleHQKIHsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3Mo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVu
JiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKK3N0YXRpYyB2b2lk
IGRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgZW1waGFzaXNNYXJrLAogICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IHRvKQogewogICAgIGlm
IChlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQpAQCAtMTEzLDcgKzExMyw3IEBAIFNoYWRvd0FwcGxp
ZXI6On5TaGFkb3dBcHBsaWVyKCkKICAgICAgICAgbV9jb250ZXh0LmNsZWFyU2hhZG93KCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBlbXBoYXNpc01hcmssCitzdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKICAg
ICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQs
IGludCB0cnVuY2F0aW9uUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0
IEZsb2F0UmVjdCYgYm94UmVjdCwKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wg
c3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRQYWludGVyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRp
YyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKIAogY2xhc3MgVGV4dFBhaW50ZXIg
ewogcHVibGljOgotICAgIFRleHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgcGFpbnRT
ZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3Qg
Rm9udCYsCisgICAgVGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgYm9vbCBwYWludFNlbGVj
dGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBGb250
Q2FzY2FkZSYsCiAgICAgaW50IHN0YXJ0UG9zaXRpb25JblRleHRSdW4sIGludCBlbmRQb3NpdGlv
bkluVGV4dEJveFN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNp
c01hcmssIFJlbmRlckNvbWJpbmVUZXh0KiwKICAgICBUZXh0UnVuJiwgRmxvYXRSZWN0JiBib3hS
ZWN0LCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25z
dCBTaGFkb3dEYXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFk
b3csCiAgICAgYm9vbCB0ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgbm9uU2Vs
ZWN0aW9uUGFpbnRTdHlsZSwgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50U3R5bGUpOwpA
QCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNoYWRvd0RhdGEqIG1fc2VsZWN0
aW9uU2hhZG93OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dE9ubHk7CiAgICAgYm9vbCBt
X3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseTsKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7Cisg
ICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBpbnQgbV9zdGFydFBvc2l0aW9uSW5U
ZXh0UnVuOwogICAgIGludCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuOwogICAgIGludCBtX2xlbmd0
aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElu
bGluZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDEzICs0ODYsMTMgQEAgaW5saW5lIHZvaWQgdXBkYXRl
Q291bnRlcklmTmVlZGVkKFJlbmRlcgogICAgIGRvd25jYXN0PFJlbmRlckNvdW50ZXI+KHJlbmRl
clRleHQpLnVwZGF0ZUNvdW50ZXIoKTsKIH0KIAotaW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5X
aWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udCYgZm9udCwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBtZWFz
dXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQog
ewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAg
IHJldHVybiBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVy
LCBmb250LCBzdHlsZS5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpLCBmYWxsYmFja0Zv
bnRzKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4
dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmb250LCBmbG9hdCB4
UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0
ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0
IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlv
dXQgPSAwKQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7
CiAKQEAgLTUwMSw3ICs1MDEsNyBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5k
ZXJUZXh0CiAgICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9tLCBsZW4sIGZvbnQsIHhQb3Ms
ICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7CiAKICAgICBpZiAobGF5b3V0KQotICAg
ICAgICByZXR1cm4gRm9udDo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVuLCAmZmFsbGJhY2tGb250
cyk7CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZTo6d2lkdGgoKmxheW91dCwgZnJvbSwgbGVu
LCAmZmFsbGJhY2tGb250cyk7CiAKICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIGZyb20sIGxlbiwgc3R5bGUpOwogICAgIHJ1
bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSAtIGZyb20pOwpAQCAtNTIx
LDcgKzUyMSw3IEBAIGlubGluZSB2b2lkIGVuc3VyZUNoYXJhY3RlckdldHNMaW5lQm94KEwKICAg
ICBsaW5lTWlkcG9pbnRTdGF0ZS5zdG9wSWdub3JpbmdTcGFjZXMoSW5saW5lSXRlcmF0b3IoMCwg
dGV4dFBhcmFncmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9y
Lm9mZnNldCgpKSk7CiB9CiAKLWlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQq
IHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRp
ZmllciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25zZWN1dGl2
ZUh5cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQgbWluaW11
bVN1ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxvYXQgeFBv
cywgaW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3ImIGxpbmVC
cmVhaywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCitpbmxpbmUgdm9pZCB0
cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2
ZUh5cGhlbmF0ZWRMaW5lcywgaW50IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGlu
dCBtaW5pbXVtUHJlZml4TGltaXQsIGludCBtaW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxh
c3RTcGFjZSwgdW5zaWduZWQgcG9zLCBmbG9hdCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJv
b2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdv
cmRTcGFjaW5nLCBJbmxpbmVJdGVyYXRvciYgbGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwg
Ym9vbCYgaHlwaGVuYXRlZCkKIHsKICAgICAvLyBNYXAgJ2h5cGhlbmF0ZS1saW1pdC17YmVmb3Jl
LGFmdGVyfTogYXV0bzsnIHRvIDIuCiAgICAgdW5zaWduZWQgbWluaW11bVByZWZpeExlbmd0aDsK
QEAgLTYxNSwxMiArNjE1LDEyIEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxl
VGV4dCgKICAgICB9CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUo
KnJlbmRlclRleHQucGFyZW50KCksIG1fbGluZUluZm8pOwotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250
Q2FzY2FkZSgpOwogICAgIGJvb2wgaXNGaXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2goKTsK
ICAgICBib29sIGNhbkh5cGhlbmF0ZSA9IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0byAm
JiBXZWJDb3JlOjpjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOwogCiAgICAgdW5zaWduZWQg
bGFzdFNwYWNlID0gbV9jdXJyZW50Lm9mZnNldCgpOwotICAgIGZsb2F0IHdvcmRTcGFjaW5nID0g
bV9jdXJyZW50U3R5bGUtPmZvbnQoKS53b3JkU3BhY2luZygpOworICAgIGZsb2F0IHdvcmRTcGFj
aW5nID0gbV9jdXJyZW50U3R5bGUtPmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICBm
bG9hdCBsYXN0U3BhY2VXb3JkU3BhY2luZyA9IDA7CiAgICAgZmxvYXQgd29yZFNwYWNpbmdGb3JX
b3JkTWVhc3VyZW1lbnQgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lQnJlYWtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgc3RydWN0IFJlbmRlclRleHRJbmZvIHsKICAgICBSZW5kZXJUZXh0KiBtX3RleHQ7CiAgICAg
T3duUHRyPFRleHRMYXlvdXQ+IG1fbGF5b3V0OwogICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBt
X2xpbmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKKyAgICBjb25zdCBG
b250Q2FzY2FkZSogbV9mb250OwogfTsKIAogY2xhc3MgTGluZUJyZWFrZXIgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5s
aW5lSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGlubGluZSBib29s
IHJlcXVpcmVzTGluZUJveEZvckNvbnRlbnQoY28KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlID0gbGluZVN0eWxlKCpwYXJlbnQsIGxpbmVJbmZvKTsKICAgICAgICAgaWYg
KGZsb3dTdHlsZS5saW5lSGVpZ2h0KCkgIT0gcGFyZW50U3R5bGUubGluZUhlaWdodCgpCiAgICAg
ICAgICAgICB8fCBmbG93U3R5bGUudmVydGljYWxBbGlnbigpICE9IHBhcmVudFN0eWxlLnZlcnRp
Y2FsQWxpZ24oKQotICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZvbnQoKS5mb250TWV0cmlj
cygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dTdHlsZS5mb250KCku
Zm9udE1ldHJpY3MoKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGZsb3dT
dHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgYm9vbCBwYXJzZU1hdGhNTExl
bmd0aChjb25zdCBTdHJpbmcmIHN0cgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKHVuaXQgPT0gImVtIikgewotICAgICAgICBsZW5ndGhWYWx1ZSA9IGZsb2F0VmFsdWUgKiBz
dHlsZS0+Zm9udCgpLnNpemUoKTsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICog
c3R5bGUtPmZvbnRDYXNjYWRlKCkuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgaWYgKHVuaXQgPT0gImV4IikgewpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wgcGFyc2VN
YXRoTUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYKICAgICAgICAgICAgIGxlbmd0aCA9IC03OyAg
ICAgICAgCiAgICAgfQogICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgbGVuZ3RoVmFsdWUgPSBs
ZW5ndGggKiBzdHlsZS0+Zm9udCgpLnNpemUoKSAvIDE4OworICAgICAgICBsZW5ndGhWYWx1ZSA9
IGxlbmd0aCAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkxLDggKzExOTEsOCBA
QCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByCiAgICAgICAgIG1fb3Bl
cmF0b3JGbGFncyA9IGVudHJ5LT5mbGFnczsKIAogICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5n
IHNwYWNlIGlzIHNwZWNpZmllZCBhcyBtdWx0aXBsZSBvZiAxLzE4ZW0uCi0gICAgbV9sZWFkaW5n
U3BhY2UgPSBlbnRyeS0+bHNwYWNlICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0gICAg
bV90cmFpbGluZ1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAv
IDE4OworICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0eWxlKCkuZm9udENh
c2NhZGUoKS5zaXplKCkgLyAxODsKKyAgICBtX3RyYWlsaW5nU3BhY2UgPSBlbnRyeS0+cnNwYWNl
ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OwogfQogCiB2b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQpAQCAtMTIyOSw5ICsxMjI5LDkg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBtX29w
ZXJhdG9yRmxhZ3MgJj0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSB8IE1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6U2VwYXJhdG9yOyAvLyBUaGlzIHJlc2V0cyBhbGwgYnV0IHRoZSBG
ZW5jZSBhbmQgU2VwYXJhdG9yIHByb3BlcnRpZXMuCiAgICAgZWxzZQogICAgICAgICBtX29wZXJh
dG9yRmxhZ3MgPSAwOyAvLyBUaGlzIHJlc2V0cyBhbGwgdGhlIG9wZXJhdG9yIHByb3BlcnRpZXMu
Ci0gICAgbV9sZWFkaW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250KCkuc2l6ZSgpIC8gMTg7IC8v
IFRoaXMgc2V0cyBsZWFkaW5nIHNwYWNlIHRvICJ0aGlja21hdGhzcGFjZSIuCi0gICAgbV90cmFp
bGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMg
dHJhaWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KLSAgICBtX21pblNpemUgPSBzdHls
ZSgpLmZvbnQoKS5zaXplKCk7IC8vIFRoaXMgc2V0cyBtaW5zaXplIHRvICIxZW0iLgorICAgIG1f
bGVhZGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsgLy8g
VGhpcyBzZXRzIGxlYWRpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX3RyYWls
aW5nU3BhY2UgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OyAvLyBUaGlz
IHNldHMgdHJhaWxpbmcgc3BhY2UgdG8gInRoaWNrbWF0aHNwYWNlIi4KKyAgICBtX21pblNpemUg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpOyAvLyBUaGlzIHNldHMgbWluc2l6ZSB0byAi
MWVtIi4KICAgICBtX21heFNpemUgPSBpbnRNYXhGb3JMYXlvdXRVbml0OyAvLyBUaGlzIHNldHMg
bWF4c2l6ZSB0byAiaW5maW5pdHkiLgogCiAgICAgaWYgKG1fdGV4dENvbnRlbnQpIHsKQEAgLTEz
NTUsNyArMTM1NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIK
ICAgICAgICAgUmVuZGVyTWF0aE1MVG9rZW46OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCk7CiAgICAgICAgIGlmIChpc0ludmlzaWJsZU9wZXJhdG9yKCkpIHsKICAgICAgICAgICAgIC8v
IEluIHNvbWUgZm9udHMsIGdseXBocyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyBoYXZlIG5vbnpl
cm8gd2lkdGguIENvbnNlcXVlbnRseSwgd2Ugc3VidHJhY3QgdGhhdCB3aWR0aCBoZXJlIHRvIGF2
b2lkIHdpZGUgZ2Fwcy4KLSAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250
KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsIGZhbHNlKTsKKyAgICAgICAg
ICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNo
YXJhY3RlcihtX3RleHRDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICAgICBmbG9hdCBnbHlwaFdp
ZHRoID0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgICAgICAgICAgQVNTRVJUKGdseXBoV2lk
dGggPD0gbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggLT0gZ2x5cGhXaWR0aDsKQEAgLTEzNjQsNyArMTM2NCw3IEBAIHZv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXIKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSk7CisgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7CiAgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBhZHZhbmNlRm9yR2x5cGgoZGF0
YSk7CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdp
ZHRoIDwgc3RyZXRjaFNpemUoKSkKQEAgLTE1MjEsNyArMTUyMSw3IEBAIGJvb2wgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAg
ICAgYm90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0g
JnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOworICAgIHRvcC5mb250RGF0YSA9ICZz
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAgICAgZXh0ZW5zaW9uLmZv
bnREYXRhID0gdG9wLmZvbnREYXRhOwogICAgIGJvdHRvbS5mb250RGF0YSA9IHRvcC5mb250RGF0
YTsKICAgICBpZiAobWlkZGxlLmdseXBoKQpAQCAtMTUzOCw4ICsxNTM4LDggQEAgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogCiAgICAgQVNTRVJUKG1faXNWZXJ0aWNh
bCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIAotICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwotICAg
IEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIGNv
bnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSB8fCBi
YXNlR2x5cGguZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKICAgICAgICAgcmV0dXJuIGRh
dGE7CiAKQEAgLTE1NzAsOCArMTU3MCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNo
eURhdGEgUmVuZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNoeURhdGEgYXNz
ZW1ibHlEYXRhOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxl
KCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIEdseXBoRGF0YSBi
YXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKICAgICBp
ZiAocHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZw
cmltYXJ5Rm9udERhdGEpIHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CkBA
IC0xNjE4LDEyICsxNjE4LDEyIEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEg
UmVuZGUKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgIC8vIFdlIGNvbnZlcnQg
dGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEu
Ci0gICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgR2x5cGhE
YXRhIGV4dGVuc2lvbiA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJl
dGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOwotICAgICAgICBHbHlwaERhdGEg
Ym90dG9tID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hh
cmFjdGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT50b3BDaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5l
eHRlbnNpb25DaGFyLCBmYWxzZSk7CisgICAgICAgIEdseXBoRGF0YSBib3R0b20gPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5i
b3R0b21DaGFyLCBmYWxzZSk7CiAgICAgICAgIEdseXBoRGF0YSBtaWRkbGU7CiAgICAgICAgIGlm
IChzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhcikKLSAgICAgICAgICAgIG1pZGRsZSA9IHN0
eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlk
ZGxlQ2hhciwgZmFsc2UpOworICAgICAgICAgICAgbWlkZGxlID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwg
ZmFsc2UpOwogICAgICAgICBhc3NlbWJseURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBl
eHRlbnNpb24sIGJvdHRvbSwgbWlkZGxlKTsKICAgICB9CiAKQEAgLTE2ODAsNyArMTY4MCw3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICAgICAgbV9zdHJl
dGNoeURhdGEgPSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKG1fdGV4dENvbnRlbnQpOwog
ICAgIGVsc2UgewogICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFzZSBnbHlw
aCBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgp
LmZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwg
IXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgZmxvYXQgYmFzZVNp
emUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZUZv
ckdseXBoKGJhc2VHbHlwaCk7CiAgICAgICAgIGlmIChzdHJldGNoU2l6ZSgpIDw9IGJhc2VTaXpl
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTgwMiw3ICsxODAyLDcgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbAogCiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwog
ICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0YSwgYWR2YW5jZUZvckdseXBo
KGRhdGEpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCksICpk
YXRhLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisgICAgaW5mby5jb250ZXh0LT5k
cmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwg
MCwgMSwgb3JpZ2luKTsKIAogICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0KQEAgLTE4OTgs
NyArMTg5OCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAg
ICAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91
bmRzRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKICAgICAgICAgTGF5b3V0UG9p
bnQgb3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0Lnko
KSAtIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhz
dHlsZSgpLmZvbnQoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVy
LCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBo
cyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERh
dGEsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xOTgwLDcgKzE5ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWlu
dENoaWxkcmVuCiAKIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3Bh
Y2VFcnJvcigpCiB7Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRh
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogICAgIGlmICghcHJp
bWFyeUZvbnREYXRhLm1hdGhEYXRhKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xOTg5LDcg
KzE5ODksNyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluCiAgICAg
TGF5b3V0VW5pdCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwogCiAgICAgaWYgKG1fc3RyZXRjaHlE
YXRhLm1vZGUoKSA9PSBEcmF3Tm9ybWFsKSB7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5
bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50KCksICFzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0gc3R5
bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0Q29udGVudCgpLCAh
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgICAgICByZXR1cm4gd2lkdGgg
LSBhZHZhbmNlRm9yR2x5cGgoZGF0YSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2Fs
T3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5kZXJNYXRo
TQogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVu
aXQgaGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCiB7
Ci0gICAgaWYgKCFzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7
CisgICAgaWYgKCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERh
dGEoKSkgewogICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRIIGZv
bnQsIHdlIGFsd2F5cyBtYWtlIHRoZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFuIHRo
ZSB0YXJnZXQuCiAgICAgICAgIGRlcHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRvbVBv
aW50TG93ZXI7CiAgICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGlj
YWxPcGVyYXRvcjo6Y29tcHV0CiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNE
aXJ0eSgpKTsKIAotICAgIGlmIChzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRo
RGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTYsNyAr
OTYsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiAKIHZvaWQg
UmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9n
aWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTEx
LDcgKzExMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWludCgKICAg
ICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQ
YWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRh
KCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFp
bnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3Qu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTcgKzE5OSwxNyBA
QCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKIAogICAgIC8vIFdlIHNldCBz
b21lIGNvbnN0YW50cyB0byBkcmF3IHRoZSByYWRpY2FsLCBhcyBkZWZpbmVkIGluIHRoZSBPcGVu
VHlwZSBNQVRIIHRhYmxlcy4KIAotICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUo
KS5mb250KCkuc2l6ZSgpOworICAgIG1fcnVsZVRoaWNrbmVzcyA9IDAuMDVmICogc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnNpemUoKTsKIAogICAgIC8vIEZJWE1FOiBUaGUgcmVjb21tZW5kZWQgZGVm
YXVsdCBmb3IgbV92ZXJ0aWNhbEdhcCBpbiBkaXNwbGF5c3R5bGUgaXMgcnVsZSB0aGlja25lc3Mg
KyAxLzQgeC1oZWlnaHQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg3MzcpLgogICAgIG1fdmVydGljYWxHYXAgPSAxMSAqIG1fcnVsZVRoaWNrbmVzcyAvIDQ7CiAg
ICAgbV9leHRyYUFzY2VuZGVyID0gbV9ydWxlVGhpY2tuZXNzOwotICAgIExheW91dFVuaXQga2Vy
bkJlZm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKLSAgICBMYXlv
dXRVbml0IGtlcm5BZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4
OworICAgIExheW91dFVuaXQga2VybkJlZm9yZURlZ3JlZSA9IDUgKiBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuc2l6ZSgpIC8gMTg7CisgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAg
KiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21S
YWlzZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKGF1dG8qIG1hdGhEYXRh
ID0gc3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGNv
bnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBGSVhNRTogbV92
ZXJ0aWNhbEdhcCBzaG91bGQgdXNlIFJhZGljYWxEaXNwbGF5U3R5bGVWZXJ0aWNhbCBpbiBkaXNw
bGF5IG1vZGUgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3Mzcp
LgogICAgICAgICBtX3ZlcnRpY2FsR2FwID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmlt
YXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CiAgICAg
ICAgIG1fcnVsZVRoaWNrbmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZv
bnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsUnVsZVRoaWNrbmVzcyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRv
a2VuLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDExICs4OCwx
MSBAQCB2b2lkIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIC8vIFRo
aXMgdHJpZXMgdG8gZW11bGF0ZSB0aGUgZGVmYXVsdCBtYXRodmFyaWFudCB2YWx1ZSBvbiA8bWk+
IHVzaW5nIHRoZSBDU1MgZm9udC1zdHlsZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHJldmlzZWQgd2hlbiBtYXRodmFyaWFudCBpcyBpbXBsZW1lbnRlZCAoaHR0
cDovL3drYnVnLzg1NzM1KSBhbmQgd2hlbiBmb250cyB3aXRoIE1hdGhlbWF0aWNhbCBBbHBoYW51
bWVyaWMgU3ltYm9scyBjaGFyYWN0ZXJzIGFyZSBtb3JlIHBvcHVsYXIuCiAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24obmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0aW9u
KCkpOwotICAgICAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IG5ld1N0eWxlLmdldCgp
LmZvbnQoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0
b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwogICAgICAg
ICBpZiAoIW1fY29udGFpbnNFbGVtZW50ICYmIGVsZW1lbnQoKS50ZXh0Q29udGVudCgpLnN0cmlw
V2hpdGVTcGFjZSgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLmxlbmd0aCgpID09IDEgJiYgIXRva2Vu
RWxlbWVudC5oYXNBdHRyaWJ1dGUobWF0aHZhcmlhbnRBdHRyKSkKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKICAgICAgICAgaWYgKG5ld1N0eWxl
LmdldCgpLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAgICAg
bmV3U3R5bGUuZ2V0KCkuZm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgICAgICAgICAg
bmV3U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKICAgICB9
CiAKICAgICB3cmFwcGVyLT5zZXRTdHlsZShXVEY6Om1vdmUobmV3U3R5bGUpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkN1cnNvckxp
c3QuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHlsZS5o
IgogI2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbmRl
clN0eWxlOjppbmhlcml0ZWROb3RFcXVhbChjb25zCiB9CiAKICNpZiBFTkFCTEUoSU9TX1RFWFRf
QVVUT1NJWklORykKLWlubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udCYg
Zm9udCkKK2lubGluZSB1bnNpZ25lZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpCiB7CiAgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gewogICAgICAgICBDYXNlRm9s
ZGluZ0hhc2g6Omhhc2goZm9udC5mb250RGVzY3JpcHRpb24oKS5maXJzdEZhbWlseSgpLmltcGwo
KSksCkBAIC0zMTUsNyArMzE1LDcgQEAgdWludDMyX3QgUmVuZGVyU3R5bGU6Omhhc2hGb3JUZXh0
QXV0b3NpegogICAgIGhhc2ggXj0gcmFyZUluaGVyaXRlZERhdGEtPm5ic3BNb2RlOwogICAgIGhh
c2ggXj0gcmFyZUluaGVyaXRlZERhdGEtPmxpbmVCcmVhazsKICAgICBoYXNoIF49IFdURjo6Rmxv
YXRIYXNoPGZsb2F0Pjo6aGFzaChpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQudmFsdWUo
KSk7Ci0gICAgaGFzaCBePSBjb21wdXRlRm9udEhhc2goaW5oZXJpdGVkLT5mb250KTsKKyAgICBo
YXNoIF49IGNvbXB1dGVGb250SGFzaChpbmhlcml0ZWQtPmZvbnRDYXNjYWRlKTsKICAgICBoYXNo
IF49IGluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZzsKICAgICBoYXNoIF49IGlu
aGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmc7CiAgICAgaGFzaCBePSBpbmhlcml0ZWRf
ZmxhZ3MuX2JveF9kaXJlY3Rpb247CkBAIC0zMzksNyArMzM5LDcgQEAgYm9vbCBSZW5kZXJTdHls
ZTo6ZXF1YWxGb3JUZXh0QXV0b3NpemluZwogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS0+
bGluZUJyZWFrID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+bGluZUJyZWFrCiAgICAgICAg
ICYmIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkgPT0gb3RoZXItPnJhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U2VjdXJpdHkKICAgICAgICAgJiYgaW5oZXJpdGVkLT5zcGVjaWZpZWRMaW5l
SGVpZ2h0ID09IG90aGVyLT5pbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQKLSAgICAgICAg
JiYgaW5oZXJpdGVkLT5mb250LmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRl
ZC0+Zm9udCkKKyAgICAgICAgJiYgaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5lcXVhbEZvclRleHRB
dXRvU2l6aW5nKG90aGVyLT5pbmhlcml0ZWQtPmZvbnRDYXNjYWRlKQogICAgICAgICAmJiBpbmhl
cml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+aG9y
aXpvbnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICAmJiBpbmhlcml0ZWQtPnZlcnRpY2FsX2Jv
cmRlcl9zcGFjaW5nID09IG90aGVyLT5pbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5n
CiAgICAgICAgICYmIGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbiA9PSBvdGhlci0+aW5o
ZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uCkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBSZW5k
ZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoYwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQogICAgICAgICB8fCBpbmhlcml0ZWQtPnNwZWNpZmllZExpbmVIZWlnaHQgIT0gb3Ro
ZXIuaW5oZXJpdGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0CiAjZW5kaWYKLSAgICAgICAgfHwgaW5o
ZXJpdGVkLT5mb250ICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udAorICAgICAgICB8fCBpbmhlcml0
ZWQtPmZvbnRDYXNjYWRlICE9IG90aGVyLmluaGVyaXRlZC0+Zm9udENhc2NhZGUKICAgICAgICAg
fHwgaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRl
ZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICB8fCBpbmhlcml0ZWQtPnZlcnRp
Y2FsX2JvcmRlcl9zcGFjaW5nICE9IG90aGVyLmluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3Nw
YWNpbmcKICAgICAgICAgfHwgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uICE9IG90aGVy
LmluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbgpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBkZXBlbmQgb24gbG9jYWxlLgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIGh5cGhlbk1pbnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAxKSk7
CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVu
U3RyaW5nLCAoJmh5cGhlbiwgMSkpOwotICAgIHJldHVybiBmb250KCkucHJpbWFyeUZvbnREYXRh
KCkuZ2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1pbnVz
U3RyaW5nOworICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdseXBo
Rm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsK
IH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzTWFya1N0
cmluZygpIGNvbnN0CkBAIC0xMzQwLDIwICsxMzQwLDIwIEBAIGNvbnN0IEFuaW1hdGlvbiogUmVu
ZGVyU3R5bGU6OnRyYW5zaXRpb24KICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgRm9udCYgUmVu
ZGVyU3R5bGU6OmZvbnQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQ7IH0KLWNvbnN0
IEZvbnRNZXRyaWNzJiBSZW5kZXJTdHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBp
bmhlcml0ZWQtPmZvbnQuZm9udE1ldHJpY3MoKTsgfQotY29uc3QgRm9udERlc2NyaXB0aW9uJiBS
ZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5m
b250LmZvbnREZXNjcmlwdGlvbigpOyB9Citjb25zdCBGb250Q2FzY2FkZSYgUmVuZGVyU3R5bGU6
OmZvbnRDYXNjYWRlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZTsgfQor
Y29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0IHsgcmV0
dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKTsgfQorY29uc3QgRm9udERl
c2NyaXB0aW9uJiBSZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsgfQogZmxvYXQgUmVuZGVy
U3R5bGU6OnNwZWNpZmllZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9u
KCkuc3BlY2lmaWVkU2l6ZSgpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9Ci1p
bnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250
LnBpeGVsU2l6ZSgpOyB9CitpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5waXhlbFNpemUoKTsgfQogCiBjb25zdCBMZW5ndGgm
IFJlbmRlclN0eWxlOjp3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWRE
YXRhLT53b3JkU3BhY2luZzsgfQotZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcoKSBj
b25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpOyB9CitmbG9hdCBS
ZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9u
dENhc2NhZGUubGV0dGVyU3BhY2luZygpOyB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6OnNldEZvbnRE
ZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIHYpCiB7Ci0gICAgaWYgKGluaGVyaXRl
ZC0+Zm9udC5mb250RGVzY3JpcHRpb24oKSAhPSB2KSB7Ci0gICAgICAgIGluaGVyaXRlZC5hY2Nl
c3MoKS0+Zm9udCA9IEZvbnQodiwgaW5oZXJpdGVkLT5mb250LmxldHRlclNwYWNpbmcoKSwgaW5o
ZXJpdGVkLT5mb250LndvcmRTcGFjaW5nKCkpOworICAgIGlmIChpbmhlcml0ZWQtPmZvbnRDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKKyAgICAgICAgaW5oZXJpdGVkLmFjY2Vzcygp
LT5mb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKHYsIGluaGVyaXRlZC0+Zm9udENhc2NhZGUubGV0
dGVyU3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLndvcmRTcGFjaW5nKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwNCw3ICsx
NDA0LDcgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIAogICAgICAg
ICBmb250V29yZFNwYWNpbmcgPSAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBlcmNlbnQ6
Ci0gICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQoKSAqIGZvbnQoKS5zcGFj
ZVdpZHRoKCkgLyAxMDA7CisgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IHZhbHVlLnBlcmNlbnQo
KSAqIGZvbnRDYXNjYWRlKCkuc3BhY2VXaWR0aCgpIC8gMTAwOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEZpeGVkOgogICAgICAgICBmb250V29yZFNwYWNpbmcgPSB2YWx1ZS52YWx1ZSgpOwpA
QCAtMTQxNywxMSArMTQxNywxMSBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhM
ZW5ndGggCiAgICAgICAgIGZvbnRXb3JkU3BhY2luZyA9IDA7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnQuc2V0V29yZFNwYWNpbmcoZm9udFdvcmRT
cGFjaW5nKTsKKyAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlLnNldFdvcmRTcGFj
aW5nKGZvbnRXb3JkU3BhY2luZyk7CiAgICAgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPndv
cmRTcGFjaW5nID0gV1RGOjptb3ZlKHZhbHVlKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6c2V0
TGV0dGVyU3BhY2luZyhmbG9hdCB2KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRMZXR0
ZXJTcGFjaW5nKHYpOyB9Cit2b2lkIFJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0
IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250Q2FzY2FkZS5zZXRMZXR0ZXJTcGFjaW5nKHYp
OyB9CiAKIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0IHNpemUpCiB7CkBAIC0x
NDM0LDcgKzE0MzQsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShmbG9hdCBzaXpl
CiAgICAgZWxzZQogICAgICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6
ZSwgc2l6ZSk7CiAKLSAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBmb250
KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9y
ID0gZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICBGb250RGVzY3JpcHRpb24gZGVz
Yyhmb250RGVzY3JpcHRpb24oKSk7CiAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwog
ICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9p
ZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogI2VuZGlmCiAKICAgICBzZXRG
b250RGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgZm9udCgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVj
dG9yKTsKKyAgICBmb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKIH0K
IAogdm9pZCBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqIHNo
YWRvdywgTGF5b3V0VW5pdCAmdG9wLCBMYXlvdXRVbml0ICZyaWdodCwgTGF5b3V0VW5pdCAmYm90
dG9tLCBMYXlvdXRVbml0ICZsZWZ0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNyArMTA1LDcgQEAgY2xhc3MgQ29udGVudERhdGE7CiBjbGFzcyBDb3VudGVyQ29udGVudDsK
IGNsYXNzIEN1cnNvckxpc3Q7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xhc3MgRm9udDsK
K2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udE1ldHJpY3M7CiBjbGFzcyBJbnRSZWN0Owog
Y2xhc3MgTWFza0ltYWdlT3BlcmF0aW9uOwpAQCAtNjg5LDcgKzY4OSw3IEBAIHB1YmxpYzoKICAg
ICBFQ2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MuY2xlYXIo
KTsgfQogICAgIEVUYWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG5vbmlu
aGVyaXRlZF9mbGFncy50YWJsZUxheW91dCgpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBGb250JiBmb250KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnRDYXNjYWRlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udE1l
dHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBmbG9hdCBzcGVjaWZp
ZWRGb250U2l6ZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGlubGluZSBTdHlsZUluaGVyaXRlZERhdGE6
OlN0eWxlSW5oZXJpdGUKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAsIHNw
ZWNpZmllZExpbmVIZWlnaHQoby5zcGVjaWZpZWRMaW5lSGVpZ2h0KQogI2VuZGlmCi0gICAgLCBm
b250KG8uZm9udCkKKyAgICAsIGZvbnRDYXNjYWRlKG8uZm9udENhc2NhZGUpCiAgICAgLCBjb2xv
cihvLmNvbG9yKQogICAgICwgdmlzaXRlZExpbmtDb2xvcihvLnZpc2l0ZWRMaW5rQ29sb3IpCiB7
CkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgU3R5bGVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNv
bnMKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgJiYgc3BlY2lmaWVk
TGluZUhlaWdodCA9PSBvLnNwZWNpZmllZExpbmVIZWlnaHQKICNlbmRpZgotICAgICAgICAmJiBm
b250ID09IG8uZm9udAorICAgICAgICAmJiBmb250Q2FzY2FkZSA9PSBvLmZvbnRDYXNjYWRlCiAg
ICAgICAgICYmIGNvbG9yID09IG8uY29sb3IKICAgICAgICAgJiYgdmlzaXRlZExpbmtDb2xvciA9
PSBvLnZpc2l0ZWRMaW5rQ29sb3IKICAgICAgICAgJiYgaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2lu
ZyA9PSBvLmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBTdHlsZUluaGVy
aXRlZERhdGFfaAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Niw3ICs1Niw3
IEBAIHB1YmxpYzoKICAgICBMZW5ndGggc3BlY2lmaWVkTGluZUhlaWdodDsKICNlbmRpZgogCi0g
ICAgRm9udCBmb250OworICAgIEZvbnRDYXNjYWRlIGZvbnRDYXNjYWRlOwogICAgIENvbG9yIGNv
bG9yOwogICAgIENvbG9yIHZpc2l0ZWRMaW5rQ29sb3I7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDEzICsyMjUsMTMgQEAgdm9pZCBSZW5k
ZXJTVkdJbmxpbmVUZXh0Ojp1cGRhdGVTY2FsZWRGbwogICAgIGNvbXB1dGVOZXdTY2FsZWRGb250
Rm9yU3R5bGUoKnRoaXMsIHN0eWxlKCksIG1fc2NhbGluZ0ZhY3RvciwgbV9zY2FsZWRGb250KTsK
IH0KIAotdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0
eWxlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQpCit2b2lkIFJlbmRlclNW
R0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCYgc2NhbGluZ0Zh
Y3RvciwgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQpCiB7CiAgICAgLy8gQWx0ZXIgZm9udC1zaXpl
IHRvIHRoZSByaWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGluZyB0aGUgZ2x5cGhz
IHRoZW1zZWx2ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBpcyBzcGVjaWZpZWQK
ICAgICBzY2FsaW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2NyZWVu
Rm9udFNpemVTY2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciA9
PSAxIHx8ICFzY2FsaW5nRmFjdG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRSZW5k
ZXJpbmdNb2RlKCkgPT0gR2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAgICAgIHNjYWxpbmdGYWN0
b3IgPSAxOwotICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udCgpOworICAgICAgICBzY2Fs
ZWRGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1Nj
YWwKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRoZSBjYXNlIHdoZW4g
d2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQpLgogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3Bl
Y2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
LCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3RvciwgcmVuZGVy
ZXIuZG9jdW1lbnQoKSkpOwogCi0gICAgc2NhbGVkRm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9u
LCAwLCAwKTsKKyAgICBzY2FsZWRGb250ID0gRm9udENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAw
LCAwKTsKICAgICBzY2FsZWRGb250LnVwZGF0ZShyZW5kZXJlci5kb2N1bWVudCgpLmVuc3VyZVN0
eWxlUmVzb2x2ZXIoKS5mb250U2VsZWN0b3IoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBSZW5kZXJTVkdJ
bmxpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCiAKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CkBAIC00MSw5ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyog
bGF5b3V0QXR0cmlidXRlcygpIHsgcmV0dXJuICZtX2xheW91dEF0dHJpYnV0ZXM7IH0KIAogICAg
IGZsb2F0IHNjYWxpbmdGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxpbmdGYWN0b3I7IH0K
LSAgICBjb25zdCBGb250JiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250
OyB9CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlZEZvbnQ7IH0KICAgICB2b2lkIHVwZGF0ZVNjYWxlZEZvbnQoKTsKLSAgICBzdGF0aWMg
dm9pZCBjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFJlbmRlclN0eWxlJiwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnQmIHNjYWxlZEZvbnQp
OworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCYgc2NhbGluZ0ZhY3RvciwgRm9u
dENhc2NhZGUmIHNjYWxlZEZvbnQpOwogCiAgICAgLy8gUHJlc2VydmVzIGZsb2F0aW5nIHBvaW50
IHByZWNpc2lvbiBmb3IgdGhlIHVzZSBpbiBEUlQuIEl0IGtub3dzIGhvdyB0byByb3VuZCBhbmQg
ZG9lcyBhIGJldHRlciBqb2IgdGhhbiBlbmNsb3NpbmdJbnRSZWN0LgogICAgIEZsb2F0UmVjdCBm
bG9hdExpbmVzQm91bmRpbmdCb3goKSBjb25zdDsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBjcmVhdGVUZXh0Qm94
KCkgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX3NjYWxpbmdGYWN0b3I7Ci0gICAgRm9udCBtX3Nj
YWxlZEZvbnQ7CisgICAgRm9udENhc2NhZGUgbV9zY2FsZWRGb250OwogICAgIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzIG1fbGF5b3V0QXR0cmlidXRlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIEZsb2F0UmVjdCBTVkdJbmxp
bmVUZXh0Qm94OjpzZWxlY3Rpb25SZWMKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVy
ZXIoKS5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAg
Y29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOworICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7CiAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250
TWV0cmljcygpOwogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVu
dC55KTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKQpAQCAtMTcyLDcgKzE3Miw3IEBAIExh
eW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKIAogc3RhdGljIGlubGluZSBi
b29sIHRleHRTaG91bGRCZVBhaW50ZWQoY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dFJl
bmRlcmVyKQogewotICAgIC8vIEZvbnQ6OnBpeGVsU2l6ZSgpLCByZXR1cm5zIEZvbnREZXNjcmlw
dGlvbjo6Y29tcHV0ZWRQaXhlbFNpemUoKSwgd2hpY2ggcmV0dXJucyAiaW50KHggKyAwLjUpIi4K
KyAgICAvLyBGb250Q2FzY2FkZTo6cGl4ZWxTaXplKCksIHJldHVybnMgRm9udERlc2NyaXB0aW9u
Ojpjb21wdXRlZFBpeGVsU2l6ZSgpLCB3aGljaCByZXR1cm5zICJpbnQoeCArIDAuNSkiLgogICAg
IC8vIElmIHRoZSBhYnNvbHV0ZSBmb250IHNpemUgb24gc2NyZWVuIGlzIGJlbG93IHg9MC41LCBk
b24ndCByZW5kZXIgYW55dGhpbmcuCiAgICAgcmV0dXJuIHRleHRSZW5kZXJlci5zY2FsZWRGb250
KCkucGl4ZWxTaXplKCk7CiB9CkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVU
ZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAg
ICAgICAgICAgICAgICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0g
VmlzdWFsT3JkZXIgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUt
PmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUtPmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5z
ZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVu
ZGVyZXIoKSkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC00NzUsNyAr
NDc1LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBwb3NpdGlvbk9mZnNldEZvckRlYwogICAgIHJl
dHVybiAwLjBmOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IHRoaWNrbmVzc0ZvckRlY29yYXRp
b24oVGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMgaW5saW5lIGZsb2F0
IHRoaWNrbmVzc0ZvckRlY29yYXRpb24oVGV4dERlY29yYXRpb24sIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250KQogewogICAgIC8vIEZJWE1FOiBGb3IgU1ZHIEZvbnRzIHdlIG5lZWQgdG8gdXNlIHRo
ZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIDxmb250LWZhY2U+IGlmIHNwZWNpZmllZC4KICAg
ICAvLyBDb21wYXRpYmxlIHdpdGggQmF0aWsvT3BlcmEKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lk
IFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgUmVuZGVyU3R5bGUmIGRl
Y29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxvYXQg
c2NhbGluZ0ZhY3RvciA9IDE7Ci0gICAgRm9udCBzY2FsZWRGb250OworICAgIEZvbnRDYXNjYWRl
IHNjYWxlZEZvbnQ7CiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZv
bnRGb3JTdHlsZShkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSwgc2NhbGluZ0Zh
Y3Rvciwgc2NhbGVkRm9udCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkBAIC01NzAs
NyArNTcwLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZAogICAg
IGZsb2F0IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBB
U1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gcmVu
ZGVyZXIoKS5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQg
PSByZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cg
PSBzdHlsZS0+dGV4dFNoYWRvdygpOwogCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdt
ZW50LngsIGZyYWdtZW50LnkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjps
YXlvdXRUZXh0T25MaQogCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KHRleHQtPnRleHQoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlLT5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHls
ZS0+Zm9udENhc2NhZGUoKTsKIAogICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIHNwYWNp
bmdMYXlvdXQoZm9udCk7CiAgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lIGJhc2VsaW5l
TGF5b3V0KGZvbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgiCiAKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUoY29uc3QgRm9udCYgZm9udCkKK1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6U1ZHVGV4
dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIDogbV9m
b250KGZvbnQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJh
c2VsaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CkBAIC0zNSw3
ICszNSw3IEBAIGNsYXNzIFNWR1RleHRNZXRyaWNzOwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUpOwogcHVibGljOgotICAgIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZShjb25z
dCBGb250Jik7CisgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnRDYXNj
YWRlJik7CiAKICAgICBmbG9hdCBjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KGNvbnN0IFNWR1JlbmRl
clN0eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCkgY29uc3Q7CiAgICAgZmxvYXQgY2Fs
Y3VsYXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3Q7CkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVUb0Fs
aWdubWVudEJhc2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCog
dGV4dFJlbmRlcmVyKSBjb25zdDsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25z
dCBGb250Q2FzY2FkZSYgbV9mb250OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgogCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nKGNvbnN0IEZvbnQmIGZvbnQpCitTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAg
OiBtX2ZvbnQoZm9udCkKICAgICAsIG1fbGFzdENoYXJhY3RlcigwKQogewpAQCAtOTgsNyArOTgs
NyBAQCBmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsCiAKICAgICBmbG9h
dCBzcGFjaW5nID0gbV9mb250LmxldHRlclNwYWNpbmcoKSArIGtlcm5pbmc7CiAgICAgaWYgKGN1
cnJlbnRDaGFyYWN0ZXIgJiYgbGFzdENoYXJhY3RlciAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkg
ewotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSAmJiAh
Rm9udDo6dHJlYXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKEZvbnRDYXNj
YWRlOjp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYmICFGb250Q2FzY2FkZTo6dHJl
YXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKICAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9mb250
LndvcmRTcGFjaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBT
VkdSZW5kZXJTdHlsZTsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKQEAgLTMyLDEzICszMiwxMyBAQCBj
bGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKTsKIHB1Ymxp
YzoKLSAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Jik7CisgICAgU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udENhc2NhZGUmKTsKIAogICAgIGZsb2F0
IGNhbGN1bGF0ZVNWR0tlcm5pbmcoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHVGV4dE1l
dHJpY3M6OkdseXBoJiBjdXJyZW50R2x5cGgpOwogICAgIGZsb2F0IGNhbGN1bGF0ZUNTU0tlcm5p
bmdBbmRTcGFjaW5nKGNvbnN0IFNWR1JlbmRlclN0eWxlKiwgU1ZHRWxlbWVudCogbGVuZ3RoQ29u
dGV4dCwgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiBwcml2YXRlOgotICAgIGNv
bnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGNv
bnN0IFVDaGFyKiBtX2xhc3RDaGFyYWN0ZXI7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFNWR1RleHRNZXRy
aWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkcKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0g
dGV4dFJlbmRlcmVyLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7
CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVyLnNjYWxlZEZvbnQo
KTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9udCA9IHRleHRSZW5kZXJlci5zY2Fs
ZWRGb250KCk7CiAgICAgaW50IGxlbmd0aCA9IDA7CiAKICAgICAvLyBDYWxjdWxhdGUgd2lkdGgv
aGVpZ2h0IHVzaW5nIHRoZSBzY2FsZWQgZm9udCwgZGl2aWRlIHRoaXMgcmVzdWx0IGJ5IHRoZSBz
Y2FsaW5nRmFjdG9yIGFmdGVyd2FyZHMuCkBAIC03MCw3ICs3MCw3IEBAIFRleHRSdW4gU1ZHVGV4
dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAgICAgICAgICAsIHN0eWxlLmRpcmVj
dGlvbigpCiAgICAgICAgICAgICAgICAgLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkp
IC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0Nv
bnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICBy
dW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkxLDcgKzkxLDcgQEAgU1ZHVGV4dE1ldHJp
Y3MgU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1l
dHJpY3MoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lKQogewotICAg
IGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEo
KS5pc1NWR0ZvbnQoKTsKKyAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOwogICAgIGZsb2F0IHNjYWxp
bmdGYWN0b3IgPSB0ZXh0LnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rv
cik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NC
dWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDkgKzEwMCw5IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjppbml0aWFs
aXplTWUKICAgICBtX2NvbXBsZXhTdGFydFRvQ3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmlj
cygpOwogICAgIG1fdG90YWxXaWR0aCA9IDA7CiAKLSAgICBjb25zdCBGb250JiBzY2FsZWRGb250
ID0gdGV4dC5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIHNjYWxlZEZvbnQg
PSB0ZXh0LnNjYWxlZEZvbnQoKTsKICAgICBtX3J1biA9IFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1
Y3RUZXh0UnVuKHRleHQpOwotICAgIG1faXNDb21wbGV4VGV4dCA9IHNjYWxlZEZvbnQuY29kZVBh
dGgobV9ydW4pID09IEZvbnQ6OkNvbXBsZXg7CisgICAgbV9pc0NvbXBsZXhUZXh0ID0gc2NhbGVk
Rm9udC5jb2RlUGF0aChtX3J1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7CiAKICAgICBpZiAo
bV9pc0NvbXBsZXhUZXh0KQogICAgICAgICBtX3NpbXBsZVdpZHRoSXRlcmF0b3IgPSBudWxscHRy
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9u
dERhdGEqIHN2Z0ZvbnQKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKLWZsb2F0IFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3QKK2Zsb2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFdp
ZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAgICAg
V2lkdGhJdGVyYXRvciBpdCgmZm9udCwgcnVuKTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZl
cjsKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpk
cmF3U1ZHCiAgICAgfQogfQogCi1zdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZvbnQo
Y29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJp
bWFyeUZvbnREYXRhID0gZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAoIXByaW1hcnlG
b250RGF0YS5pc1NWR0ZvbnQoKSkKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgR2x5cGhEYXRh
IG1pc3NpbmdHbHlwaEZvckZvbnQoY29uCiAgICAgcmV0dXJuIEdseXBoRGF0YShmb250RWxlbWVu
dC0+bWlzc2luZ0dseXBoKCksICZwcmltYXJ5Rm9udERhdGEpOwogfQogCi1HbHlwaERhdGEgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250
JiBmb250LCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wg
bWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0
cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKQorR2x5cGhEYXRhIFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3Ry
aW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCiB7CiAgICAgR2x5cGhEYXRhIGdseXBo
RGF0YSA9IGZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRv
VmFyaWFudCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCkBAIC0zNDIsNyArMzQyLDcgQEAg
R2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogICAgIC8vIFRoZSBiZWhh
dmlvciBkb2VzIG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZC4gRm9yIHNpbXBsaWNpdHkgd2UgZG9u
J3QgdHJ5IHRvIHJlc29sdmUgZm9udCBmYWxsYmFja3MgY29udGV4dC1zZW5zaXRpdmVseS4KICAg
ICBGb250RGVzY3JpcHRpb24gZmFsbGJhY2tEZXNjcmlwdGlvbiA9IGZvbnQuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgZmFsbGJhY2tEZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhWZWN0b3I8QXRvbWlj
U3RyaW5nPiB7IHNhbnNTZXJpZkZhbWlseSB9KTsKLSAgICBGb250IGZhbGxiYWNrRm9udChmYWxs
YmFja0Rlc2NyaXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygp
KTsKKyAgICBGb250Q2FzY2FkZSBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlvbiwgZm9u
dC5sZXR0ZXJTcGFjaW5nKCksIGZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgZmFsbGJhY2tGb250
LnVwZGF0ZShmb250LmZvbnRTZWxlY3RvcigpKTsKIAogICAgIHJldHVybiBmYWxsYmFja0ZvbnQu
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yLCBBdXRvVmFyaWFudCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHRf
aAogI2RlZmluZSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dF9oCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDkgKzQyLDkgQEAgcHVibGljOgogICAgIFJlbmRlclNW
R1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmVQYWludGluZ1Jlc291cmNlOyB9CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNl
KFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0g
b2JqZWN0OyB9CiAKLSAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y29uc3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJy
b3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5n
JiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRl
cmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFj
dGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3Ry
aW5nQ2FjaGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBU
ZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBn
bHlwaE5hbWUpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5p
bmcoY29uc3QgU2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBp
bnQgZnJvbSkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveFN0eWxlLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5o
IgogCkBAIC04OSw3ICs4OSw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNv
cmF0aW8KICAgICBmbG9hdCB3YXZ5T2Zmc2V0OwogICAgICAgICAKICAgICBUZXh0RGVjb3JhdGlv
blN0eWxlIGRlY29yYXRpb25TdHlsZSA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlKCk7
Ci0gICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5mb250TWV0cmljcygpLmZsb2F0
SGVpZ2h0KCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZm9u
dE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOwogICAgIEdseXBoT3ZlcmZsb3cgb3ZlcmZsb3dSZXN1
bHQ7CiAgICAgCiAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxl
V2F2eSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIElubGluZVRl
eHRCb3hTdHlsZV9oCiAjZGVmaW5lIElubGluZVRleHRCb3hTdHlsZV9oCiAKLSNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNiw3ICsxMTYsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVu
dChjb25zCiAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKIAogICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gZG9jdW1l
bnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCkgPyBkb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlz
dHMoKS0+Zm9udFNlbGVjdG9yKCkgOiBudWxscHRyOwotICAgIGRvY3VtZW50U3R5bGUuZ2V0KCku
Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9u
dENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKIAogICAgIHJldHVybiBkb2N1bWVudFN0
eWxlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRy
ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCByZXNvbHZlVHJl
ZShEb2N1bWVudCYgZG9jdW1lbnQsIENoYQogICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdz
ID0gZG9jdW1lbnQuc2V0dGluZ3MoKSkgewogICAgICAgICAgICAgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwogICAgICAgICAg
ICAgaWYgKHNldHRpbmdzLT5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSAmJiBzdHls
ZVJlc29sdmVyKQotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udCgpLnVw
ZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgZG9j
dW1lbnRTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250
U2VsZWN0b3IoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3VtZW50
Q2hhbmdlID0gZGV0ZXJtaW5lQ2hhbmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJl
bmRlclZpZXcoKS0+c3R5bGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4MCw5ICsyODAsOSBAQCB2b2lkIGNvbXB1dGVOb3JtYWxpemVk
U3BhY2VzKGNvbnN0IFRleHRSCiAgICAgaWYgKG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZS5s
ZW5ndGgoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAocnVuLmlzOEJpdCgpKQotICAgICAgICBub3JtYWxp
emVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3Rl
cnM4KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3BhY2Vz
U3RyaW5nQ2FjaGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJz
OCgpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICBlbHNlCi0gICAgICAgIG5vcm1hbGl6
ZWRTcGFjZXNTdHJpbmdDYWNoZSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVy
czE2KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOworICAgICAgICBub3JtYWxpemVkU3BhY2Vz
U3RyaW5nQ2FjaGUgPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJz
MTYoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CiAgICAgaWYgKG1pcnJvcikKICAgICAgICAg
bm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gY3JlYXRlU3RyaW5nV2l0aE1pcnJvcmVkQ2hh
cmFjdGVycyhub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5o
IgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlNWR0dseXBoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hLZXJuRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5j
bHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZVNyY0VsZW1lbnQu
aCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250
Q2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgpAQCAtNDYzLDEyICs0NjMsMTIgQEAgdm9pZCBXZWJQ
cm9jZXNzOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldEFs
d2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxleFRleHQpCiB7
Ci0gICAgV2ViQ29yZTo6Rm9udDo6c2V0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQgPyBX
ZWJDb3JlOjpGb250OjpDb21wbGV4IDogV2ViQ29yZTo6Rm9udDo6QXV0byk7CisgICAgV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OnNldENvZGVQYXRoKGFsd2F5c1VzZUNvbXBsZXhUZXh0ID8gV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OkNvbXBsZXggOiBXZWJDb3JlOjpGb250Q2FzY2FkZTo6QXV0byk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzczo6c2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVzZUZv
bnRTbW9vdGhpbmcpCiB7Ci0gICAgV2ViQ29yZTo6Rm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5n
KHVzZUZvbnRTbW9vdGhpbmcpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcodXNlRm9udFNtb290aGluZyk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6dXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdl
cykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDcgKzgwMiw3IEBAIEVk
aXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKICAgICBpZiAoIXNlbGVjdGlv
bi5pc05vbmUoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIGlmIChS
ZW5kZXJTdHlsZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1l
LCBub2RlVG9SZW1vdmUpKSB7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgICAgICAgICBDVEZvbnRS
ZWYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9u
dCgpOwogICAgICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gZm9udCA/IENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQVhP
YmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmlu
Z3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgogICAgIG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2
ZXJQb3J0ID0gV1RGOjptb3ZlKHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQp
OwogICAgIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBwYXJhbWV0ZXJzLnByZXNlbnRlckFw
cGxpY2F0aW9uUGlkOwogICAgIG1fc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uID0g
cGFyYW1ldGVycy5zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb247Ci0gICAgRm9udDo6
c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFibGVLZXJu
aW5nQW5kTGlnYXR1cmVzQnlEZWZhdWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOworICAg
IEZvbnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNo
b3VsZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1
cmVzIDogMCk7CiAKICAgICBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OlJlbGllZkxvZ2dlcjo6c2V0
TG9nZ2luZ0VuYWJsZWQocGFyYW1ldGVycy5zaG91bGRFbmFibGVNZW1vcnlQcmVzc3VyZVJlbGll
ZkxvZ2dpbmcpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5n
RXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNT
dHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAKICNpbXBvcnQgPFdlYkNvcmUv
Q29yZUdyYXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5T
U3RyaW5nRXh0cmFzLmg+CkBAIC05Miw3ICs5Miw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQb2lu
dDooTlNQb2ludClwb2ludCAKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAgICAgICAgQ0dD
b250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAKLSAgICAgICAgRm9udCB3ZWJDb3Jl
Rm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4
dCBpc0RyYXdpbmdUb1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3Ro
aW5nIDogQW50aWFsaWFzZWQpOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250
UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdp
bmdUb1NjcmVlbl0sIGZvbnRTbW9vdGhpbmdJc0FsbG93ZWQgPyBBdXRvU21vb3RoaW5nIDogQW50
aWFsaWFzZWQpOwogICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwog
ICAgICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBA
IC0gKGZsb2F0KV93ZWJfd2lkdGhXaXRoRm9udDooTlNGb250ICopZm8KICAgICBbc2VsZiBnZXRD
aGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihi
dWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBs
YXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgICAgIEZvbnRDYXNjYWRl
IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwog
ICAgICAgICBUZXh0UnVuIHJ1bihidWZmZXIuZGF0YSgpLCBsZW5ndGgpOwogICAgICAgICBydW4u
ZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICAgICAgcmV0dXJuIHdlYkNvcmVGb250LndpZHRo
KHJ1bik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRv
ci5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTdHJp
bmdUcnVuY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDIxICsyOSwyMSBAQAogI2ltcG9y
dCAiV2ViU3RyaW5nVHJ1bmNhdG9yLmgiCiAKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5o
IgotI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRQbGF0Zm9ybURhdGEuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU3RyaW5nVHJ1bmNhdG9yLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KIAotc3RhdGljIFdlYkNvcmU6OkZvbnQmIGZvbnRGcm9tTlNGb250KE5TRm9udCAq
Zm9udCkKK3N0YXRpYyBXZWJDb3JlOjpGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQoTlNGb250
ICpmb250KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNGb250Pj4g
Y3VycmVudE5TRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29yZTo6Rm9udD4g
Y3VycmVudEZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OkZvbnRDYXNj
YWRlPiBjdXJyZW50Rm9udDsKICAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50TlNGb250Lmdl
dCgpLmdldCgpXSkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRGb250OwogICAgIGN1cnJlbnROU0Zv
bnQuZ2V0KCkgPSBmb250OwotICAgIGN1cnJlbnRGb250LmdldCgpID0gV2ViQ29yZTo6Rm9udChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICBj
dXJyZW50Rm9udC5nZXQoKSA9IFdlYkNvcmU6OkZvbnRDYXNjYWRlKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50Rm9u
dDsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1Bv
cHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3
IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAKICAgICAgICAgUG9wdXBNZW51U3R5
bGUgc3R5bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udCgpKSB7
CisgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewogICAgICAgICAg
ICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9u
dCgpOwogICAgICAgICAgICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBz
aXplID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTQ5MCw3ICsxNDkwLDcgQEAgLSAoQk9PTClfdmlld0NsYXNzOihDbGFzcyAqKXZDbGFz
cyBhbmRSZQogCiArICh2b2lkKV9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDooQk9P
TClmCiB7Ci0gICAgRm9udDo6c2V0Q29kZVBhdGgoZiA/IEZvbnQ6OkNvbXBsZXggOiBGb250OjpB
dXRvKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgoZiA/IEZvbnRDYXNjYWRlOjpDb21w
bGV4IDogRm9udENhc2NhZGU6OkF1dG8pOwogfQogCiArICh2b2lkKV9zZXRBbGxvd3NSb3VuZGlu
Z0hhY2tzOihCT09MKWFsbG93c1JvdW5kaW5nSGFja3MKQEAgLTMxNjgsMTIgKzMxNjgsMTIgQEAg
LSAoQk9PTClfZGFzaGJvYXJkQmVoYXZpb3I6KFdlYkRhc2hib2FyZAogCiArICh2b2lkKV9zZXRT
aG91bGRVc2VGb250U21vb3RoaW5nOihCT09MKWYKIHsKLSAgICBGb250OjpzZXRTaG91bGRVc2VT
bW9vdGhpbmcoZik7CisgICAgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhmKTsK
IH0KIAogKyAoQk9PTClfc2hvdWxkVXNlRm9udFNtb290aGluZwogewotICAgIHJldHVybiBGb250
OjpzaG91bGRVc2VTbW9vdGhpbmcoKTsKKyAgICByZXR1cm4gRm9udENhc2NhZGU6OnNob3VsZFVz
ZVNtb290aGluZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTQ3MTAsNyArNDcxMCw3
IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBbZGVm
YXVsdHMgYm9vbEZvcktleTpXZWJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXTsKICNlbmRpZgogCi0g
ICAgRm9udDo6c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoW2RlZmF1bHRzIGJvb2xGb3JL
ZXk6V2ViS2l0S2VybmluZ0FuZExpZ2F0dXJlc0VuYWJsZWRCeURlZmF1bHREZWZhdWx0c0tleV0g
PyBLZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7CisgICAgRm9udENhc2NhZGU6OnNldERlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRM
aWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0dXJl
cyA6IDApOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBhdXRvbWF0aWNRdW90ZVN1YnN0aXR1
dGlvbkVuYWJsZWQgPSBbc2VsZiBfc2hvdWxkQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25CZUVu
YWJsZWRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244690</attachid>
            <date>2015-01-15 06:03:11 -0800</date>
            <delta_ts>2015-01-15 06:03:11 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-rename-11.patch</filename>
            <type>text/plain</type>
            <size>424290</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udCB0byBGb250
Q2FzY2FkZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwNDQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2Ug
Y2FuIHRoZW4gcmVuYW1lIFNpbXBsZUZvbnREYXRhIHRvIEZvbnQuIFRoaXMgd2lsbCBtYXRjaCB0
aGUgdXN1YWwgZGVmaW5pdGlvbiBvZiBhICJmb250Ii4KKwogMjAxNS0wMS0xNSAgTWlobmVhIE92
aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gQXNzZXJ0
IGZhaWx1cmUgaW4gUmVuZGVyQmxvY2s6OmxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sg
d2hlbiBzaG93aW5nIHRoZSByZW5kZXIgdHJlZSBkZWJ1ZyBpbmZvCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksOCArMjA0OSw4IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVh
dHVyZVNldHRpbmdzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDEzIEBAIF9fWk43V2ViQ29yZTExQ2FjaGVkSW1hZ2UxNmltYWdlRm9yUmVuZGUK
IF9fWk43V2ViQ29yZTExRmlsZUNob29zZXIxMGNob29zZUZpbGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTFjaG9vc2VGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFf
NlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxMUZpbGVD
aG9vc2VyRDFFdgorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZTExc2V0Q29kZVBhdGhFTlMwXzhD
b2RlUGF0aEUKK19fWk43V2ViQ29yZTExRm9udENhc2NhZGUxOHNob3VsZFVzZVNtb290aGluZ0V2
CitfX1pON1dlYkNvcmUxMUZvbnRDYXNjYWRlMjFzZXRTaG91bGRVc2VTbW9vdGhpbmdFYgorX19a
TjdXZWJDb3JlMTFGb250Q2FzY2FkZTI5c2V0RGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXNFagor
X19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRVJLTlNfMTZGb250UGxhdGZvcm1EYXRhRWJOU18x
N0ZvbnRTbW9vdGhpbmdNb2RlRQorX19aTjdXZWJDb3JlMTFGb250Q2FzY2FkZUMxRXYKK19fWk43
V2ViQ29yZTExRm9udENhc2NhZGVhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEx
bG9hZEFyY2hpdmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfN0FyY2hpdmVFRUUKIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxMXNob3VsZENsb3NlRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIx
MXVybFNlbGVjdGVkRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0VOUzRfMTBQYXNzUmVmUHRySU5T
XzVFdmVudEVFRU5TXzExTG9ja0hpc3RvcnlFTlNfMTlMb2NrQmFja0ZvcndhcmRMaXN0RU5TXzE4
U2hvdWxkU2VuZFJlZmVycmVyRQpAQCAtNjU2LDkgKzY2Myw5IEBAIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50QzFFUk5TXzE0U1EKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFF
dgogX19aTjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxN2FsaWduQ2VudGVyQWx3YXlzRQogX19a
TjdXZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZGdlSWZOZWVkZWRFCi1fX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktO
U180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFCi1fX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
TlMwXzI0RW5hYmxlUm91bmRpbmdIYWNrc09yTm90RQotX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3RFCitfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0
ZUVSS04zV1RGNlN0cmluZ0VmUktOU18xMUZvbnRDYXNjYWRlRU5TMF8yNEVuYWJsZVJvdW5kaW5n
SGFja3NPck5vdEUKK19fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTFGb250Q2FzY2FkZUVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RF
CiBfX1pON1dlYkNvcmUxNVVzZXJJbnB1dEJyaWRnZTExbG9hZFJlcXVlc3RFUktOU18xNkZyYW1l
TG9hZFJlcXVlc3RFTlNfMTFJbnB1dFNvdXJjZUUKIF9fWk43V2ViQ29yZTE1VXNlcklucHV0QnJp
ZGdlMTFyZWxvYWRGcmFtZUVQTlNfNUZyYW1lRWJOU18xMUlucHV0U291cmNlRQogX19aTjdXZWJD
b3JlMTVVc2VySW5wdXRCcmlkZ2UxMnRyeUNsb3NlUGFnZUVOU18xMUlucHV0U291cmNlRQpAQCAt
MTEyNywxMyArMTEzNCw2IEBAIF9fWk43V2ViQ29yZTQwZGVmYXVsdFRleHRFbmNvZGluZ05hbWVG
b3IKIF9fWk43V2ViQ29yZTQwcmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6
ZUVSTlNfMThWaWV3cG9ydEF0dHJpYnV0ZXNFTlNfN0ludFNpemVFZgogX19aTjdXZWJDb3JlNDJV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnRFUDVOU1VSTDE4Q0ZVUkxD
b21wb25lbnRUeXBlCiBfX1pON1dlYkNvcmU0N2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0
dGFjaG1lbnRDaGFyYWN0ZXJzRVAxOE5TQXR0cmlidXRlZFN0cmluZwotX19aTjdXZWJDb3JlNEZv
bnQxMXNldENvZGVQYXRoRU5TMF84Q29kZVBhdGhFCi1fX1pON1dlYkNvcmU0Rm9udDE4c2hvdWxk
VXNlU21vb3RoaW5nRXYKLV9fWk43V2ViQ29yZTRGb250MjFzZXRTaG91bGRVc2VTbW9vdGhpbmdF
YgotX19aTjdXZWJDb3JlNEZvbnQyOXNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzRWoKLV9f
Wk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFYk5TXzE3Rm9udFNtb290
aGluZ01vZGVFCi1fX1pON1dlYkNvcmU0Rm9udEMxRXYKLV9fWk43V2ViQ29yZTRGb250YVNFUktT
MF8KIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dURjZWZWN0b3JJ
TlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlNElj
b25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTYxOCw2ICsxNjE4
LDkgQEAgX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczNlbmRFalJpCiBfX1pOSzdXZWJDb3JlMTBU
aW1lUmFuZ2VzNGNvcHlFdgogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczVzdGFydEVqUmkKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM2bGVuZ3RoRXYKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlNXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU18xNFNpbXBsZUZvbnRE
YXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBo
T3ZlcmZsb3dFCitfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbkUKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8K
IF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTRjYW5jZWxsZWRFcnJvckVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKQEAgLTE2NTQsMTAgKzE2
NTcsMTAgQEAgX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNv
cmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgorX19aTks3V2ViQ29yZTExUmVu
ZGVyU3R5bGUxMWZvbnRDYXNjYWRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250
TWV0cmljc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTE1Zm9udERlc2NyaXB0aW9uRXYK
IF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMjF2aXNpdGVkRGVwZW5kZW50Q29sb3JFaQotX19a
Tks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxp
bmUxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNs
b3NpbmdMYXllckV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0
ZUVSS05TXzEwRmxvYXRQb2ludEVqCkBAIC0xOTQ1LDkgKzE5NDgsNiBAQCBfX1pOSzdXZWJDb3Jl
M1VSTDR1c2VyRXYKIF9fWk5LN1dlYkNvcmUzVVJMNXF1ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJM
OHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQNU5TVVJMRXYKLV9fWk5LN1dlYkNvcmU0
Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250
RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlw
aE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpTlMwXzI0Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uRQotX19aTks3V2ViQ29yZTRGb250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0
Tm9kZTEwc2hhZG93SG9zdEV2CiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRleHRDb250ZW50RWIKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CkBAIC0yNjUwLDE4ICsyNjUwLDEyIEBA
IF9fWk43V2ViQ29yZTE1RGF0YWJhc2VUcmFja2VyMjhyZW1vdmVEZWwKIF9fWk43V2ViQ29yZTE1
RGF0YWJhc2VUcmFja2VyMzhlbXB0eURhdGFiYXNlRmlsZXNSZW1vdmFsVGFza0RpZEZpbmlzaEV2
CiBfX1pON1dlYkNvcmUxNURhdGFiYXNlVHJhY2tlcjQ0ZW1wdHlEYXRhYmFzZUZpbGVzUmVtb3Zh
bFRhc2tXaWxsQmVTY2hlZHVsZWRFdgogX19aTjdXZWJDb3JlMTVEYXRhYmFzZVRyYWNrZXI3dHJh
Y2tlckV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNf
NEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVOUzFfMjRDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb25FUE5TXzEwQmlkaVN0YXR1c0VpCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyMnNldEVtb2ppRHJhd2luZ0VuYWJsZWRFYgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM3NldElzQWNjZWxlcmF0ZWRDb250ZXh0RWIKIF9fWk43V2ViQ29y
ZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CiBfX1pON1dlYkNvcmUxNUxlZ2Fj
eVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3Q0MXVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzRVJLUzBf
Ci1fX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEybGVmdFRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0Vm
UktOU180Rm9udEVOUzBfMjRFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3RFUmZiZgotX19aTjdXZWJD
b3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCi1fX1pON1dlYkNvcmUx
NVN0cmluZ1RydW5jYXRvcjE1cmlnaHRDbGlwVG9Xb3JkRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmYgotX19aTjdXZWJDb3JlMTVT
dHJpbmdUcnVuY2F0b3IyMHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyRVJLTjNXVEY2U3RyaW5nRWZSS05T
XzRGb250RU5TMF8yNEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdEVSZmJmCiBfX1pON1dlYkNvcmUx
NWlzRW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTVz
dGFydE9mRG9jdW1lbnRFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE1c3RhcnRPZkRvY3VtZW50
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCkBAIC0yNzQ1LDcgKzI3MzksNiBAQCBfX1pON1dlYkNv
cmUzM2FwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPCiBfX1pON1dlYkNvcmUzNWlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUzNXBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU0MWluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwRXYK
LV9fWk43V2ViQ29yZTRGb250QzFFUktOU18xNkZvbnRQbGF0Zm9ybURhdGFFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTJGb250U2VsZWN0b3JFRUUKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29u
Rm9ySW1hZ2VFUDdDR0ltYWdlCiBfX1pON1dlYkNvcmU0Tm9kZTE3aXNDb250ZW50RWRpdGFibGVF
TlMwXzIyVXNlclNlbGVjdEFsbFRyZWF0bWVudEUKIF9fWk43V2ViQ29yZTROb2RlMjNjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbkVQUzBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
NzgsOCArNzk3OCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CkBAIC0xOTQ2Nyw4ICsx
OTQ2Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
bG9hdFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGbG9hdFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZUhhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdlbmVy
aWNGYW1pbGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRm9udEdseXBocy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00NzA0LDggKzQ3MDQsOCBAQAogCQlCMkMzREE0OTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
QzNEQTRBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTFBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0U3RyZWFtLmNwcCAqLzsgfTsKIAkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTFCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OwotCQlCMkMz
REE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkMzREE2
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9
OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07CkBAIC0xMjA4MSw4
ICsxMjA4MSw4IEBACiAJCUIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMUEwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkMzREExQjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1MzBEMDA2Q0Q2
MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNDE0LDYgKzIwNDE0LDggQEAKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlC
MkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1
NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJ
CTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICov
LAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKQEAgLTIw
NDM5LDggKzIwNDQxLDYgQEAKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplLmNwcCAqLywKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmgg
Ki8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLywK
LQkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCi0JCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLApAQCAtMjQzMTIsNyArMjQzMTIsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4
Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODE1LDcgKzI3ODE1LDcgQEAKIAkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzI3REZENTE0
MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZv
bnQoKS5maXJzdEZhbWlseSgpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5m
b250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQo
OCkgPT0gIi13ZWJraXQtIikKICAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFt
ZS5zdWJzdHJpbmcoOCk7CiAKICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1F
KSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpbnQgZm9udFdlaWdodCA9
IC0xOwotICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIHN3aXRjaCAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6
CiAgICAgICAgIGZvbnRXZWlnaHQgPSAxMDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKIAogICAgIHJl
c3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfVU5ERVJMSU5FKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
ICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpID8gInNpbmdsZSIgOiAibm9uZSIpOwogCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAi
aXRhbGljIiA6ICJub3JtYWwiKTsKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwg
c3R5bGUtPmZvbnRDYXNjYWRlKCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3JtYWwiKTsKIAog
ICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmli
dXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERl
Y29yYXRpb24oKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpID8gInRydWUiIDogImZhbHNl
Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgogI2ltcG9ydCAiQ2hyb21l
LmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgpAQCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8K
LSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAgICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3Ig
PSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4
dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1w
b3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgi
CiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRN
TEFuY2hvckVsZW1lbnQuaCIKQEAgLTg0OCw3ICs4NDgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCBy
YW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNz
aWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNvbG9y
cwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRyYWdJbWFnZS5oIgotI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAi
SFRNTE5hbWVzLmgiCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBh
dXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CiB9CiAj
ZWxzZQogLSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVm
KV9mb250CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
cmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCiAjaW1wb3J0ICJGbG9hdFBvaW50Lmgi
Ci0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKQEAgLTcxLDcgKzcxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiB1c2luZyBXZWJDb3JlOjpGbG9hdFBvaW50OwotdXNpbmcgV2ViQ29yZTo6Rm9udDsKK3VzaW5n
IFdlYkNvcmU6OkZvbnRDYXNjYWRlOwogdXNpbmcgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Owog
dXNpbmcgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTA0LDggKzE1MDQsOCBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChD
CiBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNl
cGFyYXRlZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+Zm9udCgpLmZh
bWlseUNvdW50KCk7ICsraSkKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQodmFsdWVGb3JGYW1p
bHkoc3R5bGUtPmZvbnQoKS5mYW1pbHlBdChpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+Zm9udENhc2NhZGUoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWls
eUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKQEAgLTI1NDUsNyArMjU0NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWMKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdvcmRCcmVhazoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29y
ZFNwYWNpbmc6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHls
ZS0+Zm9udCgpLndvcmRTcGFjaW5nKCksIHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5n
KCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgogICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1dyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBh
aXIuaCIKICNpbmNsdWRlICJSR0JDb2xvci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVy
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZjxMb2FkRm9udENhbGxiYWNrPihuZXcgTG9hZEZvbnRDYWxsYmFjayhu
dW1Mb2FkaW5nLCBmb250TG9hZGVyLCBsb2FkQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNrPiBjcmVhdGVGcm9t
UGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYgZm9udExvYWRlciwg
Y29uc3QgRm9udCYgZm9udCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkRm9udENhbGxiYWNr
PiBjcmVhdGVGcm9tUGFyYW1zKGNvbnN0IERpY3Rpb25hcnkmIHBhcmFtcywgRm9udExvYWRlciYg
Zm9udExvYWRlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBvbnN1Y2Nlc3M7CiAgICAgICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+
IG9uZXJyb3I7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBGb250TG9hZGVyOjpsb2FkRm9udChj
b25zdCBEaWN0aW9uYQogICAgIFN0cmluZyBmb250U3RyaW5nOwogICAgIGlmICghcGFyYW1zLmdl
dCgiZm9udCIsIGZvbnRTdHJpbmcpKQogICAgICAgICByZXR1cm47Ci0gICAgRm9udCBmb250Owor
ICAgIEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgaWYgKCFyZXNvbHZlRm9udFN0eWxlKGZvbnRTdHJp
bmcsIGZvbnQpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPExvYWRGb250Q2FsbGJhY2s+
IGNhbGxiYWNrID0gTG9hZEZvbnRDYWxsYmFjazo6Y3JlYXRlRnJvbVBhcmFtcyhwYXJhbXMsICp0
aGlzLCBmb250KTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmxvYWRGb250
KGNvbnN0IERpY3Rpb25hCiBib29sIEZvbnRMb2FkZXI6OmNoZWNrRm9udChjb25zdCBTdHJpbmcm
IGZvbnRTdHJpbmcsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzZWNvbmQg
cGFyYW1ldGVyICh0ZXh0KSBpcyBpZ25vcmVkLgotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250OwogICAgIGlmICghcmVzb2x2ZUZvbnRTdHlsZShmb250U3RyaW5nLCBmb250KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250
LmZhbWlseUNvdW50KCk7IGkrKykgewpAQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSgKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShpZCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoaWQp
LmdldCgpKTsKIH0KIAotYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0
cmluZyYgZm9udFN0cmluZywgRm9udCYgZm9udCkKK2Jvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZv
bnRTdHlsZShjb25zdCBTdHJpbmcmIGZvbnRTdHJpbmcsIEZvbnRDYXNjYWRlJiBmb250KQogewog
ICAgIC8vIEludGVycHJldCBmb250U3RyaW5nIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ2ZvbnQn
IGF0dHJpYnV0ZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuCiAgICAgUmVmUHRyPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgYm9vbCBGb250TG9hZGVyOjpyZXNvbHZlRm9u
dFN0eWxlKGNvbnN0IAogCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihkZWZhdWx0Rm9u
dERlc2NyaXB0aW9uKTsKIAotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlLT5mb250KCku
Zm9udFNlbGVjdG9yKCkpOworICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShzdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250
IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOwpAQCAtMzE5
LDcgKzMxOSw3IEBAIGJvb2wgRm9udExvYWRlcjo6cmVzb2x2ZUZvbnRTdHlsZShjb25zdCAKICAg
ICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoc3R5bGVSZXNvbHZlciwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZSk7
CiAKLSAgICBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBmb250ID0gc3R5bGUtPmZvbnRDYXNj
YWRlKCk7CiAgICAgZm9udC51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHJldmlzaW9u
IDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2U7CiBjbGFzcyBEaWN0
aW9uYXJ5OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZvbnQ7CitjbGFz
cyBGb250Q2FzY2FkZTsKIGNsYXNzIExvYWRGb250Q2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBl
bmRpbmdFdmVudHNUaW1lckZpcmVkKCkgeyBmaXJlUGVuZGluZ0V2ZW50cygpOyB9CiAgICAgdm9p
ZCBzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2b2lkIGZpcmVQZW5kaW5n
RXZlbnRzKCk7Ci0gICAgYm9vbCByZXNvbHZlRm9udFN0eWxlKGNvbnN0IFN0cmluZyYsIEZvbnQm
KTsKKyAgICBib29sIHJlc29sdmVGb250U3R5bGUoY29uc3QgU3RyaW5nJiwgRm9udENhc2NhZGUm
KTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVTaGUKIHsKICAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgdGhpcyk7CiAgICAgaWYgKGF1dG8gcmVuZGVyVmlldyA9IGRvY3VtZW50KCku
cmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnQoKS51cGRhdGUo
Zm9udFNlbGVjdG9yKCkpOworICAgICAgICByZW5kZXJWaWV3LT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIAogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdmlld3BvcnRTdHlsZVJlc29sdmVyKCktPnJlc29sdmUoKTsKQEAgLTc0OCw3
ICs3NDgsNyBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAg
ICAgIGlmICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewogICAgICAgICAgICAgc19zdHlsZU5v
dFlldEF2YWlsYWJsZSA9ICZSZW5kZXJTdHlsZTo6Y3JlYXRlKCkubGVha1JlZigpOwogICAgICAg
ICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAg
ICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3Ip
OworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwogICAgICAgICByZXR1cm4gKnNf
c3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC0xMDMxLDkgKzEwMzEsOSBAQCBSZWY8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTCiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBh
cmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBz
dHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7
CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBt
X3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgcmV0
dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICBjaGVja0Zvclpvb21DaGFuZ2Uo
c3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNo
YW5nZShzdHlsZSk7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwor
ICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgaWYg
KG1fc3RhdGUuZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKCkpCiAgICAgICAgIHN0eWxlLT5zZXRI
YXNWaWV3cG9ydFVuaXRzKHRydWUpOwogICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0yMTg1LDcgKzIxODUsNyBAQCBp
bmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0CiAKICAgICAvLyBDaGluZXNl
IGFuZCBKYXBhbmVzZSBsYWNrIHdvcmQgYm91bmRhcnkgbWFya3MsIGFuZCB0aGVyZSBpcyBubyBj
bGVhciBhZ3JlZW1lbnQgb24gd2hhdCBjb25zdGl0dXRlcwogICAgIC8vIGEgd29yZCwgc28gdHJl
YXQgdGhlIHBvc2l0aW9uIGJlZm9yZSBhbnkgQ0pLIGNoYXJhY3RlciBhcyBhIHdvcmQgc3RhcnQu
Ci0gICAgaWYgKEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woZmlyc3RDaGFyYWN0ZXIpKQor
ICAgIGlmIChGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChmaXJzdENoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJjaFN0
YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFbGVtZW50Lmgi
CiAjaW1wb3J0ICJFbGVtZW50VHJhdmVyc2FsLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVy
LmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgpAQCAtMTExNCw3ICsxMTE0LDcgQEAgc3RhdGlj
IFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
LmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0YXRpYyBQbGF0Zm9y
bUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdGF0
aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250
ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEwIEBAIE5TQXR0cmlidXRl
ZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5n
bGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChz
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3Vn
aCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
ICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpXSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHlsZS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKICAgICAgICAgICAgIFthdHRy
cy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSFRNTENvbnZlcnRlci5oIgpAQCAtMjEzLDcgKzIxMyw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKIAogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmVz
dWx0ID0gJnN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CiAKICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkgewogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTIz
NSw3ICsyMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAg
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVu
ZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJp
bWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJp
bWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpA
QCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0Zv
clMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnQo
KS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOwogICAgIGlm
IChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQpZm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50
LmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAi
RnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKQEAgLTExNSw3ICsxMTUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpm
b250Rm9yU2VsCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9u
dCgpLnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUp
CiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9y
U2VsCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhh
dmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQg
PSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9u
dCkgewpAQCAtMTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclMKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0Zv
bnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAo
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkg
JiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xv
cjo6YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDUsNyArMjEwNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihkZWZhdWx0Rm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dCgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBuZXdTdHls
ZS0+Zm9udENhc2NhZGUoKS51cGRhdGUobmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKQEAgLTIxMjIsNyArMjEyMiw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBzdHlsZVJlc29s
dmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogCi0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQgPSBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXIuZm9udFNlbGVjdG9yKCkpOwogICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKICAgICBzdHlsZVJlc29sdmVyLmZvbnRT
ZWxlY3RvcigpLT5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcygmbW9kaWZpYWJsZVN0
YXRlKCkpOwpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdUZXh0SQogICAgIGlmIChmaWxsICYmIGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1pl
cm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBhY2Nl
c3NGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBhY2Nlc3NGb250KCk7CiAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwog
CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gdGV4dDsKQEAgLTIzNzIsMTAgKzIzNzIsMTAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAgICAg
bWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKGxvY2F0aW9uLngoKSAtIG1hc2tSZWN0LngoKSwg
bG9jYXRpb24ueSgpIC0gbWFza1JlY3QueSgpKTsKICAgICAgICAgICAgIC8vIFdlIGRyYXcgd2hl
biBmb250V2lkdGggaXMgMCBzbyBjb21wb3NpdGluZyBvcGVyYXRpb25zIChlZywgYSAiY29weSIg
b3ApIHN0aWxsIHdvcmsuCiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoKGZvbnRXaWR0aCA+IDAgPyAod2lkdGggLyBmb250V2lkdGgpIDogMCksIDEpKTsKLSAg
ICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBG
bG9hdFBvaW50KDAsIDApLCBGb250OjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAg
ICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBGbG9h
dFBvaW50KDAsIDApLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUo
LW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgICAgICBtYXNrSW1hZ2VDb250
ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOworICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwpAQCAtMjM5OCwxNSArMjM5OCwxNSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAgICBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNv
bXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBs
b2NhdGlvbiwgRm9udDo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CisgICAgICAgIGMtPmRy
YXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAg
ICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250OjpVc2VG
YWxsYmFja0lmRm9udE5vdFJlYWR5KTsKKyAgICAgICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRl
eHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7
CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2UgewotICAgICAgICBj
LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnQ6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOworICAgICAgICBjLT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwg
bG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAgICAg
ICAgZGlkRHJhdyh0ZXh0UmVjdCk7CiAgICAgfQogfQpAQCAtMjQyNiw3ICsyNDI2LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmluZmxhdGVTdAogICAgIHJlY3QuaW5mbGF0ZShk
ZWx0YSk7CiB9CiAKLWNvbnN0IEZvbnQmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YWNjZXNz
Rm9udCgpCitjb25zdCBGb250Q2FzY2FkZSYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nl
c3NGb250KCkKIHsKICAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAKICAgICAgICAgU3RyaW5nIG1f
dW5wYXJzZWRGb250OwotICAgICAgICBGb250IG1fZm9udDsKKyAgICAgICAgRm9udENhc2NhZGUg
bV9mb250OwogICAgICAgICBib29sIG1fcmVhbGl6ZWRGb250OwogICAgIH07CiAKQEAgLTMwOCw3
ICszMDgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0
cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCA9
IDAsIGJvb2wgdXNlTWF4V2lkdGggPSBmYWxzZSk7CiAKLSAgICBjb25zdCBGb250JiBhY2Nlc3NG
b250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGFjY2Vzc0ZvbnQoKTsKIAogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxNZW5jbG9zZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIFN0cmluZyBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OmxvbmdEaXZM
ZWYKICAgICBUZXh0UnVuIHJ1bihjbG9zaW5nQnJhY2UuaW1wbCgpLCBjbG9zaW5nQnJhY2UubGVu
Z3RoKCkpOwogICAgIE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKG5vZGUgJiYg
bm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS5mb250KCk7CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICBwYWRk
aW5nLmFwcGVuZE51bWJlcihmb250LndpZHRoKHJ1bikpOwogICAgICAgICBwYWRkaW5nLmFwcGVu
ZExpdGVyYWwoInB4Iik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKICNpbmNs
dWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEdlbmVyaWNGYW1pbGll
cy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudVN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51U3R5bGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBQb3B1cE1lbnVTdHlsZV9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBvcHVwTWVudVNpemVNaW5pCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udCYg
Zm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFw
cGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24s
IGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tn
cm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1lbnVUeXBlIG1l
bnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQb3B1cE1lbnVT
aXplTm9ybWFsKQorICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGJvb2wgdmlz
aWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlLCBMZW5n
dGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHRE
aXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBl
ID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNlbGVj
dFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkKICAg
ICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAgICAsIG1fYmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQpCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2ZvcmVncm91bmRDb2xvcjsgfQogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIGNvbnN0
IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQogICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25lKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25lOyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0QXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7IH0KQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb2xvciBtX2ZvcmVncm91bmRDb2xv
cjsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBGb250IG1fZm9udDsKKyAgICBG
b250Q2FzY2FkZSBtX2ZvbnQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgYm9vbCBtX2lzRGlz
cGxheU5vbmU7CiAgICAgYm9vbCBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRy
b2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CkBAIC00Miw3ICs0Miw3IEBAIExlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250
cm9sUGEKICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKLSNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ1NTIHN5c3RlbSBjb2xvcnMg
YW5kIGZvbnRzCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihUaGVtZUNvbG9yKSBjb25z
dCB7IHJldHVybiBDb2xvcigpOyB9Ci0gICAgdmlydHVhbCBGb250IHN5c3RlbUZvbnQoVGhlbWVG
b250LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCB7IHJldHVybiBGb250KCk7IH0KKyAgICB2aXJ0
dWFsIEZvbnRDYXNjYWRlIHN5c3RlbUZvbnQoVGhlbWVGb250LCBGb250RGVzY3JpcHRpb24mKSBj
b25zdCB7IHJldHVybiBGb250Q2FzY2FkZSgpOyB9CiAgICAgCiAgICAgLy8gSG93IGZhc3QgdGhl
IGNhcmV0IGJsaW5rcyBpbiB0ZXh0IGZpZWxkcy4KICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiAwLjU7IH0KQEAgLTgyLDE3ICs4MiwxNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5bGVzIG9m
IGNvbnRyb2xzLgogICAgIAogICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3VsdCBzaG91
bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IC8qem9vbUZh
Y3RvciovKSBjb25zdCB7IHJldHVybiBmb250LmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdmly
dHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5m
b250RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9v
bWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBh
bHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIExlbmd0
aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9v
bWVkU2l6ZTsgfQorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gem9vbWVkU2l6ZTsgfQogICAgIAogICAg
IC8vIFJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29y
ZGluYXRlcy4gIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KICAgICAKICAgICAv
LyBBbGxvd3MgdGhlIHRoZW1lIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIu
Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29u
c3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAgICAgCiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hp
dGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGcmFtZVZp
ZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2lu
ZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIGFsbG93IGNvbXBp
bGF0aW9uIG9mIE93blB0cjxUZXh0TGF5b3V0PiBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCBo
YXZlIGFjY2VzcyB0byB0aGUgVGV4dExheW91dCBjbGFzcyBkZWZpbml0aW9uCi10ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRM
YXlvdXQqIHB0cikKLXsKLSAgICBXZWJDb3JlOjpGb250OjpkZWxldGVMYXlvdXQocHRyKTsKLX0K
LQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLQotY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFj
a0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLAotICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAg
IDEgLypuby1icmVhayBzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotfTsKLQotc3RhdGljIGJvb2wgaXNEcmF3
bldpdGhTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gcnVuLnJlbmRl
cmluZ0NvbnRleHQoKTsKLX0KLQotc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiogc2V0OwotICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHNldCA9IG5ldyBIYXNoU2V0
PEF0b21pY1N0cmluZz47Ci0gICAgICAgIHNldC0+YWRkKCJNUyBQR290aGljIik7Ci0gICAgICAg
IFVDaGFyIHVuaWNvZGVOYW1lTVNQR290aGljW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwg
MHhGRjMwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAweDMwQUZ9OwotICAgICAgICBzZXQtPmFk
ZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU1BHb3RoaWMsIFdURl9BUlJBWV9MRU5HVEgodW5p
Y29kZU5hbWVNU1BHb3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIFBNaW5jaG8iKTsK
LSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU1BNaW5jaG9bXSA9IHsweEZGMkQsIDB4RkYzMywg
MHgwMDIwLCAweEZGMzAsIDB4NjYwRSwgMHg2NzFEfTsKLSAgICAgICAgc2V0LT5hZGQoQXRvbWlj
U3RyaW5nKHVuaWNvZGVOYW1lTVNQTWluY2hvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1l
TVNQTWluY2hvKSkpOwotCi0gICAgICAgIHNldC0+YWRkKCJNUyBHb3RoaWMiKTsKLSAgICAgICAg
VUNoYXIgdW5pY29kZU5hbWVNU0dvdGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4
MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRn07Ci0gICAgICAgIHNldC0+YWRkKEF0b21pY1N0
cmluZyh1bmljb2RlTmFtZU1TR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNH
b3RoaWMpKSk7Ci0KLSAgICAgICAgc2V0LT5hZGQoIk1TIE1pbmNobyIpOwotICAgICAgICBVQ2hh
ciB1bmljb2RlTmFtZU1TTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBF
LCAweDY3MUR9OwotICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU01p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TTWluY2hvKSkpOwotCi0gICAgICAg
IHNldC0+YWRkKCJNZWlyeW8iKTsKLSAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNZWlyeW9bXSA9
IHsweDMwRTEsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUF9OwotICAgICAgICBzZXQtPmFkZChBdG9t
aWNTdHJpbmcodW5pY29kZU5hbWVNZWlyeW8sIFdURl9BUlJBWV9MRU5HVEgodW5pY29kZU5hbWVN
ZWlyeW8pKSk7Ci0gICAgfQotICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7Ci19Ci0K
LUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOwotCi1UeXBlc2V0dGluZ0Zl
YXR1cmVzIEZvbnQ6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlvbiAo
Q3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLUZvbnQ6OkZvbnQoKQotICAgIDogbV9sZXR0ZXJTcGFjaW5nKDApCi0gICAgLCBt
X3dvcmRTcGFjaW5nKDApCi0gICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQot
ICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKDApCi17Ci19Ci0KLUZvbnQ6OkZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNp
bmcpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmZCkKLSAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyh3b3JkU3BhY2luZykKLSAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wodXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KGZk
LmZpcnN0RmFtaWx5KCkpKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlz
IGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udDo6Rm9udChjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0
ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCi0gICAgLCBtX2xldHRlclNwYWNpbmcoMCkKLSAg
ICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFs
c2UpCi0gICAgLCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMoY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSkKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50
ZXJGb250KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9v
dGhpbmdNb2RlKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQo
KSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKLSNlbmRpZgotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNpZiBQTEFURk9STShJT1MpCi1Gb250OjpG
b250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9y
UGxhdGZvcm1Gb250KGZvbnREYXRhKSkKLSAgICAsIG1fbGV0dGVyU3BhY2luZygwKQotICAgICwg
bV93b3JkU3BhY2luZygwKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCkpCi17Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERh
dGEuZm9udCgpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250
R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9u
dFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdl
dFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdl
aWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChmb250RGF0YS5pc1ByaW50ZXJGb250KCkpOwotICAgIG1fZ2x5cGhzID0g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxl
Y3Rvci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikK
LSAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQotICAgICwg
bV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCi0gICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9s
ZXR0ZXJTcGFjaW5nKQotICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQot
ICAgICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKQotICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0Zl
YXR1cmVzKCkpCi17Ci19Ci0KLUZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhl
cikKLXsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwot
ICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7Ci0gICAgbV9sZXR0ZXJTcGFjaW5nID0gb3Ro
ZXIubV9sZXR0ZXJTcGFjaW5nOwotICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFj
aW5nOwotICAgIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sOwotICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IG90aGVyLm1fdHlwZXNl
dHRpbmdGZWF0dXJlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgRm9udDo6b3BlcmF0
b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSB8fCBvdGhlci5pc0xvYWRpbmdDdXN0b21Gb250cygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9mb250RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3Jp
cHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5nICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dv
cmRTcGFjaW5nICE9IG90aGVyLm1fd29yZFNwYWNpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9nbHlwaHMgPT0gb3RoZXIubV9nbHlwaHMpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVyLm1fZ2x5cGhzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDYW4gdGhl
c2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZvbnRzIHNob3VsZCBnZXQgd2lw
ZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVj
dG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBv
dGhlci5tX2dseXBocy0+Z2VuZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewotICAgIC8vIFRo
aXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2Fj
aGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCi0gICAgRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCAzPiBmYW1pbGllczsKLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKLSAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZsYWdz
OwotfTsKLQotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGb250R2x5cGhzQ2FjaGVFbnRyeShGb250R2x5cGhz
Q2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQotICAgICAgICA6IGtleShXVEY6Om1v
dmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShnKSkKLSAgICB7IH0KLSAgICBGb250
R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHM7Ci19OwotCi10
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVF
bnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHNDYWNoZTsKLQotc3RhdGljIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNo
ZUtleSYgYikKLXsKLSAgICBpZiAoYS5mb250RGVzY3JpcHRpb25DYWNoZUtleSAhPSBiLmZvbnRE
ZXNjcmlwdGlvbkNhY2hlS2V5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEuZm9u
dFNlbGVjdG9ySWQgIT0gYi5mb250U2VsZWN0b3JJZCB8fCBhLmZvbnRTZWxlY3RvclZlcnNpb24g
IT0gYi5mb250U2VsZWN0b3JWZXJzaW9uIHx8IGEuZm9udFNlbGVjdG9yRmxhZ3MgIT0gYi5mb250
U2VsZWN0b3JGbGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmZhbWlsaWVz
LnNpemUoKSAhPSBiLmZhbWlsaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmZhbWlsaWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoYS5mYW1pbGllc1tpXS5pbXBsKCksIGIuZmFtaWxp
ZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBGb250R2x5cGhzQ2FjaGUmIGZvbnRHbHlwaHNDYWNoZSgp
Ci17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlwaHNDYWNoZSwg
Y2FjaGUsICgpKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgaW52YWxpZGF0ZUZvbnRH
bHlwaHNDYWNoZSgpCi17Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIoKTsKLX0KLQotdm9p
ZCBjbGVhcldpZHRoQ2FjaGVzKCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2Fj
aGUoKS5iZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIo
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlRm9udEdseXBo
c0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBrZXkuZm9u
dERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5KGRl
c2NyaXB0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKQotICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5kKGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpKTsKLSAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwotICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwotICAgIGtleS5m
b250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0b3ItPnJlc29sdmVz
RmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFncyhkZXNjcmlwdGlv
bikgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2go
Y29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBrZXkpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA3
PiBoYXNoQ29kZXM7Ci0gICAgaGFzaENvZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtl
eS5mYW1pbGllcy5zaXplKCkpOwotCi0gICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXku
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkuY29tcHV0ZUhhc2goKSk7Ci0gICAgaGFzaENvZGVzLnVu
Y2hlY2tlZEFwcGVuZChrZXkuZm9udFNlbGVjdG9ySWQpOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvclZlcnNpb24pOwotICAgIGhhc2hDb2Rlcy51bmNoZWNr
ZWRBcHBlbmQoa2V5LmZvbnRTZWxlY3RvckZsYWdzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5LmZhbWlsaWVzLnNpemUoKTsgKytpKQotICAgICAgICBoYXNoQ29kZXMudW5jaGVj
a2VkQXBwZW5kKGtleS5mYW1pbGllc1tpXS5pbXBsKCkgPyBDYXNlRm9sZGluZ0hhc2g6Omhhc2go
a2V5LmZhbWlsaWVzW2ldKSA6IDApOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVk
KSk7Ci19Ci0KLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNo
ZSgpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA1MD4gdG9SZW1vdmU7Ci0gICAgRm9udEdseXBo
c0NhY2hlOjppdGVyYXRvciBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsKLSAgICBmb3Ig
KEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+Z2x5cGhzLmdldCgp
Lmhhc09uZVJlZigpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci19Ci0KLXN0YXRp
YyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpCi17Ci0gICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9u
dEdseXBoc0NhY2hlS2V5KGtleSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkp
OwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7
Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0Nh
Y2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7
Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+Z2x5cGhzLmdldCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVu
dHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIG5ld0VudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSks
IEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBSZWY8Rm9udEdseXBocz4g
Z2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVy
OwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1
bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVuZUNvdW50ZXIg
JSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRF
bnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2Fs
IGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVudHJp
ZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUoKS5i
ZWdpbigpKTsKLSAgICByZXR1cm4gZ2x5cGhzOwotfQotCi12b2lkIEZvbnQ6OnVwZGF0ZShQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAotewotICAgIG1fZ2x5cGhz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7Ci0gICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tz
bGFzaEFzWWVuU2lnbkZvckZhbWlseShmaXJzdEZhbWlseSgpKTsKLSAgICBtX3R5cGVzZXR0aW5n
RmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwotfQotCi1mbG9hdCBGb250
OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0Ci17Ci0gICAgLy8gRG9u
J3QgZHJhdyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJl
IGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcsCi0gICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2Un
IGFyZ3VtZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFs
bGJhY2sKLSAgICAvLyBmb250KS4KLSAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8p
OwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8g
RklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVu
cyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAw
MDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3Ro
KCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9
IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICBy
ZXR1cm4gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotCi0g
ICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYgKGlz
TG9hZGluZ0N1c3RvbUZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0byA8IDAp
Ci0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7Ci0gICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGgg
b25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCAmJiB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVu
KSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0KLSAgICBpZiAoY29kZVBhdGhU
b1VzZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
Y29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIGVsc2UKLSAgICAgICAg
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50
LCBmcm9tLCB0byk7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0IHJldHVy
bmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVlZCBhbiBl
eHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgotICAgICAgICBpZiAo
IWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQotICAgICAgICAgICAgZmFs
bGJhY2tGb250cyA9IDA7Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0aW1pemUg
dGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCi0gICAgICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChnbHlwaE92
ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKLSAgICAgICAgICAgIGds
eXBoT3ZlcmZsb3cgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVz
ID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwotICAgIGJv
b2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxldHRl
clNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENhY2hl
KCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBpZiAoY2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkp
Ci0gICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKLQotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Ci0gICAgaWYgKCFmYWxsYmFja0ZvbnRzKQot
ICAgICAgICBmYWxsYmFja0ZvbnRzID0gJmxvY2FsRmFsbGJhY2tGb250czsKLQotICAgIGZsb2F0
IHJlc3VsdDsKLSAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KQotICAgICAgICByZXN1
bHQgPSBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBpZiAoY2FjaGVF
bnRyeSAmJiBmYWxsYmFja0ZvbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgICpjYWNoZUVudHJ5ID0g
cmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQo
cnVuKSkKLSAgICAgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCktPmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSNlbmRp
ZgotCi0gICAgY2hhcnNDb25zdW1lZCA9IHJ1bi5sZW5ndGgoKTsKLSAgICBnbHlwaE5hbWUgPSAi
IjsKLSAgICByZXR1cm4gd2lkdGgocnVuKTsKLX0KLQotR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkgY29uc3QKLXsKLSAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgp
LmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IHVfdG91cHBlcihj
KTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAgICAgIGMgPSB1
cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsKLSAg
ICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gdV9jaGFyTWlycm9yKGMpOwotCi0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3Jp
cHRpb24sIHZhcmlhbnQpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotUGFzc093blB0cjxU
ZXh0TGF5b3V0PiBGb250OjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZsb2F0LCBib29sKSBj
b25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KikKLXsKLX0KLQotZmxvYXQgRm9udDo6d2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KikKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7
Ci0gICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAotICAgICJBcmlhbCBIZWJyZXciLAotICAgICJD
aGFsa2JvYXJkIiwKLSAgICAiQ29jaGluIiwKLSAgICAiQ29yc2l2YSBIZWJyZXciLAotICAgICJD
b3VyaWVyIiwKLSAgICAiRXVwaGVtaWEgVUNBUyIsCi0gICAgIkdlbmV2YSIsCi0gICAgIkdpbGwg
U2FucyIsCi0gICAgIkhlaSIsCi0gICAgIkhlbHZldGljYSIsCi0gICAgIkhvZWZsZXIgVGV4dCIs
Ci0gICAgIkluYWlNYXRoaSIsCi0gICAgIkthaSIsCi0gICAgIkx1Y2lkYSBHcmFuZGUiLAotICAg
ICJNYXJrZXIgRmVsdCIsCi0gICAgIk1vbmFjbyIsCi0gICAgIk1zaHRha2FuIiwKLSAgICAiTmV3
IFBlbmluaW0gTVQiLAotICAgICJPc2FrYSIsCi0gICAgIlJhYW5hbmEiLAotICAgICJTVEhlaXRp
IiwKLSAgICAiU3ltYm9sIiwKLSAgICAiVGltZXMiLAotICAgICJBcHBsZSBCcmFpbGxlIiwKLSAg
ICAiQXBwbGUgTGlHb3RoaWMiLAotICAgICJBcHBsZSBMaVN1bmciLAotICAgICJBcHBsZSBTeW1i
b2xzIiwKLSAgICAiQXBwbGVHb3RoaWMiLAotICAgICJBcHBsZU15dW5nam8iLAotICAgICIjR3Vu
Z1NlbyIsCi0gICAgIiNIZWFkTGluZUEiLAotICAgICIjUENNeXVuZ2pvIiwKLSAgICAiI1BpbEdp
IiwKLX07Ci0KLS8vIEZvciBmb250IGZhbWlsaWVzIHdoZXJlIGFueSBvZiB0aGUgZm9udHMgZG9u
J3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIHRoZSBPUy8yIHRhYmxlCi0vLyBmb3IgYXZnQ2hhcldp
ZHRoLCBmYWxsYmFjayB0byB0aGUgbGVnYWN5IHdlYmtpdCBiZWhhdmlvciBvZiBnZXR0aW5nIHRo
ZSBhdmdDaGFyV2lkdGgKLS8vIGZyb20gdGhlIHdpZHRoIG9mIGEgJzAnLiBUaGlzIG9ubHkgc2Vl
bXMgdG8gYXBwbHkgdG8gYSBmaXhlZCBudW1iZXIgb2YgTWFjIGZvbnRzLAotLy8gYnV0LCBpbiBv
cmRlciB0byBnZXQgc2ltaWxhciByZW5kZXJpbmcgYWNyb3NzIHBsYXRmb3Jtcywgd2UgZG8gdGhp
cyBjaGVjayBmb3IKLS8vIGFsbCBwbGF0Zm9ybXMuCi1ib29sIEZvbnQ6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IGZpcnN0RmFt
aWx5KCk7Ci0gICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotICAgIC8vIEludGVybmFsIGZv
bnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUgdGFi
bGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOwot
Ci0gICAgaWYgKCFmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgewotICAgICAg
ICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoU2V0PEF0b21p
Y1N0cmluZz47Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoKTsgKytpKQotICAgICAgICAgICAg
Zm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmFkZChBdG9taWNTdHJpbmcoZm9u
dEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbaV0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwLT5jb250YWlucyhmYW1pbHkpOwot
fQotCi1ib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdp
ZHRoKSBjb25zdAotewotICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0
aCgpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9u
dERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdo
dCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
LXsKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKLQotICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwotICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCi0gICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwotCi0g
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgcmV0dXJuIGFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOwot
Ci0gICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVj
dGlvblJlY3QsIGZyb20sIHRvKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHgsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKLQotICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0lu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7Ci0gICAgbm9ybWFsaXplZC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3RlcnNbaV0pKTsKLQotICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKLQotdm9pZCBGb250OjpzZXRTaG91bGRV
c2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gc2hvdWxkVXNlU21vb3Ro
aW5nOwotfQotCi1ib29sIEZvbnQ6OnNob3VsZFVzZVNtb290aGluZygpCi17Ci0gICAgcmV0dXJu
IHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci19Ci0KLXZvaWQgRm9udDo6c2V0Q29kZVBhdGgoQ29k
ZVBhdGggcCkKLXsKLSAgICBzX2NvZGVQYXRoID0gcDsKLX0KLQotRm9udDo6Q29kZVBhdGggRm9u
dDo6Y29kZVBhdGgoKQotewotICAgIHJldHVybiBzX2NvZGVQYXRoOwotfQotCi12b2lkIEZvbnQ6
OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcykKLXsKLSAgICBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlw
ZXNldHRpbmdGZWF0dXJlczsKLX0KLQotVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlcygpCi17Ci0gICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5n
RmVhdHVyZXM7Ci19Ci0KLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRS
dW4mIHJ1bikgY29uc3QKLXsKLSAgICBpZiAoc19jb2RlUGF0aCAhPSBBdXRvKQotICAgICAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGlzRHJh
d25XaXRoU1ZHRm9udChydW4pKQotICAgICAgICByZXR1cm4gU2ltcGxlOwotI2VuZGlmCi0KLSAg
ICBpZiAobV9mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkgJiYgbV9mb250RGVzY3Jp
cHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBDb21w
bGV4OwotICAgIAotICAgIGlmIChydW4ubGVuZ3RoKCkgPiAxICYmICFXaWR0aEl0ZXJhdG9yOjpz
dXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoKnRoaXMpKQotICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQotICAgICAgICBy
ZXR1cm4gU2ltcGxlOwotCi0gICAgaWYgKHJ1bi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFNp
bXBsZTsKLQotICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRp
bmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCi0gICAgcmV0
dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3Ro
KCkpOwotfQotCi1Gb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCB1c2UgYSBVbmljb2RlU2V0IGluIHBvcnRzIHdoZXJlIElDVSBpcyB1c2VkLiBOb3RlIHRo
YXQgd2UgCi0gICAgLy8gY2FuJ3Qgc2ltcGx5IHVzZSBVbmljb2RlQ2hhcmFjdGVyIFByb3BlcnR5
L2NsYXNzIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIG5vdCAnY29tYmluaW5n
JywgYnV0IHN0aWxsIG5lZWQgdG8gZ28gdG8gdGhlIGNvbXBsZXggcGF0aC4KLSAgICAvLyBBbHRl
cm5hdGl2ZWx5LCB3ZSBtYXkgYXMgd2VsbCBjb25zaWRlciBiaW5hcnkgc2VhcmNoIG92ZXIgYSBz
b3J0ZWQKLSAgICAvLyBsaXN0IG9mIHJhbmdlcy4KLSAgICBDb2RlUGF0aCByZXN1bHQgPSBTaW1w
bGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4MkU1KSAvLyBV
KzAyRTUgdGhyb3VnaCBVKzAyRTkgKE1vZGlmaWVyIExldHRlcnMgOiBUb25lIGxldHRlcnMpICAK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDJFOSkgCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MzAwKSAvLyBVKzAzMDAg
dGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgzNkYpCi0gICAgICAgICAgICByZXR1cm4gQ29t
cGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MDU5MSB8fCBjID09IDB4MDVCRSkgLy8gVSswNTkx
IHRocm91Z2ggVSswNUNGIGV4Y2x1ZGluZyBVKzA1QkUgSGVicmV3IGNvbWJpbmluZyBtYXJrcywg
SGVicmV3IHB1bmN0dWF0aW9uIFBhc2VxLCBTb2YgUGFzdXEgYW5kIE51biBIYWZ1a2hhCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgwNUNGKQotICAgICAgICAgICAg
cmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSswNjAwIHRocm91Z2ggVSsxMDlGIEFyYWJp
YywgU3lyaWFjLCBUaGFhbmEsIE5LbywgU2FtYXJpdGFuLCBNYW5kYWljLAotICAgICAgICAvLyBE
ZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9yaXlhLCBUYW1pbCwgVGVs
dWd1LCBLYW5uYWRhLCAKLSAgICAgICAgLy8gTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8s
IFRpYmV0YW4sIE15YW5tYXIKLSAgICAgICAgaWYgKGMgPCAweDA2MDApIAotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MTA5RikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIC8vIFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAo
b25seSBBbmNpZW50IEtvcmVhbiBzaG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3Nl
OwotICAgICAgICAvLyBNb2Rlcm4gS29yZWFuIHdpbGwgYmUgcHJlY29tcG9zZWQgYXMgYSByZXN1
bHQgb2Ygc3RlcCBBKQotICAgICAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoYyA8PSAweDExRkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxl
eDsKLQotICAgICAgICBpZiAoYyA8IDB4MTM1RCkgLy8gVSsxMzVEIHRocm91Z2ggVSsxMzVGIEV0
aGlvcGljIGNvbWJpbmluZyBtYXJrcwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChjIDw9IDB4MTM1RikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV4OwotCi0gICAgICAgIGlm
IChjIDwgMHgxNzAwKSAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgVGFnYWxvZywgSGFudW5vbywg
QnVoaWQsIFRhZ2hhbndhLEtobWVyLCBNb25nb2xpYW4KLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoYyA8PSAweDE4QUYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQot
ICAgICAgICBpZiAoYyA8IDB4MTkwMCkgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChV
bmljb2RlIDQuMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDE5
NEYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MTk4
MCkgLy8gVSsxOTgwIHRocm91Z2ggVSsxOURGIE5ldyBUYWkgTHVlCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxOURGKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDFBMDApIC8vIFUrMUEwMCB0aHJvdWdoIFUrMUNGRiBC
dWdpbmVzZSwgVGFpIFRoYW0sIEJhbGluZXNlLCBCYXRhaywgTGVwY2hhLCBWZWRpYwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4MUNGRikKLSAgICAgICAgICAgIHJl
dHVybiBDb21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHgxREMwKSAvLyBVKzFEQzAgdGhyb3Vn
aCBVKzFERkYgQ29taW5pbmcgZGlhY3JpdGljYWwgbWFyayBzdXBwbGVtZW50Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgxREZGKQotICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgLy8gVSsxRTAwIHRocm91Z2ggVSsyMDAwIGNoYXJhY3RlcnMg
d2l0aCBkaWFjcml0aWNzIGFuZCBzdGFja2VkIGRpYWNyaXRpY3MKLSAgICAgICAgaWYgKGMgPD0g
MHgyMDAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdzsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPCAweDIw
RDApIC8vIFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweDIwRkYpCi0gICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgICBpZiAoYyA8IDB4MkNFRikgLy8gVSsyQ0VG
IHRocm91Z2ggVSsyQ0YxIENvbWJpbmluZyBtYXJrcyBmb3IgQ29wdGljCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHgyQ0YxKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweDMwMkEpIC8vIFUrMzAyQSB0aHJvdWdoIFUrMzAy
RiBJZGVvZ3JhcGhpYyBhbmQgSGFuZ3VsIFRvbmUgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweDMwMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8IDB4QTY3QykgLy8gVStBNjdDIHRocm91Z2ggVStBNjdEIENvbWJp
bmluZyBtYXJrcyBmb3Igb2xkIEN5cmlsbGljCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGMgPD0gMHhBNjdEKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAg
ICAgaWYgKGMgPCAweEE2RjApIC8vIFUrQTZGMCB0aHJvdWdoIFUrQTZGMSBDb21iaW5pbmcgbWFy
ayBmb3IgQmFtdW0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYyA8PSAweEE2
RjEpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLQotICAgICAgIC8vIFUrQTgwMCB0aHJv
dWdoIFUrQUJGRiBOYWdyaSwgUGhhZ3MtcGEsIFNhdXJhc2h0cmEsIERldmFuYWdhcmkgRXh0ZW5k
ZWQsCi0gICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBFeHRl
bmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAotICAgICAgICBpZiAoYyA8IDB4QTgwMCkg
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQotICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7Ci0KLSAgICAgICAgaWYgKGMgPCAweEQ3QjApIC8vIFUrRDdC
MCB0aHJvdWdoIFUrRDdGRiBIYW5ndWwgSmFtbyBFeHQuIEIKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYyA8PSAweEQ3RkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsK
LQotICAgICAgICBpZiAoYyA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIC8vIEhpZ2ggc3Vycm9n
YXRlCi0KLSAgICAgICAgICAgIGlmIChpID09IGxlbiAtIDEpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIFVDaGFyIG5leHQgPSBjaGFyYWN0ZXJzWysraV07Ci0gICAg
ICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChuZXh0KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgVUNoYXIzMiBzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIG5leHQpOwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFy
eUNoYXJhY3RlciA8IDB4MUYxRTYpIC8vIFUrMUYxRTYgdGhyb3VnaCBVKzFGMUZGIFJlZ2lvbmFs
IEluZGljYXRvciBTeW1ib2xzCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8PSAweDFGMUZGKQotICAgICAgICAgICAgICAg
IHJldHVybiBDb21wbGV4OwotCi0gICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3Rl
ciA8IDB4RTAxMDApIC8vIFUrRTAxMDAgdGhyb3VnaCBVK0UwMUVGIFVuaWNvZGUgdmFyaWF0aW9u
IHNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChz
dXBwbGVtZW50YXJ5Q2hhcmFjdGVyIDw9IDB4RTAxRUYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgQnJhaG1pIChVKzEx
MDAwIGJsb2NrKSwgS2FpdGhpIChVKzExMDgwIGJsb2NrKSBhbmQgb3RoZXIgY29tcGxleCBzY3Jp
cHRzCi0gICAgICAgICAgICAvLyBpbiBwbGFuZSAxIG9yIGhpZ2hlci4KLQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYyA8IDB4RkUwMCkgLy8gVStGRTAw
IHRocm91Z2ggVStGRTBGIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjIDw9IDB4RkUwRikKLSAgICAgICAgICAgIHJldHVybiBD
b21wbGV4OwotCi0gICAgICAgIGlmIChjIDwgMHhGRTIwKSAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZF
MkYgQ29tYmluaW5nIGhhbGYgbWFya3MKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoYyA8PSAweEZFMkYpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaChVQ2hhcjMyIGMp
Ci17Ci0gICAgLy8gVGhlIGJhc2ljIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgYmxvY2suCi0gICAg
aWYgKGMgPj0gMHg0RTAwICYmIGMgPD0gMHg5RkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBLgotICAgIGlmIChj
ID49IDB4MzQwMCAmJiBjIDw9IDB4NERCRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQuCi0gICAgaWYgKGMgPj0gMHgyRTgwICYmIGMg
PD0gMHgyRUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBLYW5neGkgUmFk
aWNhbHMuCi0gICAgaWYgKGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkRGKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgU3Ryb2tlcy4KLSAgICBpZiAoYyA+PSAweDMxQzAg
JiYgYyA8PSAweDMxRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENKSyBD
b21wYXRpYmlsaXR5IElkZW9ncmFwaHMuCi0gICAgaWYgKGMgPj0gMHhGOTAwICYmIGMgPD0gMHhG
QUZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgVW5pZmllZCBJZGVv
Z3JhcGhzIEV4dGVuc2lvbiBCLgotICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRl
b2dyYXBocyBFeHRlbnNpb24gQy4KLSAgICBpZiAoYyA+PSAweDJBNzAwICYmIGMgPD0gMHgyQjcz
RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dy
YXBocyBFeHRlbnNpb24gRC4KLSAgICBpZiAoYyA+PSAweDJCNzQwICYmIGMgPD0gMHgyQjgxRikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRl
b2dyYXBocyBTdXBwbGVtZW50LgotICAgIGlmIChjID49IDB4MkY4MDAgJiYgYyA8PSAweDJGQTFG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBG
b250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKLXsKLSAgICAvLyAweDJDNyBD
YXJvbiwgTWFuZGFyaW4gQ2hpbmVzZSAzcmQgVG9uZQotICAgIC8vIDB4MkNBIE1vZGlmaWVyIExl
dHRlciBBY3V0ZSBBY2NlbnQsIE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKLSAgICAvLyAweDJD
QiBNb2RpZmllciBMZXR0ZXIgR3JhdmUgQWNjZXNzLCBNYW5kYXJpbiBDaGluZXNlIDR0aCBUb25l
IAotICAgIC8vIDB4MkQ5IERvdCBBYm92ZSwgTWFuZGFyaW4gQ2hpbmVzZSA1dGggVG9uZSAKLSAg
ICBpZiAoKGMgPT0gMHgyQzcpIHx8IChjID09IDB4MkNBKSB8fCAoYyA9PSAweDJDQikgfHwgKGMg
PT0gMHgyRDkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIwMjAp
IHx8IChjID09IDB4MjAyMSkgfHwgKGMgPT0gMHgyMDMwKSB8fCAoYyA9PSAweDIwM0IpIHx8IChj
ID09IDB4MjAzQykKLSAgICAgICAgfHwgKGMgPT0gMHgyMDQyKSB8fCAoYyA9PSAweDIwNDcpIHx8
IChjID09IDB4MjA0OCkgfHwgKGMgPT0gMHgyMDQ5KSB8fCAoYyA9PSAweDIwNTEpCi0gICAgICAg
IHx8IChjID09IDB4MjBERCkgfHwgKGMgPT0gMHgyMERFKSB8fCAoYyA9PSAweDIxMDApIHx8IChj
ID09IDB4MjEwMykgfHwgKGMgPT0gMHgyMTA1KQotICAgICAgICB8fCAoYyA9PSAweDIxMDkpIHx8
IChjID09IDB4MjEwQSkgfHwgKGMgPT0gMHgyMTEzKSB8fCAoYyA9PSAweDIxMTYpIHx8IChjID09
IDB4MjEyMSkKLSAgICAgICAgfHwgKGMgPT0gMHgyMTJCKSB8fCAoYyA9PSAweDIxM0IpIHx8IChj
ID09IDB4MjE1MCkgfHwgKGMgPT0gMHgyMTUxKSB8fCAoYyA9PSAweDIxNTIpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjE1NiAmJiBjIDw9IDB4MjE1QSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDIxNjAgJiYgYyA8PSAweDIxNkIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyMTcwICYmIGMgPD0gMHgyMTdC
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDIxN0YpIHx8IChjID09
IDB4MjE4OSkgfHwgKGMgPT0gMHgyMzA3KSB8fCAoYyA9PSAweDIzMTIpIHx8IChjID09IDB4MjNC
RSkgfHwgKGMgPT0gMHgyM0JGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+
PSAweDIzQzAgJiYgYyA8PSAweDIzQ0MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KChjID09IDB4MjNDRSkgfHwgKGMgPT0gMHgyNDIzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoYyA+PSAweDI0NjAgJiYgYyA8PSAweDI0OTIpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGMgPj0gMHgyNDlDICYmIGMgPD0gMHgyNEZGKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI1QTApIHx8IChjID09IDB4MjVBMSkgfHwgKGMgPT0g
MHgyNUEyKSB8fCAoYyA9PSAweDI1QUEpIHx8IChjID09IDB4MjVBQikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKChjID09IDB4MjVCMSkgfHwgKGMgPT0gMHgyNUIyKSB8fCAoYyA9
PSAweDI1QjMpIHx8IChjID09IDB4MjVCNikgfHwgKGMgPT0gMHgyNUI3KSB8fCAoYyA9PSAweDI1
QkMpIHx8IChjID09IDB4MjVCRCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlm
ICgoYyA9PSAweDI1QzApIHx8IChjID09IDB4MjVDMSkgfHwgKGMgPT0gMHgyNUM2KSB8fCAoYyA9
PSAweDI1QzcpIHx8IChjID09IDB4MjVDOSkgfHwgKGMgPT0gMHgyNUNCKSB8fCAoYyA9PSAweDI1
Q0MpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjVDRSAmJiBjIDw9
IDB4MjVEMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI1RTIgJiYg
YyA8PSAweDI1RTYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGMgPT0gMHgyNUVG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID49IDB4MjYwMCAmJiBjIDw9IDB4
MjYwMykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHgyNjA1KSB8fCAo
YyA9PSAweDI2MDYpIHx8IChjID09IDB4MjYwRSkgfHwgKGMgPT0gMHgyNjE2KSB8fCAoYyA9PSAw
eDI2MTcpIHx8IChjID09IDB4MjY0MCkgfHwgKGMgPT0gMHgyNjQyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDI2NjAgJiYgYyA8PSAweDI2NkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNjcyICYmIGMgPD0gMHgyNjdEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoYyA9PSAweDI2QTApIHx8IChjID09IDB4MjZCRCkg
fHwgKGMgPT0gMHgyNkJFKSB8fCAoYyA9PSAweDI3MTMpIHx8IChjID09IDB4MjcxQSkgfHwgKGMg
PT0gMHgyNzNGKSB8fCAoYyA9PSAweDI3NDApIHx8IChjID09IDB4Mjc1NikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHgyNzc2ICYmIGMgPD0gMHgyNzdGKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjID09IDB4MkIxQSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzLgotICAgIGlm
IChjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgot
ICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgzMDMwKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjID4gMHgzMDMwICYmIGMgPD0gMHgzMDNGKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhpcmFnYW5hCi0gICAgaWYgKGMgPj0gMHgzMDQwICYmIGMgPD0gMHgzMDlG
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEthdGFrYW5hIAotICAgIGlmIChjID49
IDB4MzBBMCAmJiBjIDw9IDB4MzBGRikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBC
b3BvbW9mbwotICAgIGlmIChjID49IDB4MzEwMCAmJiBjIDw9IDB4MzEyRikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxOUYpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKLSAgICBpZiAoYyA+PSAw
eDMxQTAgJiYgYyA8PSAweDMxQkYpCi0gICAgICAgIHJldHVybiB0cnVlOwotIAotICAgIC8vIEVu
Y2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMuCi0gICAgaWYgKGMgPj0gMHgzMjAwICYmIGMg
PD0gMHgzMkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDSksgQ29tcGF0
aWJpbGl0eS4KLSAgICBpZiAoYyA+PSAweDMzMDAgJiYgYyA8PSAweDMzRkYpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGMgPj0gMHhGODYwICYmIGMgPD0gMHhGODYyKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLgotICAgIGlm
IChjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU0RikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoKGMgPT0gMHhGRTEwKSB8fCAoYyA9PSAweEZFMTEpIHx8IChjID09IDB4RkUxMikgfHwg
KGMgPT0gMHhGRTE5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKGMgPT0gMHhG
RjBEKSB8fCAoYyA9PSAweEZGMUIpIHx8IChjID09IDB4RkYxQykgfHwgKGMgPT0gMHhGRjFFKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGgg
Rm9ybXMKLSAgICAvLyBVc3VhbGx5IG9ubHkgdXNlZCBpbiBDSksKLSAgICBpZiAoYyA+PSAweEZG
MDAgJiYgYyA8PSAweEZGRUYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW1vamku
Ci0gICAgaWYgKGMgPT0gMHgxRjEwMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YyA+PSAweDFGMTEwICYmIGMgPD0gMHgxRjEyOSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoYyA+PSAweDFGMTMwICYmIGMgPD0gMHgxRjE0OSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoYyA+PSAweDFGMTUwICYmIGMgPD0gMHgxRjE2OSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMTcwICYmIGMgPD0gMHgxRjE4OSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYyA+PSAweDFGMjAwICYmIGMgPD0gMHgxRjZDNSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7Ci19Ci0K
LXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAg
IGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
XSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJF
eHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHRy
ZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bikKLXsKLSAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7
Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChVMTZfSVNfTEVBRChjaGFyYWN0ZXIpICYmIGkgKyAxIDwgbGVuZ3RoICYmIFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0
ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyLCBjaGFyYWN0ZXJzW2kgKyAxXSk7
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4
cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaSAt
IDFdOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChVMTZfSVNfVFJBSUwoY2hhcmFjdGVyKSAmJiBpID4gMSAmJiBVMTZfSVNfTEVBRChjaGFy
YWN0ZXJzW2kgLSAyXSkpIHsKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpIC0gMl0sIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4cGFuZEFyb3VuZElkZW9n
cmFwaHMgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQotewotICAgIGlmIChzdHJpbmdWaWV3LmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0
cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBp
c0FmdGVyRXhwYW5zaW9uKTsKLSAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRp
cmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYykgJiAoVV9H
Q19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0NDX01BU0sgfCBVX0dDX0NGX01BU0spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHdvcmQtc2VwYXJhdG9y
IGNoYXJhY3RlcnMgbGlzdGVkIGluIENTUyBUZXh0IExldmVsIDMgRWRpdG9yJ3MgRHJhZnQgMyBO
b3ZlbWJlciAyMDEwLgotICAgIGlmIChjID09IGV0aGlvcGljV29yZHNwYWNlIHx8IGMgPT0gYWVn
ZWFuV29yZFNlcGFyYXRvckxpbmUgfHwgYyA9PSBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90Ci0gICAg
ICAgIHx8IGMgPT0gdWdhcml0aWNXb3JkRGl2aWRlciB8fCBjID09IHRpYmV0YW5NYXJrSW50ZXJz
eWxsYWJpY1RzaGVnIHx8IGMgPT0gdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGb250Ojpp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1f
Z2x5cGhzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwotfQotICAgIAotR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgp
Ci17Ci0gICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2
ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNp
cmFibGUgcmVuZGVyaW5ncywKLSAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksg
Y2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KLSAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7Ci0KLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0g
R2x5cGhCdWZmZXI6Om5vT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGlj
aCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgotICAgICAgICByZXR1cm4gR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7Ci0g
ICAgfQotICAgIAotICAgIGlmICh0ZXh0UnVuLmlzOEJpdCgpKQotICAgICAgICBiYXNlQ2hhcmFj
dGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29mZnNldEluU3RyaW5nXTsKLSAgICBlbHNlCi0g
ICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0
ZXh0UnVuLmxlbmd0aCgpLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAKLSAgICAvLyB1X2dldEludFBy
b3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZv
ciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4g
dXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KLSAg
ICBVQmxvY2tDb2RlIGJsb2NrQ29kZSA9IHVibG9ja19nZXRDb2RlKGJhc2VDaGFyYWN0ZXIpOwot
ICAgIHN3aXRjaCAoYmxvY2tDb2RlKSB7Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1JBRElDQUxTX1NV
UFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgot
ICAgIGNhc2UgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFM6Ci0gICAgY2Fz
ZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFk6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURf
SURFT0dSQVBIU19FWFRFTlNJT05fQToKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVP
R1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM6Ci0g
ICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM6Ci0gICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQjoKLSAgICBjYXNlIFVCTE9DS19DSktf
Q09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pL
X1NUUk9LRVM6Ci0gICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJ
T05fQzoKLSAgICBjYXNlIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9E
OgotICAgIGNhc2UgVUJMT0NLX0lERU9HUkFQSElDX0RFU0NSSVBUSU9OX0NIQVJBQ1RFUlM6Ci0g
ICAgY2FzZSBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TOgotICAgIGNhc2UgVUJMT0NLX0VOQ0xP
U0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQ6Ci0gICAgY2FzZSBVQkxPQ0tfSElSQUdBTkE6Ci0g
ICAgY2FzZSBVQkxPQ0tfS0FUQUtBTkE6Ci0gICAgY2FzZSBVQkxPQ0tfQk9QT01PRk86Ci0gICAg
Y2FzZSBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQ6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pB
TU86Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTzoKLSAgICBjYXNl
IFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTOgotICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1PX0VY
VEVOREVEX0E6Ci0gICAgY2FzZSBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQjoKLSAgICAg
ICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3
T3ZlckdseXBoOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5z
bGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6U2tpcERlc2NlbmRlcnM7Ci0gICAgfQotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udF9oCi0j
ZGVmaW5lIEZvbnRfaAotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIlBhdGguaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0KLS8vICJYMTEvWC5oIiBkZWZpbmVzIENvbXBsZXggdG8gMCBhbmQgY29u
ZmxpY3RzCi0vLyB3aXRoIENvbXBsZXggdmFsdWUgaW4gQ29kZVBhdGggZW51bS4KLSNpZmRlZiBD
b21wbGV4Ci0jdW5kZWYgQ29tcGxleAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZvbnREYXRhOwotY2xh
c3MgRm9udE1ldHJpY3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgRm9udFNlbGVj
dG9yOwotY2xhc3MgR2x5cGhCdWZmZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBM
YXlvdXRSZWN0OwotY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFRleHRMYXlvdXQ7Ci1jbGFzcyBU
ZXh0UnVuOwotCi1zdHJ1Y3QgR2x5cGhEYXRhOwotCi1zdHJ1Y3QgR2x5cGhPdmVyZmxvdyB7Ci0g
ICAgR2x5cGhPdmVyZmxvdygpCi0gICAgICAgIDogbGVmdCgwKQotICAgICAgICAsIHJpZ2h0KDAp
Ci0gICAgICAgICwgdG9wKDApCi0gICAgICAgICwgYm90dG9tKDApCi0gICAgICAgICwgY29tcHV0
ZUJvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaXNFbXB0eSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gIWxlZnQgJiYgIXJpZ2h0ICYmICF0b3AgJiYgIWJvdHRv
bTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBleHRlbmRUbyhjb25zdCBHbHlwaE92ZXJmbG93
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBvdGhlci5sZWZ0
KTsKLSAgICAgICAgcmlnaHQgPSBzdGQ6Om1heChyaWdodCwgb3RoZXIucmlnaHQpOwotICAgICAg
ICB0b3AgPSBzdGQ6Om1heCh0b3AsIG90aGVyLnRvcCk7Ci0gICAgICAgIGJvdHRvbSA9IHN0ZDo6
bWF4KGJvdHRvbSwgb3RoZXIuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgR2x5cGhPdmVyZmxvdyYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbGVmdCAh
PSBvdGhlci5sZWZ0IHx8IHJpZ2h0ICE9IG90aGVyLnJpZ2h0IHx8IHRvcCAhPSBvdGhlci50b3Ag
fHwgYm90dG9tICE9IG90aGVyLmJvdHRvbTsKLSAgICB9Ci0KLSAgICBpbnQgbGVmdDsKLSAgICBp
bnQgcmlnaHQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgYm90dG9tOwotICAgIGJvb2wgY29tcHV0
ZUJvdW5kczsKLX07Ci0KLWNsYXNzIEdseXBoVG9QYXRoVHJhbnNsYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBjbGFzcyBHbHlwaFVuZGVybGluZVR5cGUge1NraXBEZXNjZW5kZXJzLCBTa2lwR2x5
cGgsIERyYXdPdmVyR2x5cGh9OwotICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygp
ID0gMDsKLSAgICB2aXJ0dWFsIFBhdGggcGF0aCgpID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGV4dGVudHMoKSA9IDA7Ci0gICAgdmlydHVhbCBHbHlwaFVuZGVybGlu
ZVR5cGUgdW5kZXJsaW5lVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0g
MDsKLSAgICB2aXJ0dWFsIH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KLX07Ci1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOwotCi1jbGFzcyBG
b250IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBm
bG9hdCB3b3JkU3BhY2luZyk7Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQg
aWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRp
bmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1Jl
ZlB0cjxGb250U2VsZWN0b3I+KTsKLSNlbmRpZgotICAgIH5Gb250KCk7Ci0KLSAgICBGb250KGNv
bnN0IEZvbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9u
dCYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnQmIG90
aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uOyB9
Ci0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRQaXhlbFNpemUoKTsgfQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotCi0gICAgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKLQotICAgIGVudW0gQ3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKLQotICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
Ci0gICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCosIGZs
b2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0
TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9Ci0KLSAgICBmbG9hdCB3b3JkU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KLSAgICBmbG9hdCBsZXR0ZXJTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgdm9pZCBzZXRXb3JkU3Bh
Y2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9Ci0gICAgdm9pZCBzZXRMZXR0ZXJT
cGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKTsgfQotICAgIAotICAgIEZvbnRSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCk7IH0KLQotICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVzZXR0aW5nRmVhdHVy
ZXM+KG1fdHlwZXNldHRpbmdGZWF0dXJlcyk7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpOyB9Ci0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsgfQotCi0gICAgRm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi5pdGFsaWMoKTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lkdGhWYXJpYW50
IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFy
aWFudCgpOyB9Ci0KLSAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9n
bHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KLQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNz
KCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lk
dGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlv
bikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9z
aXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXpl
LCBwb3NpdGlvbik7IH0KLSAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0
OwotICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgp
IGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwotCi0gICAgaW50IGVtcGhhc2lzTWFy
a0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
RGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBpbnQgZW1waGFzaXNNYXJr
SGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIHByaW1hcnlGb250RGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZh
bGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9W
YXJpYW50KSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIpOwotICAgIHN0YXRpYyBib29s
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7Ci0KLSAgICAvLyBCRVdBUkU6IElmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGwsIHRoZW4gdGhl
IHJldHVybmVkIHZhbHVlIGluY2x1ZGVzIGEgdHJhaWxpbmcgb3Bwb3J0dW5pdHkKLSAgICAvLyB3
aGljaCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBiZSBwcmVzZW50LiBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KCkgY29tcGVuc2F0ZXMK
LSAgICAvLyBmb3IgdGhpcyBieSBkZWNyZW1lbnRpbmcgdGhlIHJldHVybmVkIHZhbHVlIGlmIGlz
QWZ0ZXJFeHBhbnNpb24gaXMgdHJ1ZSBhdCB0aGUgZW5kIG9mIGEgbGluZS4KLSAgICBzdGF0aWMg
dW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiwgVGV4
dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7Ci0KLSAgICBlbnVtIENvZGVQ
YXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB9Owot
ICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAgICBzdGF0aWMg
Q29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhciosIHVuc2lnbmVkKSB7
IHJldHVybiBTaW1wbGU7IH0KLSAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2Rl
UGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7Ci0KLSAgICBib29sIHByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gRm9yVGV4dEVt
cGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0
RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBo
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBmbG9hdCBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0KLSAgICBib29sIGdl
dEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBj
b25zdDsKLQotICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4
VGV4dCgpOwotICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNl
LgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JO
b3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7Ci0KLXB1
YmxpYzoKLSNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKLSAgICBib29sIGVxdWFsRm9y
VGV4dEF1dG9TaXppbmcoY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbikKLSAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhlci5t
X2xldHRlclNwYWNpbmcKLSAgICAgICAgICAgICYmIG1fd29yZFNwYWNpbmcgPT0gb3RoZXIubV93
b3JkU3BhY2luZzsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5n
IHRoZSBkaWZmZXJlbnQgZm9udCByZW5kZXJpbmcgY29kZSBwYXRocy4KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRDb2RlUGF0aChDb2RlUGF0aCk7Ci0gICAgc3RhdGljIENvZGVQ
YXRoIGNvZGVQYXRoKCk7Ci0gICAgc3RhdGljIENvZGVQYXRoIHNfY29kZVBhdGg7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhU
eXBlc2V0dGluZ0ZlYXR1cmVzKTsKLSAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBkZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc19y
b3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdOwotICAgIHN0YXRpYyBib29sIGlzUm91bmRp
bmdIYWNrQ2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGMgJiB+
MHhGRikgJiYgc19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVtjXTsKLSAgICB9Ci0KLSAgICBG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIHRyZWF0
QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAn
XG4nIHx8IGMgPT0gbm9CcmVha1NwYWNlOyB9Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9X
aWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChjKSB8fCBjID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQotICAgIHN0YXRpYyBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVy
biBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4g
fHwgYyA9PSB6ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8
IChjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3Bh
Y2UgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQotICAgIHN0YXRpYyBib29s
IGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
VUNoYXIgbm9ybWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZTsKLQot
ICAgICAgICBpZiAodHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBG
b250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKLQotICAgIFR5
cGVzZXR0aW5nRmVhdHVyZXMgY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnRE
ZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBUeXBlc2V0dGluZ0ZlYXR1
cmVzIGZlYXR1cmVzID0gc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgICAgICBz
d2l0Y2ggKHRleHRSZW5kZXJpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXV0b1RleHRSZW5kZXJp
bmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcHRpbWl6ZVNwZWVkOgotICAg
ICAgICAgICAgZmVhdHVyZXMgJj0gfihLZXJuaW5nIHwgTGlnYXR1cmVzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdlb21ldHJpY1ByZWNpc2lvbjoKLSAgICAgICAgY2FzZSBP
cHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nIHwgTGln
YXR1cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzoKLSAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9u
LmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246
OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1
cmVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpF
bmFibGVkTGlnYXR1cmVzU3RhdGU6Ci0gICAgICAgICAgICBmZWF0dXJlcyB8PSBMaWdhdHVyZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZmVhdHVyZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVy
ZXMgc19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlczsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBt
X2ZvbnREZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBo
czsKLSAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7Ci0gICAgZmxvYXQgbV93b3JkU3BhY2luZzsK
LSAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8vIChUeXBlc2V0dGluZ0ZlYXR1
cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250RGVzY3JpcHRpb24uCi19Owot
Ci12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZvaWQgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwotdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
Ci0KLWlubGluZSBGb250Ojp+Rm9udCgpCi17Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVGb250
RGF0YSYgRm9udDo6cHJpbWFyeUZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbHlw
aHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNpbXBsZUZvbnREYXRhKG1fZm9udERl
c2NyaXB0aW9uKTsKLX0KLQotaW5saW5lIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnQ6OmZhbGxiYWNr
UmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsK
LSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2Ny
aXB0aW9uLCBpbmRleCk7Ci19Ci0KLWlubGluZSBib29sIEZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4
ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLWlubGluZSBGb250U2VsZWN0b3IqIEZv
bnQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlw
aHMtPmZvbnRTZWxlY3RvcigpIDogMDsKLX0KLQotaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRo
KGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCF0YWJTaXplKQotICAgICAgICByZXR1cm4gbGV0
dGVyU3BhY2luZygpOwotICAgIGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnREYXRhLnNw
YWNlV2lkdGgoKSArIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJEZWx0YVdpZHRoID0g
dGFiV2lkdGggLSBmbW9kZihwb3NpdGlvbiwgdGFiV2lkdGgpOwotICAgIHJldHVybiAodGFiRGVs
dGFXaWR0aCA8IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0
YVdpZHRoOwotfQotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
bGV0ZU93bmVkUHRyPFdlYkNvcmU6OlRleHRMYXlvdXQ+KFdlYkNvcmU6OlRleHRMYXlvdXQqKTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250U2Vs
ZWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNz
IEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBPcGVuVHlwZVZl
cnRpY2FsRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBhbGxvdyBjb21waWxhdGlvbiBvZiBPd25QdHI8VGV4dExh
eW91dD4gaW4gc291cmNlIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFRleHRM
YXlvdXQgY2xhc3MgZGVmaW5pdGlvbgordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxX
ZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCit7CisgICAgV2Vi
Q29yZTo6Rm9udDo6ZGVsZXRlTGF5b3V0KHB0cik7Cit9CisKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisK
K2NvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
eworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKKyAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMSAvKj8qLywKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAxIC8qbm8tYnJlYWsgc3BhY2UqLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKK307CisKK3N0YXRpYyBib29sIGlzRHJhd25XaXRoU1ZHRm9udChjb25zdCBUZXh0
UnVuJiBydW4pCit7CisgICAgcmV0dXJuIHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Cit9CisKK3N0
YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIHNldDsKKyAgICBpZiAo
IXNldCkgeworICAgICAgICBzZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAg
ICBzZXQtPmFkZCgiTVMgUEdvdGhpYyIpOworICAgICAgICBVQ2hhciB1bmljb2RlTmFtZU1TUEdv
dGhpY1tdID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHgzMEI0LCAweDMwQjcs
IDB4MzBDMywgMHgzMEFGfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVO
YW1lTVNQR290aGljLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTVNQR290aGljKSkpOwor
CisgICAgICAgIHNldC0+YWRkKCJNUyBQTWluY2hvIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVO
YW1lTVNQTWluY2hvW10gPSB7MHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHhGRjMwLCAweDY2MEUs
IDB4NjcxRH07CisgICAgICAgIHNldC0+YWRkKEF0b21pY1N0cmluZyh1bmljb2RlTmFtZU1TUE1p
bmNobywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TUE1pbmNobykpKTsKKworICAgICAg
ICBzZXQtPmFkZCgiTVMgR290aGljIik7CisgICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTVNHb3Ro
aWNbXSA9IHsweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweDMwQjQsIDB4MzBCNywgMHgzMEMzLCAw
eDMwQUZ9OworICAgICAgICBzZXQtPmFkZChBdG9taWNTdHJpbmcodW5pY29kZU5hbWVNU0dvdGhp
YywgV1RGX0FSUkFZX0xFTkdUSCh1bmljb2RlTmFtZU1TR290aGljKSkpOworCisgICAgICAgIHNl
dC0+YWRkKCJNUyBNaW5jaG8iKTsKKyAgICAgICAgVUNoYXIgdW5pY29kZU5hbWVNU01pbmNob1td
ID0gezB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4NjYwRSwgMHg2NzFEfTsKKyAgICAgICAgc2V0
LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTVNNaW5jaG8sIFdURl9BUlJBWV9MRU5HVEgo
dW5pY29kZU5hbWVNU01pbmNobykpKTsKKworICAgICAgICBzZXQtPmFkZCgiTWVpcnlvIik7Cisg
ICAgICAgIFVDaGFyIHVuaWNvZGVOYW1lTWVpcnlvW10gPSB7MHgzMEUxLCAweDMwQTQsIDB4MzBF
QSwgMHgzMEFBfTsKKyAgICAgICAgc2V0LT5hZGQoQXRvbWljU3RyaW5nKHVuaWNvZGVOYW1lTWVp
cnlvLCBXVEZfQVJSQVlfTEVOR1RIKHVuaWNvZGVOYW1lTWVpcnlvKSkpOworICAgIH0KKyAgICBy
ZXR1cm4gc2V0LT5jb250YWlucyhmYW1pbHkpOworfQorCitGb250OjpDb2RlUGF0aCBGb250Ojpz
X2NvZGVQYXRoID0gQXV0bzsKKworVHlwZXNldHRpbmdGZWF0dXJlcyBGb250OjpzX2RlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIEZvbnQgSW1wbGVtZW50YXRpb24gKENyb3NzLVBsYXRmb3JtIFBvcnRpb24p
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb250OjpGb250KCkK
KyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0
dXJlcygwKQoreworfQorCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZs
b2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorICAgIDogbV9mb250RGVzY3Jp
cHRpb24oZmQpCisgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcod29yZFNwYWNpbmcpCisgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShmZC5maXJzdEZhbWlseSgpKSkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
fQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1p
bmRlcGVuZGVudC4KK0ZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEs
IGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
CisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRTcGFjaW5nKDApCisg
ICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQorICAgICwgbV90eXBlc2V0dGlu
Z0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0
U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBl
bmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkp
CisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAs
IG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQorewor
ICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmlt
YXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5
bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5
Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5v
cm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEu
aXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlm
CisKK0ZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCisgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhz
KQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3BhY2luZykKKyAgICAsIG1f
d29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKKyAgICAsIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkKKyAgICAsIG1fdHlwZXNl
dHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQoreworfQorCitGb250
JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250RGVzY3Jp
cHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBtX2dseXBocyA9IG90aGVyLm1f
Z2x5cGhzOworICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKKyAg
ICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3VzZUJhY2tzbGFz
aEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKKyAgICBtX3R5
cGVzZXR0aW5nRmVhdHVyZXMgPSBvdGhlci5tX3R5cGVzZXR0aW5nRmVhdHVyZXM7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitib29sIEZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgRm9udCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fZm9u
dERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8IG1fbGV0dGVyU3BhY2lu
ZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2luZyAhPSBvdGhlci5tX3dv
cmRTcGFjaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZ2x5cGhzID09IG90
aGVyLm1fZ2x5cGhzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fZ2x5cGhzIHx8
ICFvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBo
cy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2FuIHRoZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVo
b3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdpcGVkIG91dCBieSBmdWxsIHN0eWxlIHJl
Y2FsYy4KKyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAhPSBvdGhlci5t
X2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fZ2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdHJ1
Y3QgRm9udEdseXBoc0NhY2hlS2V5IHsKKyAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBz
aGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9i
amVjdHMpLgorICAgIEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0
aW9uQ2FjaGVLZXk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
dW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lv
bjsKKyAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKK307CisKK3N0cnVjdCBGb250R2x5
cGhzQ2FjaGVFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZvbnRH
bHlwaHM+JiYgZykKKyAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQorICAgICAgICAsIGdseXBo
cyhXVEY6Om1vdmUoZykpCisgICAgeyB9CisgICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKKyAg
ICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBG
b250R2x5cGhzQ2FjaGU7CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBo
c0NhY2hlS2V5JiBhLCBjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCit7CisgICAgaWYgKGEu
Zm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmZvbnRTZWxlY3RvcklkICE9IGIuZm9udFNl
bGVjdG9ySWQgfHwgYS5mb250U2VsZWN0b3JWZXJzaW9uICE9IGIuZm9udFNlbGVjdG9yVmVyc2lv
biB8fCBhLmZvbnRTZWxlY3RvckZsYWdzICE9IGIuZm9udFNlbGVjdG9yRmxhZ3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5mYW1pbGllcy5zaXplKCkgIT0gYi5mYW1pbGllcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYS5mYW1pbGllcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGEuZmFtaWxpZXNbaV0uaW1wbCgpLCBiLmZhbWlsaWVzW2ldLmltcGwoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Rm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgcmV0dXJu
IGNhY2hlOworfQorCit2b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQoreworICAgIGZv
bnRHbHlwaHNDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3ZvaWQgY2xlYXJXaWR0aENhY2hlcygpCit7
CisgICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSwgZW5kID0gZm9u
dEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVl
LT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNjcmlw
dCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
KTsKK30KKworc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhzQ2Fj
aGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCit7CisgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0g
Rm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAg
ICAga2V5LmZhbWlsaWVzLmFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAga2V5
LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgp
IDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRT
ZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKKyAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250
U2VsZWN0b3IgJiYgZm9udFNlbGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikg
PyBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKK30KKworc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtl
eSYga2V5KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENvZGVzOworICAgIGhhc2hD
b2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxpZXMuc2l6ZSgpKTsKKwor
ICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5
LmNvbXB1dGVIYXNoKCkpOworICAgIGhhc2hDb2Rlcy51bmNoZWNrZWRBcHBlbmQoa2V5LmZvbnRT
ZWxlY3RvcklkKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JWZXJzaW9uKTsKKyAgICBoYXNoQ29kZXMudW5jaGVja2VkQXBwZW5kKGtleS5mb250U2VsZWN0
b3JGbGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleS5mYW1pbGllcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaGFzaENvZGVzLnVuY2hlY2tlZEFwcGVuZChrZXkuZmFtaWxpZXNb
aV0uaW1wbCgpID8gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbGllc1tpXSkgOiAwKTsK
KworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwg
aGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworfQorCit2b2lkIHBydW5lVW5y
ZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQoreworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgNTA+IHRvUmVtb3ZlOworICAgIEZvbnRHbHlwaHNDYWNoZTo6aXRlcmF0b3IgZW5kID0g
Zm9udEdseXBoc0NhY2hlKCkuZW5kKCk7CisgICAgZm9yIChGb250R2x5cGhzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBmb250R2x5cGhzQ2FjaGUo
KS5yZW1vdmUodG9SZW1vdmVbaV0pOworfQorCitzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQoreworICAgIEZv
bnRHbHlwaHNDYWNoZUtleSBrZXk7CisgICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgIHVuc2lnbmVkIGhhc2gg
PSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOworICAgIEZvbnRHbHlwaHNDYWNoZTo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkgJiYgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKKyAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9u
dEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9u
dFNlbGVjdG9yKSk7CisgICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlw
aHMuZ2V0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJ
bnRlcnZhbCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7
CisgICAgc3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAvLyBSZWZlcmVuY2VkIEZv
bnRHbHlwaHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUg
bWVtb3J5LgorICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2VkUHJ1bmVJbnRl
cnZhbCkpCisgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2Fj
aGUoKTsKKyAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCisgICAgaWYgKGZvbnRH
bHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQorICAgICAgICBmb250R2x5cGhz
Q2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAgcmV0dXJuIGds
eXBoczsKK30KKwordm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKK3sKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHko
Zmlyc3RGYW1pbHkoKSk7CisgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVz
ZXR0aW5nRmVhdHVyZXMoKTsKK30KKworZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAoreworICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAorICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCisgICAgLy8gZm9udCkuCisg
ICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0
byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKworICAgIENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29k
ZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRv
VXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdGZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdG
b250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OworCisgICAgaWYgKGNv
ZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNv
bnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBkcmF3Q29tcGxleFRl
eHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5n
dGgoKTsKKworICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOworICAg
IC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFs
IHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMDA1MAorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgdHlwZXNldHRpbmdG
ZWF0dXJlcygpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxl
bmd0aCgpKSAmJiAhaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIGNvZGVQYXRoVG9V
c2UgPSBDb21wbGV4OworCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKKyAgICAg
ICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9p
bnQsIGZyb20sIHRvKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworfQorCitmbG9h
dCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK3sKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKKyAgICBp
ZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7CisgICAgICAgIC8vIFRoZSBjb21wbGV4IHBh
dGggaXMgbW9yZSByZXN0cmljdGl2ZSBhYm91dCByZXR1cm5pbmcgZmFsbGJhY2sgZm9udHMgdGhh
biB0aGUgc2ltcGxlIHBhdGgsIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgdGVzdCB0byBtYWtlIHRo
ZWlyIGJlaGF2aW9ycyBtYXRjaC4KKyAgICAgICAgaWYgKCFjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAwOworICAgICAg
ICAvLyBUaGUgc2ltcGxlIHBhdGggY2FuIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIGdseXBoIG92
ZXJmbG93IGlzIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBT
aW1wbGVXaXRoR2x5cGhPdmVyZmxvdyAmJiAoZ2x5cGhPdmVyZmxvdyAmJiAhZ2x5cGhPdmVyZmxv
dy0+Y29tcHV0ZUJvdW5kcykpCisgICAgICAgICAgICBnbHlwaE92ZXJmbG93ID0gMDsKKyAgICB9
CisKKyAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMo
KSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0
ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQq
IGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNX
b3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGNhY2hl
RW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1cm4gKmNhY2hl
RW50cnk7CisKKyAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFj
a0ZvbnRzOworICAgIGlmICghZmFsbGJhY2tGb250cykKKyAgICAgICAgZmFsbGJhY2tGb250cyA9
ICZsb2NhbEZhbGxiYWNrRm9udHM7CisKKyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKGNvZGVQ
YXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQgPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMs
IGdseXBoT3ZlcmZsb3cpOworCisgICAgaWYgKGNhY2hlRW50cnkgJiYgZmFsbGJhY2tGb250cy0+
aXNFbXB0eSgpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hh
cnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBpZiAoaXNEcmF3bldpdGhTVkdGb250KHJ1bikpCisgICAgICAgIHJldHVybiBy
dW4ucmVuZGVyaW5nQ29udGV4dCgpLT5mbG9hdFdpZHRoVXNpbmdTVkdGb250KCp0aGlzLCBydW4s
IGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisjZW5kaWYKKworICAgIGNoYXJzQ29uc3VtZWQg
PSBydW4ubGVuZ3RoKCk7CisgICAgZ2x5cGhOYW1lID0gIiI7CisgICAgcmV0dXJuIHdpZHRoKHJ1
bik7Cit9CisKK0dseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7CisgICAgaWYg
KHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpICYmICFwcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgICAgICBpZiAodXBw
ZXJDICE9IGMpIHsKKyAgICAgICAgICAgICAgICBjID0gdXBwZXJDOworICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdmFyaWFudCA9IE5vcm1hbFZhcmlhbnQ7CisgICAgfQorCisgICAgaWYgKG1pcnJvcikK
KyAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKKworICAgIHJldHVybiBtX2dseXBocy0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKwor
I2lmICFQTEFURk9STShDT0NPQSkKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRl
TGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBGb250OjpkZWxldGVMYXlvdXQoVGV4dExheW91dCopCit7Cit9CisK
K2Zsb2F0IEZvbnQ6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250
RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3Jp
dGVyIiwKKyAgICAiQXJpYWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hp
biIsCisgICAgIkNvcnNpdmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlh
IFVDQVMiLAorICAgICJHZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAg
ICJIZWx2ZXRpY2EiLAorICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAg
ICJLYWkiLAorICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJN
b25hY28iLAorICAgICJNc2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nh
a2EiLAorICAgICJSYWFuYW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAg
IlRpbWVzIiwKKyAgICAiQXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAg
ICAiQXBwbGUgTGlTdW5nIiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGlj
IiwKKyAgICAiQXBwbGVNeXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVB
IiwKKyAgICAiI1BDTXl1bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBm
YW1pbGllcyB3aGVyZSBhbnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBp
biB0aGUgT1MvMiB0YWJsZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxl
Z2FjeSB3ZWJraXQgYmVoYXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9t
IHRoZSB3aWR0aCBvZiBhICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQg
bnVtYmVyIG9mIE1hYyBmb250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVu
ZGVyaW5nIGFjcm9zcyBwbGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxh
dGZvcm1zLgorYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAorewor
ICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmaXJzdEZhbWlseSgpOworICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKElPUykKKyAgICAvLyBJbnRlcm5hbCBmb250cyBvbiBPUyBYIGFuZCBpT1MgYWxz
byBoYXZlIGFuIGludmFsaWQgZW50cnkgaW4gdGhlIHRhYmxlIGZvciBhdmdDaGFyV2lkdGguCisg
ICAgaWYgKHByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4qIGZvbnRGYW1p
bGllc1dpdGhJbnZhbGlkQ2hhcldpZHRoTWFwID0gMDsKKworICAgIGlmICghZm9udEZhbWlsaWVz
V2l0aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFs
aWRDaGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aCk7ICsraSkKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlk
Q2hhcldpZHRoTWFwLT5hZGQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoW2ldKSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aE1hcC0+Y29udGFpbnMoZmFtaWx5KTsKK30KKworYm9vbCBGb250OjpmYXN0QXZl
cmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKKyAgICBpZiAoc3VjY2VzcykK
KyAgICAgICAgd2lkdGggPSByb3VuZGYocHJpbWFyeUZvbnREYXRhKCkuYXZnQ2hhcldpZHRoKCkp
OyAvLyBGSVhNRTogcHJpbWFyeUZvbnREYXRhKCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmly
c3RGYW1pbHkoKS4KKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9pZCBGb250OjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgdG8gPSAodG8gPT0gLTEg
PyBydW4ubGVuZ3RoKCkgOiB0byk7CisKKyAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKKyAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQorICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKKworICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCisgICAgICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIHRvKTsKKworICAgIHJldHVybiBhZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7Cit9
CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFVz
ZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtl
cm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCisgICAg
aWYgKGNvZGVQYXRoKHJ1bikgIT0gQ29tcGxleCAmJiAoIXR5cGVzZXR0aW5nRmVhdHVyZXMoKSB8
fCBpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkpCisgICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3Np
dGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CisKKyAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0
aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgU3RyaW5nQnVpbGRlciBu
b3JtYWxpemVkOworICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIG5vcm1hbGl6
ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7CisKKyAgICBy
ZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOworfQorCitTdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisK
K1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJuYWwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IHRydWU7CisKK3ZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxk
VXNlU21vb3RoaW5nKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHNob3VsZFVzZVNtb290aGluZzsKK30KKworYm9vbCBGb250Ojpz
aG91bGRVc2VTbW9vdGhpbmcoKQoreworICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OworfQorCit2b2lkIEZvbnQ6OnNldENvZGVQYXRoKENvZGVQYXRoIHApCit7CisgICAgc19jb2Rl
UGF0aCA9IHA7Cit9CisKK0ZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKCkKK3sKKyAgICBy
ZXR1cm4gc19jb2RlUGF0aDsKK30KKwordm9pZCBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdG
ZWF0dXJlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpCit7CisgICAg
c19kZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXM7Cit9CisK
K1R5cGVzZXR0aW5nRmVhdHVyZXMgRm9udDo6ZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMoKQor
eworICAgIHJldHVybiBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworfQorCitGb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAg
aWYgKHNfY29kZVBhdGggIT0gQXV0bykKKyAgICAgICAgcmV0dXJuIHNfY29kZVBhdGg7CisKKyNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAg
ICAgICAgcmV0dXJuIFNpbXBsZTsKKyNlbmRpZgorCisgICAgaWYgKG1fZm9udERlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIG1fZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygp
LT5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gQ29tcGxleDsKKyAgICAKKyAgICBpZiAocnVu
Lmxlbmd0aCgpID4gMSAmJiAhV2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1
cmVzKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICBpZiAoIXJ1bi5jaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsKKworICAgIGlm
IChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisKKyAgICAvLyBTdGFydCBm
cm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28gbWVhc3VyZSB0aGUgY2hh
cmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgorICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQ
YXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKworRm9udDo6Q29kZVBh
dGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBp
biBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90ZSB0aGF0IHdlIAorICAgIC8vIGNhbid0IHNp
bXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9wZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hh
cmFjdGVycworICAgIC8vIGFyZSBub3QgJ2NvbWJpbmluZycsIGJ1dCBzdGlsbCBuZWVkIHRvIGdv
IHRvIHRoZSBjb21wbGV4IHBhdGguCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgbWF5IGFzIHdl
bGwgY29uc2lkZXIgYmluYXJ5IHNlYXJjaCBvdmVyIGEgc29ydGVkCisgICAgLy8gbGlzdCBvZiBy
YW5nZXMuCisgICAgQ29kZVBhdGggcmVzdWx0ID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBVQ2hhciBjID0gY2hhcmFjdGVy
c1tpXTsKKyAgICAgICAgaWYgKGMgPCAweDJFNSkgLy8gVSswMkU1IHRocm91Z2ggVSswMkU5IChN
b2RpZmllciBMZXR0ZXJzIDogVG9uZSBsZXR0ZXJzKSAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyRTkpIAorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDMwMCkgLy8gVSswMzAwIHRocm91Z2ggVSswMzZGIENvbWJpbmlu
ZyBkaWFjcml0aWNhbCBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MzZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMg
PCAweDA1OTEgfHwgYyA9PSAweDA1QkUpIC8vIFUrMDU5MSB0aHJvdWdoIFUrMDVDRiBleGNsdWRp
bmcgVSswNUJFIEhlYnJldyBjb21iaW5pbmcgbWFya3MsIEhlYnJldyBwdW5jdHVhdGlvbiBQYXNl
cSwgU29mIFBhc3VxIGFuZCBOdW4gSGFmdWtoYQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChjIDw9IDB4MDVDRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAg
ICAgIC8vIFUrMDYwMCB0aHJvdWdoIFUrMTA5RiBBcmFiaWMsIFN5cmlhYywgVGhhYW5hLCBOS28s
IFNhbWFyaXRhbiwgTWFuZGFpYywKKyAgICAgICAgLy8gRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3Vy
bXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgCisgICAgICAg
IC8vIE1hbGF5YWxhbSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCisgICAg
ICAgIGlmIChjIDwgMHgwNjAwKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweDEwOUYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICAvLyBV
KzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3VsIEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hv
dWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJlY29tcG9zZTsKKyAgICAgICAgLy8gTW9kZXJuIEtv
cmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9mIHN0ZXAgQSkKKyAgICAgICAg
aWYgKGMgPCAweDExMDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxMUZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAw
eDEzNUQpIC8vIFUrMTM1RCB0aHJvdWdoIFUrMTM1RiBFdGhpb3BpYyBjb21iaW5pbmcgbWFya3MK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEzNUYpCisgICAgICAg
ICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAoYyA8IDB4MTcwMCkgLy8gVSsxNzgw
IHRocm91Z2ggVSsxOEFGIFRhZ2Fsb2csIEhhbnVub28sIEJ1aGlkLCBUYWdoYW53YSxLaG1lciwg
TW9uZ29saWFuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOEFG
KQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5MDAp
IC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1idSAoVW5pY29kZSA0LjApCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOTRGKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweDE5ODApIC8vIFUrMTk4MCB0aHJvdWdoIFUr
MTlERiBOZXcgVGFpIEx1ZQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9
IDB4MTlERikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwg
MHgxQTAwKSAvLyBVKzFBMDAgdGhyb3VnaCBVKzFDRkYgQnVnaW5lc2UsIFRhaSBUaGFtLCBCYWxp
bmVzZSwgQmF0YWssIExlcGNoYSwgVmVkaWMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoYyA8PSAweDFDRkYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAg
ICBpZiAoYyA8IDB4MURDMCkgLy8gVSsxREMwIHRocm91Z2ggVSsxREZGIENvbWluaW5nIGRpYWNy
aXRpY2FsIG1hcmsgc3VwcGxlbWVudAorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChjIDw9IDB4MURGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIC8v
IFUrMUUwMCB0aHJvdWdoIFUrMjAwMCBjaGFyYWN0ZXJzIHdpdGggZGlhY3JpdGljcyBhbmQgc3Rh
Y2tlZCBkaWFjcml0aWNzCisgICAgICAgIGlmIChjIDw9IDB4MjAwMCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3c7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAvLyBVKzIwRDAgdGhyb3VnaCBV
KzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisK
KyAgICAgICAgaWYgKGMgPCAweDJDRUYpIC8vIFUrMkNFRiB0aHJvdWdoIFUrMkNGMSBDb21iaW5p
bmcgbWFya3MgZm9yIENvcHRpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
IDw9IDB4MkNGMSkKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChj
IDwgMHgzMDJBKSAvLyBVKzMwMkEgdGhyb3VnaCBVKzMwMkYgSWRlb2dyYXBoaWMgYW5kIEhhbmd1
bCBUb25lIG1hcmtzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgz
MDJGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPCAweEE2
N0MpIC8vIFUrQTY3QyB0aHJvdWdoIFUrQTY3RCBDb21iaW5pbmcgbWFya3MgZm9yIG9sZCBDeXJp
bGxpYworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4QTY3RCkKKyAg
ICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgIGlmIChjIDwgMHhBNkYwKSAvLyBV
K0E2RjAgdGhyb3VnaCBVK0E2RjEgQ29tYmluaW5nIG1hcmsgZm9yIEJhbXVtCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhBNkYxKQorICAgICAgICAgICAgcmV0dXJu
IENvbXBsZXg7CisKKyAgICAgICAvLyBVK0E4MDAgdGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdz
LXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4dGVuZGVkLAorICAgICAgIC8vIEhhbmd1bCBK
YW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIgRXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRl
aSBNYXllaywKKyAgICAgICAgaWYgKGMgPCAweEE4MDApIAorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjIDw9IDB4QUJGRikKKyAgICAgICAgICAgIHJldHVybiBDb21wbGV4Owor
CisgICAgICAgIGlmIChjIDwgMHhEN0IwKSAvLyBVK0Q3QjAgdGhyb3VnaCBVK0Q3RkYgSGFuZ3Vs
IEphbW8gRXh0LiBCCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhE
N0ZGKQorICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CisKKyAgICAgICAgaWYgKGMgPD0gMHhE
QkZGKSB7CisgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZQorCisgICAgICAgICAgICBpZiAo
aSA9PSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBV
Q2hhciBuZXh0ID0gY2hhcmFjdGVyc1srK2ldOworICAgICAgICAgICAgaWYgKCFVMTZfSVNfVFJB
SUwobmV4dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFVDaGFy
MzIgc3VwcGxlbWVudGFyeUNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBuZXh0
KTsKKworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweDFGMUU2KSAv
LyBVKzFGMUU2IHRocm91Z2ggVSsxRjFGRiBSZWdpb25hbCBJbmRpY2F0b3IgU3ltYm9scworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFy
YWN0ZXIgPD0gMHgxRjFGRikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAg
ICAgICAgICAgaWYgKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIgPCAweEUwMTAwKSAvLyBVK0UwMTAw
IHRocm91Z2ggVStFMDFFRiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMuCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNoYXJhY3RlciA8
PSAweEUwMUVGKQorICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV4OworCisgICAgICAgICAg
ICAvLyBGSVhNRTogQ2hlY2sgZm9yIEJyYWhtaSAoVSsxMTAwMCBibG9jayksIEthaXRoaSAoVSsx
MTA4MCBibG9jaykgYW5kIG90aGVyIGNvbXBsZXggc2NyaXB0cworICAgICAgICAgICAgLy8gaW4g
cGxhbmUgMSBvciBoaWdoZXIuCisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGMgPCAweEZFMDApIC8vIFUrRkUwMCB0aHJvdWdoIFUrRkUwRiBVbmljb2Rl
IHZhcmlhdGlvbiBzZWxlY3RvcnMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEZFMEYpCisgICAgICAgICAgICByZXR1cm4gQ29tcGxleDsKKworICAgICAgICBpZiAo
YyA8IDB4RkUyMCkgLy8gVStGRTIwIHRocm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtz
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHhGRTJGKQorICAgICAg
ICAgICAgcmV0dXJuIENvbXBsZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jv
b2wgRm9udDo6aXNDSktJZGVvZ3JhcGgoVUNoYXIzMiBjKQoreworICAgIC8vIFRoZSBiYXNpYyBD
SksgVW5pZmllZCBJZGVvZ3JhcGhzIGJsb2NrLgorICAgIGlmIChjID49IDB4NEUwMCAmJiBjIDw9
IDB4OUZGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQg
SWRlb2dyYXBocyBFeHRlbnNpb24gQS4KKyAgICBpZiAoYyA+PSAweDM0MDAgJiYgYyA8PSAweDRE
QkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBSYWRpY2FscyBTdXBw
bGVtZW50LgorICAgIGlmIChjID49IDB4MkU4MCAmJiBjIDw9IDB4MkVGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gS2FuZ3hpIFJhZGljYWxzLgorICAgIGlmIChjID49IDB4
MkYwMCAmJiBjIDw9IDB4MkZERikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
Q0pLIFN0cm9rZXMuCisgICAgaWYgKGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUVGKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhz
LgorICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQi4KKyAg
ICBpZiAoYyA+PSAweDIwMDAwICYmIGMgPD0gMHgyQTZERikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMuCisg
ICAgaWYgKGMgPj0gMHgyQTcwMCAmJiBjIDw9IDB4MkI3M0YpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQuCisgICAg
aWYgKGMgPj0gMHgyQjc0MCAmJiBjIDw9IDB4MkI4MUYpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudC4KKyAg
ICBpZiAoYyA+PSAweDJGODAwICYmIGMgPD0gMHgyRkExRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChVQ2hhcjMyIGMpCit7CisgICAgLy8gMHgyQzcgQ2Fyb24sIE1hbmRhcmluIENoaW5lc2Ug
M3JkIFRvbmUKKyAgICAvLyAweDJDQSBNb2RpZmllciBMZXR0ZXIgQWN1dGUgQWNjZW50LCBNYW5k
YXJpbiBDaGluZXNlIDJuZCBUb25lCisgICAgLy8gMHgyQ0IgTW9kaWZpZXIgTGV0dGVyIEdyYXZl
IEFjY2VzcywgTWFuZGFyaW4gQ2hpbmVzZSA0dGggVG9uZSAKKyAgICAvLyAweDJEOSBEb3QgQWJv
dmUsIE1hbmRhcmluIENoaW5lc2UgNXRoIFRvbmUgCisgICAgaWYgKChjID09IDB4MkM3KSB8fCAo
YyA9PSAweDJDQSkgfHwgKGMgPT0gMHgyQ0IpIHx8IChjID09IDB4MkQ5KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0gMHgyMDIwKSB8fCAoYyA9PSAweDIwMjEpIHx8IChj
ID09IDB4MjAzMCkgfHwgKGMgPT0gMHgyMDNCKSB8fCAoYyA9PSAweDIwM0MpCisgICAgICAgIHx8
IChjID09IDB4MjA0MikgfHwgKGMgPT0gMHgyMDQ3KSB8fCAoYyA9PSAweDIwNDgpIHx8IChjID09
IDB4MjA0OSkgfHwgKGMgPT0gMHgyMDUxKQorICAgICAgICB8fCAoYyA9PSAweDIwREQpIHx8IChj
ID09IDB4MjBERSkgfHwgKGMgPT0gMHgyMTAwKSB8fCAoYyA9PSAweDIxMDMpIHx8IChjID09IDB4
MjEwNSkKKyAgICAgICAgfHwgKGMgPT0gMHgyMTA5KSB8fCAoYyA9PSAweDIxMEEpIHx8IChjID09
IDB4MjExMykgfHwgKGMgPT0gMHgyMTE2KSB8fCAoYyA9PSAweDIxMjEpCisgICAgICAgIHx8IChj
ID09IDB4MjEyQikgfHwgKGMgPT0gMHgyMTNCKSB8fCAoYyA9PSAweDIxNTApIHx8IChjID09IDB4
MjE1MSkgfHwgKGMgPT0gMHgyMTUyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YyA+PSAweDIxNTYgJiYgYyA8PSAweDIxNUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGMgPj0gMHgyMTYwICYmIGMgPD0gMHgyMTZCKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChjID49IDB4MjE3MCAmJiBjIDw9IDB4MjE3QikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoKGMgPT0gMHgyMTdGKSB8fCAoYyA9PSAweDIxODkpIHx8IChjID09IDB4MjMw
NykgfHwgKGMgPT0gMHgyMzEyKSB8fCAoYyA9PSAweDIzQkUpIHx8IChjID09IDB4MjNCRikpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyM0MwICYmIGMgPD0gMHgyM0ND
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9PSAweDIzQ0UpIHx8IChjID09
IDB4MjQyMykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNDYwICYm
IGMgPD0gMHgyNDkyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID49IDB4MjQ5
QyAmJiBjIDw9IDB4MjRGRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGMgPT0g
MHgyNUEwKSB8fCAoYyA9PSAweDI1QTEpIHx8IChjID09IDB4MjVBMikgfHwgKGMgPT0gMHgyNUFB
KSB8fCAoYyA9PSAweDI1QUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoYyA9
PSAweDI1QjEpIHx8IChjID09IDB4MjVCMikgfHwgKGMgPT0gMHgyNUIzKSB8fCAoYyA9PSAweDI1
QjYpIHx8IChjID09IDB4MjVCNykgfHwgKGMgPT0gMHgyNUJDKSB8fCAoYyA9PSAweDI1QkQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoKGMgPT0gMHgyNUMwKSB8fCAoYyA9
PSAweDI1QzEpIHx8IChjID09IDB4MjVDNikgfHwgKGMgPT0gMHgyNUM3KSB8fCAoYyA9PSAweDI1
QzkpIHx8IChjID09IDB4MjVDQikgfHwgKGMgPT0gMHgyNUNDKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYyA+PSAweDI1Q0UgJiYgYyA8PSAweDI1RDMpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGMgPj0gMHgyNUUyICYmIGMgPD0gMHgyNUU2KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjID09IDB4MjVFRikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYyA+PSAweDI2MDAgJiYgYyA8PSAweDI2MDMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKChjID09IDB4MjYwNSkgfHwgKGMgPT0gMHgyNjA2KSB8fCAoYyA9PSAw
eDI2MEUpIHx8IChjID09IDB4MjYxNikgfHwgKGMgPT0gMHgyNjE3KSB8fCAoYyA9PSAweDI2NDAp
IHx8IChjID09IDB4MjY0MikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgyNjYwICYmIGMgPD0gMHgyNjZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4MjY3MiAmJiBjIDw9IDB4MjY3RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoKGMgPT0gMHgyNkEwKSB8fCAoYyA9PSAweDI2QkQpIHx8IChjID09IDB4MjZCRSkgfHwgKGMg
PT0gMHgyNzEzKSB8fCAoYyA9PSAweDI3MUEpIHx8IChjID09IDB4MjczRikgfHwgKGMgPT0gMHgy
NzQwKSB8fCAoYyA9PSAweDI3NTYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Mjc3NiAmJiBjIDw9IDB4Mjc3RikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoYyA9PSAweDJCMUEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWRlb2dyYXBo
aWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycy4KKyAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAw
eDJGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIENKSyBTeW1ib2xzIGFu
ZCBQdW5jdHVhdGlvbiwgZXhjbHVkaW5nIDB4MzAzMC4KKyAgICBpZiAoYyA+PSAweDMwMDAgJiYg
YyA8IDB4MzAzMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYyA+IDB4MzAzMCAm
JiBjIDw9IDB4MzAzRikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIaXJhZ2FuYQor
ICAgIGlmIChjID49IDB4MzA0MCAmJiBjIDw9IDB4MzA5RikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBLYXRha2FuYSAKKyAgICBpZiAoYyA+PSAweDMwQTAgJiYgYyA8PSAweDMwRkYp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQm9wb21vZm8KKyAgICBpZiAoYyA+PSAw
eDMxMDAgJiYgYyA8PSAweDMxMkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMg
Pj0gMHgzMTkwICYmIGMgPD0gMHgzMTlGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEJvcG9tb2ZvIEV4dGVuZGVkCisgICAgaWYgKGMgPj0gMHgzMUEwICYmIGMgPD0gMHgzMUJGKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQg
TW9udGhzLgorICAgIGlmIChjID49IDB4MzIwMCAmJiBjIDw9IDB4MzJGRikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gQ0pLIENvbXBhdGliaWxpdHkuCisgICAgaWYgKGMgPj0g
MHgzMzAwICYmIGMgPD0gMHgzM0ZGKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
ID49IDB4Rjg2MCAmJiBjIDw9IDB4Rjg2MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcy4KKyAgICBpZiAoYyA+PSAweEZFMzAgJiYgYyA8PSAw
eEZFNEYpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkUxMCkgfHwg
KGMgPT0gMHhGRTExKSB8fCAoYyA9PSAweEZFMTIpIHx8IChjID09IDB4RkUxOSkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKChjID09IDB4RkYwRCkgfHwgKGMgPT0gMHhGRjFCKSB8
fCAoYyA9PSAweEZGMUMpIHx8IChjID09IDB4RkYxRSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCisgICAgLy8gVXN1YWxseSBv
bmx5IHVzZWQgaW4gQ0pLCisgICAgaWYgKGMgPj0gMHhGRjAwICYmIGMgPD0gMHhGRkVGKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtb2ppLgorICAgIGlmIChjID09IDB4MUYxMDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjExMCAmJiBjIDw9IDB4
MUYxMjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjEzMCAmJiBj
IDw9IDB4MUYxNDkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0gMHgxRjE1
MCAmJiBjIDw9IDB4MUYxNjkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGMgPj0g
MHgxRjE3MCAmJiBjIDw9IDB4MUYxODkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KGMgPj0gMHgxRjIwMCAmJiBjIDw9IDB4MUY2QzUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOworfQorCit1bnNpZ25lZCBGb250OjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9u
KQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IExUUikg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tp
IC0gMV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgc3RhdGljIGJvb2wg
ZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX0xFQUQo
Y2hhcmFjdGVyKSAmJiBpICsgMSA8IGxlbmd0aCAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1tp
ICsgMV0pKSB7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGNoYXJhY3RlciwgY2hhcmFjdGVyc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYm
IGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlm
ICghaXNBZnRlckV4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKGNoYXJh
Y3RlcikgJiYgaSA+IDEgJiYgVTE2X0lTX0xFQUQoY2hhcmFjdGVyc1tpIC0gMl0pKSB7CisgICAg
ICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNb
aSAtIDJdLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZnRlckV4cGFu
c2lvbikKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KKwor
dW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3
JiBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKK3sKKyAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCks
IHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNp
b24pOworfQorCitib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQor
eworICAgIGlmIChVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfWl9NQVNLIHwgVV9HQ19DTl9NQVNL
IHwgVV9HQ19DQ19NQVNLIHwgVV9HQ19DRl9NQVNLKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQWRkaXRpb25hbCB3b3JkLXNlcGFyYXRvciBjaGFyYWN0ZXJzIGxpc3RlZCBpbiBD
U1MgVGV4dCBMZXZlbCAzIEVkaXRvcidzIERyYWZ0IDMgTm92ZW1iZXIgMjAxMC4KKyAgICBpZiAo
YyA9PSBldGhpb3BpY1dvcmRzcGFjZSB8fCBjID09IGFlZ2VhbldvcmRTZXBhcmF0b3JMaW5lIHx8
IGMgPT0gYWVnZWFuV29yZFNlcGFyYXRvckRvdAorICAgICAgICB8fCBjID09IHVnYXJpdGljV29y
ZERpdmlkZXIgfHwgYyA9PSB0aWJldGFuTWFya0ludGVyc3lsbGFiaWNUc2hlZyB8fCBjID09IHRp
YmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKTsKK30KKyAgICAKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVU
eXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQoreworICAgIC8vIEluIGdlbmVyYWws
IHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJzLiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJz
IG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRvIHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCisgICAg
Ly8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFj
dGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5k
ZXgpOworCisgICAgaWYgKG9mZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjpub09mZnNldCkg
eworICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhp
cyBnbHlwaC4gQmFpbC4KKyAgICAgICAgcmV0dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOworICAgIH0KKyAgICAKKyAgICBpZiAodGV4
dFJ1bi5pczhCaXQoKSkKKyAgICAgICAgYmFzZUNoYXJhY3RlciA9IHRleHRSdW4uY2hhcmFjdGVy
czgoKVtvZmZzZXRJblN0cmluZ107CisgICAgZWxzZQorICAgICAgICBVMTZfTkVYVCh0ZXh0UnVu
LmNoYXJhY3RlcnMxNigpLCBvZmZzZXRJblN0cmluZywgdGV4dFJ1bi5sZW5ndGgoKSwgYmFzZUNo
YXJhY3Rlcik7CisgICAgCisgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIHdpdGggVUNIQVJf
SURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ugb3IgS29yZWFuIGNv
ZGVwb2ludHMuCisgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVuaWNvZGUgYWxsb2Nh
dGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgVUJsb2NrQ29kZSBibG9ja0NvZGUg
PSB1YmxvY2tfZ2V0Q29kZShiYXNlQ2hhcmFjdGVyKTsKKyAgICBzd2l0Y2ggKGJsb2NrQ29kZSkg
eworICAgIGNhc2UgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJM
T0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NF
RF9DSktfTEVUVEVSU19BTkRfTU9OVEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01QQVRJQklM
SVRZOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0E6
CisgICAgY2FzZSBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUzoKKyAgICBjYXNlIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTOgorICAgIGNhc2UgVUJMT0NLX0NKS19DT01Q
QVRJQklMSVRZX0ZPUk1TOgorICAgIGNhc2UgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNf
RVhURU5TSU9OX0I6CisgICAgY2FzZSBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBI
U19TVVBQTEVNRU5UOgorICAgIGNhc2UgVUJMT0NLX0NKS19TVFJPS0VTOgorICAgIGNhc2UgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0M6CisgICAgY2FzZSBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRDoKKyAgICBjYXNlIFVCTE9DS19JREVP
R1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTOgorICAgIGNhc2UgVUJMT0NLX0xJTkVBUl9C
X0lERU9HUkFNUzoKKyAgICBjYXNlIFVCTE9DS19FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVN
RU5UOgorICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgorICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5B
OgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPOgorICAgIGNhc2UgVUJMT0NLX0JPUE9NT0ZPX0VY
VEVOREVEOgorICAgIGNhc2UgVUJMT0NLX0hBTkdVTF9KQU1POgorICAgIGNhc2UgVUJMT0NLX0hB
TkdVTF9DT01QQVRJQklMSVRZX0pBTU86CisgICAgY2FzZSBVQkxPQ0tfSEFOR1VMX1NZTExBQkxF
UzoKKyAgICBjYXNlIFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9BOgorICAgIGNhc2UgVUJM
T0NLX0hBTkdVTF9KQU1PX0VYVEVOREVEX0I6CisgICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6RHJhd092ZXJHbHlwaDsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5
cGU6OlNraXBEZXNjZW5kZXJzOworICAgIH0KK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gYWxsb3cgY29tcGlsYXRpb24gb2YgT3duUHRyPFRleHRMYXlvdXQ+
IGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBUZXh0TGF5b3V0
IGNsYXNzIGRlZmluaXRpb24KIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogewotICAgIFdlYkNvcmU6
OkZvbnQ6OmRlbGV0ZUxheW91dChwdHIpOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkZWxl
dGVMYXlvdXQocHRyKTsKIH0KIAogfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAot
Y29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7
Citjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAxIC8qPyovLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsCkBAIC05OCwxNSArOTgsMTUgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5T
aWduRm9yRmFtaQogICAgIHJldHVybiBzZXQtPmNvbnRhaW5zKGZhbWlseSk7CiB9CiAKLUZvbnQ6
OkNvZGVQYXRoIEZvbnQ6OnNfY29kZVBhdGggPSBBdXRvOworRm9udENhc2NhZGU6OkNvZGVQYXRo
IEZvbnRDYXNjYWRlOjpzX2NvZGVQYXRoID0gQXV0bzsKIAotVHlwZXNldHRpbmdGZWF0dXJlcyBG
b250OjpzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gMDsKK1R5cGVzZXR0aW5nRmVhdHVy
ZXMgRm9udENhc2NhZGU6OnNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXMgPSAwOwogCiAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRm9udCBJbXBsZW1lbnRhdGlv
biAoQ3Jvc3MtUGxhdGZvcm0gUG9ydGlvbikKKy8vIEZvbnRDYXNjYWRlIEltcGxlbWVudGF0aW9u
IChDcm9zcy1QbGF0Zm9ybSBQb3J0aW9uKQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIAotRm9udDo6Rm9udCgpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogICAg
IDogbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTE0LDcgKzExNCw3IEBAIEZvbnQ6OkZv
bnQoKQogewogfQogCi1Gb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKQorRm9udENhc2NhZGU6OkZvbnRDYXNj
YWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0
IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRl
clNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcp
CkBAIC0xMjQsNyArMTI0LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZk
LCBmbAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCitGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiAgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udERhdGEpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFj
aW5nKDApCkBAIC0xNDMsNyArMTQzLDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250OjpGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9u
dFNlbGVjdG9yKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
ICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udEQKIH0K
ICNlbmRpZgogCi1Gb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQorRm9udENhc2NhZGU6OkZv
bnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0
aW9uKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlw
aHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFjaW5nKQpAQCAtMTY5
LDcgKzE2OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiB7CiB9CiAKLUZvbnQm
IEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKK0ZvbnRDYXNjYWRlJiBGb250Q2Fz
Y2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKIHsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwogICAgIG1fZ2x5cGhzID0gb3Ro
ZXIubV9nbHlwaHM7CkBAIC0xODAsNyArMTgwLDcgQEAgRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBGb250OjpvcGVy
YXRvcj09KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0
b3I9PShjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGlu
Z0N1c3RvbUZvbnRzKCkgfHwgb3RoZXIuaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzIzLDE0ICszMjMsMTQgQEAgc3RhdGljIFJlZjxGb250R2x5cGhz
PiByZXRyaWV2ZU9yQWRkQ2FjaAogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKLXZvaWQgRm9udDo6
dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0Cit2b2lk
IEZvbnRDYXNjYWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3Rv
cikgY29uc3QKIHsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhz
KG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1p
bHkoKSk7CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVh
dHVyZXMoKTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzUxLDcgKzM1MSw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY28KICAgICByZXR1cm4gZHJhd0Nv
bXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAg
ICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
cyhHcmFwaGljc0NvbgogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNv
bnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQgRm9udDo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBG
b250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAg
ICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIGZs
b2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1mbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKGlzRHJhd25XaXRo
U1ZHRm9udChydW4pKQpAQCAtNDE1LDcgKzQxNSw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAotR2x5cGhEYXRh
IEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK0dseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7CiAgICAg
ICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCkpIHsKQEAgLTQzNiwxNiArNDM2LDE2IEBAIEdseXBoRGF0YSBGb250Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUMKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVBhc3NP
d25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqLCBmbG9hdCwg
Ym9vbCkgY29uc3QKK1Bhc3NPd25QdHI8VGV4dExheW91dD4gRm9udENhc2NhZGU6OmNyZWF0ZUxh
eW91dChSZW5kZXJUZXh0KiwgZmxvYXQsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgRm9udDo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQordm9pZCBGb250
Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdXQqKQogewogfQogCi1mbG9hdCBGb250Ojp3
aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC00OTYsNyArNDk2LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGllc1dpdGhJbnZhbAogLy8gZnJvbSB0aGUgd2lk
dGggb2YgYSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBv
ZiBNYWMgZm9udHMsCiAvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBh
Y3Jvc3MgcGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgogLy8gYWxsIHBsYXRmb3Jtcy4K
LWJvb2wgRm9udDo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgQXRvbWljU3Ry
aW5nIGZhbWlseSA9IGZpcnN0RmFtaWx5KCk7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCkBA
IC01MjAsNyArNTIwLDcgQEAgYm9vbCBGb250OjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
bwogICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRh
aW5zKGZhbWlseSk7CiB9CiAKLWJvb2wgRm9udDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWls
YWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNo
YXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKIHsKICAgICBib29sIHN1Y2Nl
c3MgPSBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKTsKICAgICBpZiAoc3VjY2VzcykKQEAgLTUy
OCw3ICs1MjgsNyBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFiCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0
aCgpIDogdG8pOwogCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChjbwogICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CiB9CiAKLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4ICYmICgh
dHlwZXNldHRpbmdGZWF0dXJlcygpIHx8IGlzRHJhd25XaXRoU1ZHRm9udChydW4pKSkKQEAgLTU1
OSw1NSArNTU5LDU1IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlc0ludGUK
ICAgICBub3JtYWxpemVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBub3JtYWxpemVkLmFwcGVuZChG
b250Ojpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICBub3JtYWxpemVk
LmFwcGVuZChGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAog
ICAgIHJldHVybiBub3JtYWxpemVkLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3Jt
YWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0
cmluZyBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFs
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVN0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZyBGb250Q2Fz
Y2FkZTo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVl
OwogCi12b2lkIEZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3VsZFVzZVNtb290
aGluZykKK3ZvaWQgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3Vs
ZFVzZVNtb290aGluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSBzaG91bGRVc2VTbW9vdGhpbmc7CiB9CiAKLWJvb2wgRm9udDo6
c2hvdWxkVXNlU21vb3RoaW5nKCkKK2Jvb2wgRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGlu
ZygpCiB7CiAgICAgcmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAKLXZvaWQgRm9u
dDo6c2V0Q29kZVBhdGgoQ29kZVBhdGggcCkKK3ZvaWQgRm9udENhc2NhZGU6OnNldENvZGVQYXRo
KENvZGVQYXRoIHApCiB7CiAgICAgc19jb2RlUGF0aCA9IHA7CiB9CiAKLUZvbnQ6OkNvZGVQYXRo
IEZvbnQ6OmNvZGVQYXRoKCkKK0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29k
ZVBhdGgoKQogewogICAgIHJldHVybiBzX2NvZGVQYXRoOwogfQogCi12b2lkIEZvbnQ6OnNldERl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykKK3ZvaWQgRm9udENhc2NhZGU6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVz
KFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykKIHsKICAgICBzX2RlZmF1
bHRUeXBlc2V0dGluZ0ZlYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlczsKIH0KIAotVHlwZXNl
dHRpbmdGZWF0dXJlcyBGb250OjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCitUeXBlc2V0
dGluZ0ZlYXR1cmVzIEZvbnRDYXNjYWRlOjpkZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcygpCiB7
CiAgICAgcmV0dXJuIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiB9CiAKLUZvbnQ6OkNv
ZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK0ZvbnRDYXNj
YWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBj
b25zdAogewogICAgIGlmIChzX2NvZGVQYXRoICE9IEF1dG8pCiAgICAgICAgIHJldHVybiBzX2Nv
ZGVQYXRoOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRo
KGNvbnN0IFRleHQKICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFj
dGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiB9CiAKLUZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikK
K0ZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQogewogICAgIC8vIEZJWE1F
OiBTaG91bGQgdXNlIGEgVW5pY29kZVNldCBpbiBwb3J0cyB3aGVyZSBJQ1UgaXMgdXNlZC4gTm90
ZSB0aGF0IHdlIAogICAgIC8vIGNhbid0IHNpbXBseSB1c2UgVW5pY29kZUNoYXJhY3RlciBQcm9w
ZXJ0eS9jbGFzcyBiZWNhdXNlIHNvbWUgY2hhcmFjdGVycwpAQCAtNzM0LDggKzczNCw4IEBAIEZv
bnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAKICAgICAgICAgaWYgKGMgPD0g
MHhBNkYxKQogICAgICAgICAgICAgcmV0dXJuIENvbXBsZXg7CiAKLSAgICAgICAvLyBVK0E4MDAg
dGhyb3VnaCBVK0FCRkYgTmFncmksIFBoYWdzLXBhLCBTYXVyYXNodHJhLCBEZXZhbmFnYXJpIEV4
dGVuZGVkLAotICAgICAgIC8vIEhhbmd1bCBKYW1vIEV4dC4gQSwgSmF2YW5lc2UsIE15YW5tYXIg
RXh0ZW5kZWQgQSwgVGFpIFZpZXQsIE1lZXRlaSBNYXllaywKKyAgICAgICAgLy8gVStBODAwIHRo
cm91Z2ggVStBQkZGIE5hZ3JpLCBQaGFncy1wYSwgU2F1cmFzaHRyYSwgRGV2YW5hZ2FyaSBFeHRl
bmRlZCwKKyAgICAgICAgLy8gSGFuZ3VsIEphbW8gRXh0LiBBLCBKYXZhbmVzZSwgTXlhbm1hciBF
eHRlbmRlZCBBLCBUYWkgVmlldCwgTWVldGVpIE1heWVrLAogICAgICAgICBpZiAoYyA8IDB4QTgw
MCkgCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHhBQkZGKQpAQCAt
Nzg3LDcgKzc4Nyw3IEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoKFVDaGFy
MzIgYykKK2Jvb2wgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKIHsKICAg
ICAvLyBUaGUgYmFzaWMgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBibG9jay4KICAgICBpZiAoYyA+
PSAweDRFMDAgJiYgYyA8PSAweDlGRkYpCkBAIC04MTIsMTEgKzgxMiwxMSBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoKFVDaGFyMzIgYykKICAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVv
Z3JhcGhzLgogICAgIGlmIChjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRikKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lv
biBCLgogICAgIGlmIChjID49IDB4MjAwMDAgJiYgYyA8PSAweDJBNkRGKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVu
c2lvbiBDLgogICAgIGlmIChjID49IDB4MkE3MDAgJiYgYyA8PSAweDJCNzNGKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBo
KFVDaGFyMzIgYykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRm9udDo6aXNDSktJZGVv
Z3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCitib29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKFVDaGFyMzIgYykKIHsKICAgICAvLyAweDJDNyBDYXJvbiwgTWFuZGFyaW4gQ2hp
bmVzZSAzcmQgVG9uZQogICAgIC8vIDB4MkNBIE1vZGlmaWVyIExldHRlciBBY3V0ZSBBY2NlbnQs
IE1hbmRhcmluIENoaW5lc2UgMm5kIFRvbmUKQEAgLTkxNCw3ICs5MTQsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gSWRlb2dyYXBoaWMgRGVzY3Jp
cHRpb24gQ2hhcmFjdGVycy4KICAgICBpZiAoYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkYpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0
dWF0aW9uLCBleGNsdWRpbmcgMHgzMDMwLgogICAgIGlmIChjID49IDB4MzAwMCAmJiBjIDwgMHgz
MDMwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0MCw3ICs5NDAsNyBAQCBib29sIEZvbnQ6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgLy8gQm9wb21vZm8gRXh0ZW5kZWQK
ICAgICBpZiAoYyA+PSAweDMxQTAgJiYgYyA8PSAweDMxQkYpCiAgICAgICAgIHJldHVybiB0cnVl
OwotIAorCiAgICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocy4KICAgICBpZiAo
YyA+PSAweDMyMDAgJiYgYyA8PSAweDMyRkYpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTg5
LDcgKzk4OSw3IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAg
ICByZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
Cit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHVu
c2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CkBAIC0xMDYyLDE0ICsxMDYyLDE0IEBAIHVuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIEZvbnQ6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit1bnNpZ25lZCBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikK
IHsKICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmlu
Z1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgcmV0dXJu
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMx
NigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwog
fQogCi1ib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQorYm9vbCBG
b250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiB7CiAgICAgaWYg
KFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19aX01BU0sgfCBVX0dDX0NOX01BU0sgfCBVX0dDX0ND
X01BU0sgfCBVX0dDX0NGX01BU0spKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDgyLDcg
KzEwODIsNyBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9udDo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAorYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewogICAg
IHJldHVybiBtX2dseXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCisKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
KyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250R2x5cGhzLmgiCisj
aW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworLy8gIlgxMS9YLmgiIGRlZmluZXMgQ29t
cGxleCB0byAwIGFuZCBjb25mbGljdHMKKy8vIHdpdGggQ29tcGxleCB2YWx1ZSBpbiBDb2RlUGF0
aCBlbnVtLgorI2lmZGVmIENvbXBsZXgKKyN1bmRlZiBDb21wbGV4CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgRm9udERhdGE7CitjbGFzcyBGb250TWV0cmljczsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CitjbGFzcyBGb250U2VsZWN0b3I7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIExheW91dFJlY3Q7CitjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgVGV4
dExheW91dDsKK2NsYXNzIFRleHRSdW47CisKK3N0cnVjdCBHbHlwaERhdGE7CisKK3N0cnVjdCBH
bHlwaE92ZXJmbG93IHsKKyAgICBHbHlwaE92ZXJmbG93KCkKKyAgICAgICAgOiBsZWZ0KDApCisg
ICAgICAgICwgcmlnaHQoMCkKKyAgICAgICAgLCB0b3AoMCkKKyAgICAgICAgLCBib3R0b20oMCkK
KyAgICAgICAgLCBjb21wdXRlQm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhbGVmdCAmJiAhcmlnaHQg
JiYgIXRvcCAmJiAhYm90dG9tOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGV4dGVuZFRvKGNv
bnN0IEdseXBoT3ZlcmZsb3cmIG90aGVyKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4
KGxlZnQsIG90aGVyLmxlZnQpOworICAgICAgICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCBvdGhl
ci5yaWdodCk7CisgICAgICAgIHRvcCA9IHN0ZDo6bWF4KHRvcCwgb3RoZXIudG9wKTsKKyAgICAg
ICAgYm90dG9tID0gc3RkOjptYXgoYm90dG9tLCBvdGhlci5ib3R0b20pOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHbHlwaE92ZXJmbG93JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBsZWZ0ICE9IG90aGVyLmxlZnQgfHwgcmlnaHQgIT0gb3RoZXIucmlnaHQgfHwg
dG9wICE9IG90aGVyLnRvcCB8fCBib3R0b20gIT0gb3RoZXIuYm90dG9tOworICAgIH0KKworICAg
IGludCBsZWZ0OworICAgIGludCByaWdodDsKKyAgICBpbnQgdG9wOworICAgIGludCBib3R0b207
CisgICAgYm9vbCBjb21wdXRlQm91bmRzOworfTsKKworY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xh
dG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEdseXBoVW5kZXJsaW5lVHlwZSB7U2tpcERl
c2NlbmRlcnMsIFNraXBHbHlwaCwgRHJhd092ZXJHbHlwaH07CisgICAgdmlydHVhbCBib29sIGNv
bnRhaW5zTW9yZVBhdGhzKCkgPSAwOworICAgIHZpcnR1YWwgUGF0aCBwYXRoKCkgPSAwOworICAg
IHZpcnR1YWwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZXh0ZW50cygpID0gMDsKKyAgICB2aXJ0
dWFsIEdseXBoVW5kZXJsaW5lVHlwZSB1bmRlcmxpbmVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhZHZhbmNlKCkgPSAwOworICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigp
IHsgfQorfTsKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBp
bmRleCk7CisKK2NsYXNzIEZvbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworI2VuZGlmCisgICAgfkZvbnQo
KTsKKworICAgIEZvbnQoY29uc3QgRm9udCYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQmIG9w
ZXJhdG9yPShjb25zdCBGb250Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b250JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb247IH0KKworICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBm
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CisgICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CisKKyAg
ICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OworCisgICAgZW51
bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVz
ZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworCisgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBm
bG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91
dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7CisgICAgc3RhdGlj
IGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworCisgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisKKyAgICBib29sIGlzU21hbGxDYXBzKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0KKworICAgIGZs
b2F0IHdvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV93b3JkU3BhY2luZzsgfQorICAgIGZs
b2F0IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xldHRlclNwYWNpbmc7IH0KKyAg
ICB2b2lkIHNldFdvcmRTcGFjaW5nKGZsb2F0IHMpIHsgbV93b3JkU3BhY2luZyA9IHM7IH0KKyAg
ICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNwYWNpbmcgPSBzOyB9
CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzUHJpbnRlckZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9Cisg
ICAgCisgICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKTsgfQorCisgICAgVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZXNldHRpbmdGZWF0dXJlcz4obV90eXBlc2V0dGluZ0ZlYXR1cmVzKTsgfQorCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0KKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CisKKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CisgICAgRm9udFdlaWdodCB3
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQorICAg
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KKworICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQorCisgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnRE
YXRhKCkuZm9udE1ldHJpY3MoKTsgfQorICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5Rm9udERhdGEoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0K
KyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBTaW1wbGVGb250RGF0YSYsIHVuc2lnbmVkIHRhYlNp
emUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0
YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZv
bnREYXRhKCksIHRhYlNpemUsIHBvc2l0aW9uKTsgfQorICAgIGJvb2wgaGFzVmFsaWRBdmVyYWdl
Q2hhcldpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBmYXN0QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxh
YmxlKGZsb2F0ICZ3aWR0aCkgY29uc3Q7IC8vIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCisKKyAg
ICBpbnQgZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAg
IGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisKKyAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhKCkgY29uc3Q7CisgICAgY29u
c3QgRm9udFJhbmdlcyYgZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OworICAgIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBj
b25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7
CisgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKKworICAg
IC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVuY3Rp
b24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBvcHBv
cnR1bml0eQorICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNlbnQu
IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21l
bnQoKSBjb21wZW5zYXRlcworICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUgcmV0
dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2YgYSBs
aW5lLgorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29s
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsK
KworICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhH
bHlwaE92ZXJmbG93IH07CisgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNv
bnN0OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQorICAgIHN0YXRpYyBDb2RlUGF0aCBj
aGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKKworICAg
IGJvb2wgcHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4
dEVtcGhhc2lzIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZh
bmNlLgorICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Cisg
ICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKworICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEdseXBoRGF0YSYpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgY2FuUmV0dXJuRmFsbGJh
Y2tGb250c0ZvckNvbXBsZXhUZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwg
aW4tc3RyZWFtIGFkdmFuY2UuCisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERp
cmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbik7CisgICAgc3RhdGljIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOworCisgICAgZnJpZW5k
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDsKKworcHVibGljOgorI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQor
ICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgJiYgbV9sZXR0ZXJT
cGFjaW5nID09IG90aGVyLm1fbGV0dGVyU3BhY2luZworICAgICAgICAgICAgJiYgbV93b3JkU3Bh
Y2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVXNl
ZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIGRpZmZlcmVudCBmb250IHJlbmRlcmluZyBjb2RlIHBhdGhz
LgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvZGVQYXRoKENvZGVQYXRoKTsK
KyAgICBzdGF0aWMgQ29kZVBhdGggY29kZVBhdGgoKTsKKyAgICBzdGF0aWMgQ29kZVBhdGggc19j
b2RlUGF0aDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUeXBl
c2V0dGluZ0ZlYXR1cmVzKFR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgIHN0YXRpYyBUeXBlc2V0
dGluZ0ZlYXR1cmVzIGRlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdWludDhfdCBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl07CisgICAgc3Rh
dGljIGJvb2wgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoYyAmIH4weEZGKSAmJiBzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlW2Nd
OworICAgIH0KKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMg
PT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KKyAgICBzdGF0aWMg
Ym9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9X
aWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBk
OyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8
IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAm
JiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHpl
cm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9
CisgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworCisg
ICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHNwYWNlOworCisgICAgICAgIGlmICh0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFj
dGVyKSkKKyAgICAgICAgICAgIHJldHVybiB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAgICByZXR1
cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2Vz
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1h
bGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBib29sIHVz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1ll
blN5bWJvbDsgfQorICAgIEZvbnRHbHlwaHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0OworCisgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBjb21wdXRlVHlwZXNldHRpbmdGZWF0
dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVy
aW5nTW9kZSA9IG1fZm9udERlc2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7CisgICAgICAg
IFR5cGVzZXR0aW5nRmVhdHVyZXMgZmVhdHVyZXMgPSBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzOworCisgICAgICAgIHN3aXRjaCAodGV4dFJlbmRlcmluZ01vZGUpIHsKKyAgICAgICAgY2Fz
ZSBBdXRvVGV4dFJlbmRlcmluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9w
dGltaXplU3BlZWQ6CisgICAgICAgICAgICBmZWF0dXJlcyAmPSB+KEtlcm5pbmcgfCBMaWdhdHVy
ZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2VvbWV0cmljUHJlY2lzaW9u
OgorICAgICAgICBjYXNlIE9wdGltaXplTGVnaWJpbGl0eToKKyAgICAgICAgICAgIGZlYXR1cmVz
IHw9IEtlcm5pbmcgfCBMaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIHN3aXRjaCAobV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVz
ICY9IH5LZXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMgfD0gS2VybmluZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tl
cm5pbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
bV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGZlYXR1
cmVzIHw9IExpZ2F0dXJlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOworCisgICAg
Rm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIG11dGFibGUgUmVmUHRyPEZv
bnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKKyAgICBmbG9h
dCBtX3dvcmRTcGFjaW5nOworICAgIG11dGFibGUgYm9vbCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sOworICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGluZ0ZlYXR1cmVzIDogMjsgLy8g
KFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29tcHV0ZWQgZnJvbSBtX2ZvbnRE
ZXNjcmlwdGlvbi4KK307CisKK3ZvaWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwordm9p
ZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7Cit2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKKworaW5saW5lIEZvbnQ6On5Gb250KCkKK3sKK30KKworaW5saW5l
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250OjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2dseXBocyk7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxl
Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworfQorCitpbmxpbmUgY29uc3QgRm9udFJhbmdl
cyYgRm9udDo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGJvb2wgRm9udDo6
aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVy
biBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5l
IEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCitpbmxpbmUgZmxv
YXQgRm9udDo6dGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCB1bnNpZ25l
ZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXRhYlNpemUpCisg
ICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJT
aXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0
IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0aW9uLCB0YWJXaWR0aCk7Cisg
ICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3BhY2VXaWR0aCgpIC8gMikgPyB0
YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7Cit9CisKK30KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29y
ZTo6VGV4dExheW91dCopOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udF9oCi0jZGVmaW5lIEZv
bnRfaAorI2lmbmRlZiBGb250Q2FzY2FkZV9oCisjZGVmaW5lIEZvbnRDYXNjYWRlX2gKIAogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTA2
LDI0ICsxMDYsMjQgQEAgcHVibGljOgogfTsKIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CiAKLWNsYXNzIEZvbnQgeworY2xhc3MgRm9udENhc2Nh
ZGUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZs
b2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5h
dGl2ZSBmb250LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYsIGJvb2wgaXNQcmludGluZywgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
Ym9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAjZW5kaWYKLSAg
ICB+Rm9udCgpOworICAgIH5Gb250Q2FzY2FkZSgpOwogCi0gICAgRm9udChjb25zdCBGb250Jik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udCYgb3BlcmF0b3I9KGNvbnN0IEZvbnQmKTsKKyAgICBG
b250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRD
YXNjYWRlJiBvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBlcXVhbEZvclRleHRB
dXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAorICAgIGJvb2wgZXF1YWxGb3JUZXh0
QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAgICAgICAgICYmIG1fbGV0dGVyU3BhY2luZyA9PSBvdGhl
ci5tX2xldHRlclNwYWNpbmcKQEAgLTI2OSw3ICsyNjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0
JyB8fCBjID09ICdcbicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNw
YWNlSW5Db21wbGV4U2NyaXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9CiAg
ICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFy
IGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0g
c29mdEh5cGhlbiB8fCBjID09IHplcm9XaWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9
IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0
aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9Ci0gICAg
c3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOworICAgIHN0YXRp
YyBib29sIGNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMik7CiAKICAgICBzdGF0aWMgaW5s
aW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIpCiAgICAgewpAQCAtMzQ3
LDM0ICszNDcsMzQgQEAgdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CiB2b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIHZvaWQgY2xlYXJX
aWR0aENhY2hlcygpOwogCi1pbmxpbmUgRm9udDo6fkZvbnQoKQoraW5saW5lIEZvbnRDYXNjYWRl
Ojp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZv
bnQ6OnByaW1hcnlGb250RGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEm
IEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAogewogICAgIEFTU0VSVChtX2ds
eXBocyk7CiAgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5U2ltcGxlRm9udERhdGEobV9mb250
RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9udFJhbmdlcyYgRm9udDo6ZmFsbGJh
Y2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbHlwaHMpOwogICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAotaW5saW5lIGJvb2wg
Rm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0Zp
eGVkUGl0Y2goKSBjb25zdAogewogICAgIEFTU0VSVChtX2dseXBocyk7CiAgICAgcmV0dXJuIG1f
Z2x5cGhzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoraW5saW5lIEZvbnRTZWxlY3Rv
ciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZ2x5
cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAotaW5saW5lIGZsb2F0IEZv
bnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwg
ZmxvYXQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCF0YWJTaXplKQogICAgICAgICByZXR1
cm4gbGV0dGVyU3BhY2luZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29yayBpZiB0aGUg
ZW1waGFzaXMgbWFyayB1c2VzIGEgY29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9mIHRoZQogLy8g
c3RhbmRhcmQgZW1waGFzaXMgbWFya3MgZG8gc28uCi1ib29sIEZvbnQ6OmdldEVtcGhhc2lzTWFy
a0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRh
KSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0CiB7CiAgICAg
aWYgKG1hcmsuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Niw3ICs2Niw3
IEBAIGJvb2wgRm9udDo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7CiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERh
dGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0
YSkpCkBAIC04MCw3ICs4MCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3Qg
QXRvbWkKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpOwog
fQogCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmspIGNvbnN0CitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwog
ICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpA
QCAtOTQsNyArOTQsNyBAQCBpbnQgRm9udDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9t
CiAgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CiB9CiAK
LWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBj
b25zdAoraW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrKSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlm
ICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtMTA4
LDcgKzEwOCw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWkKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsK
IApAQCAtMTM4LDcgKzEzOCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGwKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZh
bmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CkBAIC0xNTQsNyArMTU0LDcgQEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZQogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpcyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleAogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVuKTsKQEAgLTIz
MSw3ICsyMzEsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAg
ICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkp
LCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0
YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRh
KSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29uCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwgc3Rh
cnRQb2ludCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxs
YmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTI3Niw3ICsyNzYsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChj
b25zCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotdm9pZCBGb250OjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBy
dW4pOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVQKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVX
aWR0aCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
ewogICAgIGZsb2F0IGRlbHRhID0geDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udEds
eXBocy5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTI2NCw3ICsyNjQsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtCiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhKQogICAgICAg
ICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJh
Y2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKGMpKQorICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLT5o
YXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEds
eXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBHbHlwaERhdGEg
Rm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogCiAgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250RGF0YSkgewotICAgICAgICBp
ZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEu
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZh
bGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFs
bGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZv
ck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNK
S0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0KIApAQCAtMzIy
LDcgKzMyMiw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWwKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAg
ICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0
MzAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAvLyB0aGUg
d2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBub3RpY2Vh
YmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KICNpZiAhUExBVEZPUk0oSU9TKQogI2lmICFVU0Uo
V0lOR0RJKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb24KIH0KICNlbmRpZgogI2Vsc2UKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAgZmxvYXQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1Niw3ICs0NTYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGCiAgICAgZm9udC5k
cmF3R2x5cGhzKHRoaXMsICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxMiArNDY1LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKIH0KIAogLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUg
aU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0
aG9kIHVzZSB0aGUKLS8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Ojpk
cmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8v
IHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250Q2FzY2FkZTo6ZHJhd1RleHQo
KSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCiAvLyBhcmVuJ3Qg
bm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hhbmdlLgogI2lm
ICFQTEFURk9STShJT1MpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikK
ICNlbHNlCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3Rh
dHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24sIEJpZGlTdGF0dXMqIHN0YXR1cywgaW50IGxlbmd0aCkK
ICNlbmRpZgogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC01MTUsNyArNTE1LDcg
QEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29ucwogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwotICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgorICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250Q2FzY2FkZTo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBv
ZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4K
ICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250Lndp
ZHRoKHN1YnJ1biksIDApOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtMzU2LDE2
ICszNTYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogI2Vsc2UKLSAg
ICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIGZsb2F0IGRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhC
dWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAg
ICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKICNlbHNlCi0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHksIEJpZGlTdGF0dXMqID0gMCwgaW50
IGxlbmd0aCA9IC0xKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOwog
I2VuZGlmCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxs
U2lkZXMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDggQEAKICNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogI2luY2x1ZGUgIkNvcmVUZXh0U1BJ
LmgiCiAjZW5kaWYKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQxOSw3ICs0MTksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzCiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50IGNvZGVVbml0
c0xlbmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IGNvZGVVbml0c1swXSA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKIAotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxlZnRUcnVuY2F0
ZVRvQnVmZmVyKGNvbgogICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXg7CiB9
CiAKLXN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJlciwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdI
YWNrcykKK3N0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgcmVuZGVy
ZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgZGlzYWJs
ZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBpZiAoZGlzYWJsZVJvdW5kaW5nSGFja3MpCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGlj
IGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbgogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVl
LCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1
bmNhdGUgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgVHJ1bmNh
dGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKQEAgLTI5NSw0MiArMjk1LDQyIEBAIHN0YXRpYyBTdHJpbmcgdHJ1
bmNhdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZlciwg
dHJ1bmNhdGVkTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1
bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBm
b250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmlu
ZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFj
a3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzKQogewogICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcyk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250
LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKK1N0cmluZyBT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MpCiB7CiAgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0
cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MpOwogfQogCi1mbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5h
YmxlUm91bmRpbmdIYWNrcykKK2Zsb2F0IFN0cmluZ1RydW5jYXRvcjo6d2lkdGgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tz
T3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICByZXR1cm4gc3RyaW5nV2lkdGgoZm9u
dCwgU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwg
IWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMs
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOwogfQogCi1TdHJpbmcgU3RyaW5nVHJ1bmNh
dG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwg
Y29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6
OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5k
aW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
ZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNh
dGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hh
Y2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjps
ZWZ0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1cm4gdHJ1bmNhdGVT
dHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQorU3RyaW5nIFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKIHsKICAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFy
YWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZElu
c2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKIH0KIAotU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUpCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCiB7CiAgICAgcmV0dXJuIHRy
dW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZl
ciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjMgKzMzLDIzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBGb250OwotICAgIAotICAg
IGNsYXNzIFN0cmluZ1RydW5jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCB7IERpc2FibGVSb3VuZGluZ0hhY2tzLCBFbmFibGVSb3VuZGlu
Z0hhY2tzIH07Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjZW50ZXJU
cnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlz
YWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRy
dW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxl
Um91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0
IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNr
c09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0
cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Ci0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3Ry
aW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JO
b3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUs
IGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFs
c2UpOworY2xhc3MgRm9udENhc2NhZGU7CisKK2NsYXNzIFN0cmluZ1RydW5jYXRvciB7CitwdWJs
aWM6CisgICAgZW51bSBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgeyBEaXNhYmxlUm91bmRpbmdI
YWNrcywgRW5hYmxlUm91bmRpbmdIYWNrcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRp
bmdIYWNrcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRl
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJs
ZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxv
YXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQm
IHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBy
aWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJv
b2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKIAotICAgICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAg
ICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcm
LCBjb25zdCBGb250Q2FzY2FkZSYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVS
b3VuZGluZ0hhY2tzKTsKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGb250OworY2xhc3MgRm9udENh
c2NhZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNz
IEdseXBoVG9QYXRoVHJhbnNsYXRvcjsKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25z
dCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5v
cm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgPSAwOworICAgICAgICB2aXJ0dWFsIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRy
YW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0
YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzLCBib29sIGZvclRleHRF
bXBoYXNpcykKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0
RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1f
Y3VycmVudENoYXJhY3RlcigwKQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
PSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2lzQWZ0
ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRy
KCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFp
bGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0t
OwogCkBAIC0yMjksOSArMjI5LDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbgogICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVyU3BhY2luZygp
KQogICAgICAgICAgICAgICAgIHdpZHRoICs9IG1fZm9udC0+bGV0dGVyU3BhY2luZygpOwogCi0g
ICAgICAgICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udDo6Y2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKLSAgICAgICAgICAgIGJvb2wg
dHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBpZiAodHJlYXRBc1NwYWNlIHx8IChleHBhbmRBcm91bmRJZGVvZ3JhcGhzICYmIEZvbnQ6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBi
b29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCAoZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKSkgewogICAgICAgICAgICAgICAgIC8v
IERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhw
YW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICBpZiAobV9l
eHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24g
PSBtX2V4cGFuc2lvbjsKQEAgLTI2OCw5ICsyNjgsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgICAgIG1faXNBZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9y
bXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSAmJiBnbHlwaEJ1ZmZlciAmJiBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKICAgICAgICAgICAgIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhCdWZmZXItPnNp
emUoKSwKICAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXItPnNpemUoKSA/IGdseXBoQnVm
ZmVyLT5hZHZhbmNlQXQoZ2x5cGhCdWZmZXItPnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3aWR0
aCkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykg
ewogICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsK
QEAgLTI3OCw3ICsyNzksNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUluCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZm9yVGV4dEVt
cGhhc2lzICYmICFGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoYXJhY3RlcikpCisgICAg
ICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAhRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0
RW1waGFzaXMoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIGdseXBoID0gMDsKIAogICAgICAgICAv
LyBBZHZhbmNlIHBhc3QgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IGRlYWx0IHdpdGguCkBAIC0yODgs
NyArMjg5LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogCiAg
ICAgICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd29y
ZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgICAgICAvLyB0byBiZSBpbnRl
Z2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2VyIGJv
dW5kYXJ5LgotICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250Ojpp
c1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGlmIChtX3J1bi5h
cHBseVdvcmRSb3VuZGluZygpICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3Rl
cihjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKIAogICAg
ICAgICAgICAgLy8gU2luY2Ugd2lkdGhTaW5jZUxhc3RSb3VuZGluZyBjYW4gbG9zZSBwcmVjaXNp
b24gaWYgd2UgaW5jbHVkZSBtZWFzdXJlbWVudHMgZm9yCkBAIC0zMDEsNyArMzAyLDcgQEAgaW5s
aW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhICJy
b3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QKICAgICAgICAgICAgIC8vIHdp
ZHRoIHNvIHRoYXQgdGhlIHRvdGFsIHJ1biB3aWR0aCB3aWxsIGJlIG9uIGFuIGludGVnZXIgYm91
bmRhcnkuCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpIDwgbV9y
dW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKih0ZXh0SXRlcmF0
b3IuY2hhcmFjdGVycygpKSkpCisgICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5V29yZFJvdW5k
aW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCkpIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hh
cmFjdGVyKCoodGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSkpKQogICAgICAgICAgICAgICAgIHx8
IChtX3J1bi5hcHBseVJ1blJvdW5kaW5nKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHRJ
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkpID49IG1fcnVuLmxlbmd0aCgpKSkgewogICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICsgd2lk
dGg7CiAgICAgICAgICAgICAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyA9IGNlaWxmKHRvdGFs
V2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAjaWZuZGVmIFdpZHRoSXRlcmF0b3JfaAogI2RlZmluZSBXaWR0aEl0ZXJhdG9yX2gKIAot
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlNW
R0dseXBoLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsK
K2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBTaW1wbGVGb250
RGF0YTsKIGNsYXNzIFRleHRSdW47CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBHbHlwaERhdGE7
CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNj
b3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2Up
OworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxz
ZSk7CiAKICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBi
b29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAt
NTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiYg
YXJhYmljRm9ybXMoKSB7IHJldHVybiBtX2FyYWJpY0Zvcm1zOyB9CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250JiBmb250KQor
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZXNldHRpbmdGZWF0dXJlcyhjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCkKICAgICB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKICAgICAgICAgaWYgKCFm
b250LmlzUHJpbnRlckZvbnQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgY29uc3QgRm9udCogbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBt
X2ZvbnQ7CiAKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXMuaCIKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjphZHZhbmNlCiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9p
bmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitE
YXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZs
b2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAg
IGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0
YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3Ro
KCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNlCiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVy
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6
ek5HLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVy
LmgiCkBAIC0zOSw3ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50LCBpbnQs
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4
dEVtcGhhc2lzICovKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOwogICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKQEAgLTUwLDcgKzUw
LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAgIC8vIEZJ
WE1FOiBNYWMgcmV0dXJucyBhbiBpbml0aWFsIGFkdmFuY2UgaGVyZS4KICAgICByZXR1cm4gMDsK
IH0KLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZl
ciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGgu
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC02OCwyMiArNjgsMjIgQEAgZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udAogICAgIHJldHVybiBzdGFydFBvaW50
LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiti
b29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0
IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QK
IHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVy
LnNoYXBlKCkpCkBAIC05Miw3ICs5Miw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb24KICAgICByZXR1cm4gMDsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sKSBjb25z
dAoraW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCkgY29uc3QKIHsKICAgICBIYXJmQnV6elNoYXBl
ciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0
aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAKLSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIK
ICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKIAog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFw
ZXIuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgPGhiLWljdS5oPgpAQCAtMTczLDkgKzE3Myw5IEBAIHN0YXRp
YyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGUKICAgICAgICAgaW50IG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwg
bGVuZ3RoLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgdGFicyBhcyB0
aGV5IGFyZSBub3QgdHJlYXRlZCBhcyBzcGFjZXMgZm9yIHdvcmQtZW5kLgotICAgICAgICBpZiAo
Rm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCisgICAg
ICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVy
ICE9ICdcdCcpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7Ci0gICAgICAgIGVsc2UgaWYg
KEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQor
ICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21w
bGV4U2NyaXB0KGNoYXJhY3RlcikpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhT
cGFjZTsKICAgICAgICAgVTE2X0FQUEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwg
Y2hhcmFjdGVyLCBlcnJvcik7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7
CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25z
dCBUZQogICAgIH0KIH0KIAotSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZv
bnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNo
YXBlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQogICAgIDog
bV9mb250KGZvbnQpCiAgICAgLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgoMCkKICAgICAsIG1f
cnVuKHJ1bikKQEAgLTIxNCw5ICsyMTQsOSBAQCBzdGF0aWMgdm9pZCBub3JtYWxpemVTcGFjZXNB
bmRNaXJyb3JDaGFyCiAgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAg
ICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKICAg
ICAgICAgLy8gRG9uJ3Qgbm9ybWFsaXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMg
c3BhY2VzIGZvciB3b3JkLWVuZAotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJh
Y3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJl
YXRBc1NwYWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCiAgICAgICAgICAgICBj
aGFyYWN0ZXIgPSAnICc7Ci0gICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhT
cGFjZShjaGFyYWN0ZXIpKQorICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1pl
cm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lk
dGhTcGFjZTsKICAgICAgICAgZWxzZSBpZiAobm9ybWFsaXplTW9kZSA9PSBIYXJmQnV6elNoYXBl
cjo6Tm9ybWFsaXplTWlycm9yQ2hhcnMpCiAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJN
aXJyb3IoY2hhcmFjdGVyKTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVy
Ojpjb2xsZWN0SGFyZkJ1enpSdW5zCiAgICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQg
PSBuZXh0U2NyaXB0OwogCiAgICAgICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVu
Z3RoKTsgaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRv
ci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpKSB7Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRB
c1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCisgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6
OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICBpZiAoVV9HRVRfR0NfTUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19N
X01BU0spIHsKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRHbHlw
aFBvc2l0aW9uc0ZvCiAKICAgICAgICAgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV0gPSBnbHlw
aEluZm9zW2ldLmNsdXN0ZXI7CiAKLSAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udDo6
dHJlYXRBc1plcm9XaWR0aFNwYWNlKG1fbm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50Q2hhcmFjdGVy
SW5kZXhdKSkKKyAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiAhRm9udENhc2NhZGU6OnRyZWF0
QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4
XSkpCiAgICAgICAgICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIAogICAgICAgICBp
ZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hhcmFjdGVySW5kZXgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9u
dDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIEhh
cmZCdXp6U2hhcGVyIHsKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBOb3JtYWxp
emVNaXJyb3JDaGFycwogICAgIH07CiAKLSAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250Kiwg
Y29uc3QgVGV4dFJ1biYpOworICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwg
Y29uc3QgVGV4dFJ1biYpOwogICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CiAKICAgICBi
b29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6
CiAKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0
LCBmbG9hdCk7CiAKLSAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUqIG1fZm9udDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VUNoYXJbXT4gbV9ub3JtYWxpemVkQnVm
ZmVyOwogICAgIHVuc2lnbmVkIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKICAgICBjb25zdCBU
ZXh0UnVuJiBtX3J1bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9Gb250Q2FjaGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNp
bXBvcnQgIkNvcmVUZXh0U1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2Fz
Y2FkZS5oIgogI2ltcG9ydCAiUmVuZGVyVGhlbWVJT1MuaCIKICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlP
Uy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4
IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNz
U1BJLmgiCi0jaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZv
bnRTZXJ2aWNlc0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJv
bGxlci5oIgogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTQzLDEz
ICs0MywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRMYXlvdXQgewogcHVi
bGljOgotICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZv
bnQmIGZvbnQpCisgICAgc3RhdGljIGJvb2wgaXNOZWVkZWQoUmVuZGVyVGV4dCogdGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgewogICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIHRleHQtPnN0eWxlKCkp
OwotICAgICAgICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnQ6OkNvbXBsZXg7Cisg
ICAgICAgIHJldHVybiBmb250LmNvZGVQYXRoKHJ1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7
CiAgICAgfQogCi0gICAgVGV4dExheW91dChSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBm
b250LCBmbG9hdCB4UG9zKQorICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCogdGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgICAgIDogbV9mb250KGZvbnQpCiAg
ICAgICAgICwgbV9ydW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB4UG9zKSkKICAgICAg
ICAgLCBtX2NvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+
KCZtX2ZvbnQsIG1fcnVuLCB0cnVlKSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZh
bGxiYWNrRm9udHMpOwogICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+
cnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJv
bSAmJiBGb250Ojp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQorICAgICAgICBpZiAobV9mb250
LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVu
W2Zyb21dKSkKICAgICAgICAgICAgIGJlZm9yZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygp
OwogICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUds
eXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRy
b2xsZXItPnJ1bldpZHRoU29GYXIoKTsKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRl
eHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgc3RhdGljIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgZmxvYXQgeFBvcykKICAgICB7CiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgdGV4dC0+c3R5bGUoKSk7CiAg
ICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSk7CkBAIC03
OCwyNSArNzgsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJ1bjsKICAgICB9CiAKLSAg
ICAvLyBDb21wbGV4VGV4dENvbnRyb2xsZXIgaGFzIG9ubHkgcmVmZXJlbmNlcyB0byBpdHMgRm9u
dCBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnQg
bV9mb250OworICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlciBoYXMgb25seSByZWZlcmVuY2Vz
IHRvIGl0cyBGb250Q2FzY2FkZSBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2
ZSBoZXJlLgorICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICBUZXh0UnVuIG1fcnVuOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4VGV4dENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKIH07
CiAKLVBhc3NPd25QdHI8VGV4dExheW91dD4gRm9udDo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQq
IHRleHQsIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAorUGFzc093
blB0cjxUZXh0TGF5b3V0PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQqIHRl
eHQsIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAogewogICAgIGlm
ICghY29sbGFwc2VXaGl0ZVNwYWNlIHx8ICFUZXh0TGF5b3V0Ojppc05lZWRlZCh0ZXh0LCAqdGhp
cykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4
dExheW91dCh0ZXh0LCAqdGhpcywgeFBvcykpOwogfQogCi12b2lkIEZvbnQ6OmRlbGV0ZUxheW91
dChUZXh0TGF5b3V0KiBsYXlvdXQpCit2b2lkIEZvbnRDYXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4
dExheW91dCogbGF5b3V0KQogewogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnQ6
OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitmbG9hdCBGb250
Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKIHsK
ICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBA
IC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxv
YQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4
dEVtcGhhc2lzKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIo
Y29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkK
ICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0xNDQsNyArMTQ0
LDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRybwogICAgICAgICBt
X2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBp
c0FmdGVyRXhwYW5zaW9uID0gbV9hZnRlckV4cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
bV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7
CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2Fk
ZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8g
TFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNp
b24gJiYgIW1fcnVuLmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50LS07CiAKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgbmV4dENoID0gKihtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMo
KSArIG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7CiAKLSAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAg
ICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udERhdGEuc3BhY2VHbHlw
aCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3Bh
Y2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNl
c1tpXTsKICNpZiBQTEFURk9STShJT1MpCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0
JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0g
bV9mb250LnRhYldpZHRoKGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSAr
IG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgewor
ICAgICAgICAgICAgZWxzZSBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShj
aCkgJiYgIXRyZWF0QXNTcGFjZSkgewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAw
OwogICAgICAgICAgICAgICAgIGdseXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOwogICAgICAg
ICAgICAgfQpAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjph
ZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBtX2ZvbnQu
bGV0dGVyU3BhY2luZygpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRp
b24gYW5kIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8
IEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSB8fCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhw
YW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVu
LgogICAgICAgICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHByZXZpb3VzRXhwYW5zaW9uID0gbV9leHBhbnNpb247CkBAIC02ODUs
MTIgKzY4NSwxMyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAg
ICAgICAgICAgICAvLyBXZSBhZGp1c3QgdGhlIHdpZHRoIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBv
ZiBhICJ3b3JkIiB0byBlbnN1cmUgYW4gaW50ZWdlciB3aWR0aC4gCiAgICAgICAgICAgICAvLyBG
b3JjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdvcmQgYm91bmRhcmll
cyBmb3IgdGhlIHJvdW5kaW5nIGhhY2sgCiAgICAgICAgICAgICAvLyB0byBiZSBpbnRlZ2VyIHdp
ZHRoLCBzbyB0aGUgZm9sbG93aW5nIHdvcmRzIHdpbGwgc3RhcnQgb24gYW4gaW50ZWdlciBib3Vu
ZGFyeS4gCi0gICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiBGb250
Ojppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihjaCkpIAorICAgICAgICAgICAgaWYgKG1fcnVuLmFw
cGx5V29yZFJvdW5kaW5nKCkgJiYgRm9udENhc2NhZGU6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVy
KGNoKSkgCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGNlaWxDR0Zsb2F0KGFkdmFu
Y2Uud2lkdGgpOyAKIAogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNo
YXJhY3RlciBpcyBhICJyb3VuZGluZyBoYWNrIGNoYXJhY3RlciIsIGlmIHNvLCBhZGp1c3QgdGhl
IAotICAgICAgICAgICAgLy8gd2lkdGggc28gdGhhdCB0aGUgdG90YWwgcnVuIHdpZHRoIHdpbGwg
YmUgb24gYW4gaW50ZWdlciBib3VuZGFyeS4gCi0gICAgICAgICAgICBpZiAoKG1fcnVuLmFwcGx5
V29yZFJvdW5kaW5nKCkgJiYgIWxhc3RHbHlwaCAmJiBGb250Ojppc1JvdW5kaW5nSGFja0NoYXJh
Y3RlcihuZXh0Q2gpKSB8fCAobV9ydW4uYXBwbHlSdW5Sb3VuZGluZygpICYmIGxhc3RHbHlwaCkp
IHsgCisgICAgICAgICAgICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2ls
bCBiZSBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LgorICAgICAgICAgICAgYm9vbCBuZWVkc1JvdW5k
aW5nRm9yQ2hhcmFjdGVyID0gbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiAhbGFzdEdseXBo
ICYmIEZvbnRDYXNjYWRlOjppc1JvdW5kaW5nSGFja0NoYXJhY3RlcihuZXh0Q2gpOworICAgICAg
ICAgICAgaWYgKG5lZWRzUm91bmRpbmdGb3JDaGFyYWN0ZXIgfHwgKG1fcnVuLmFwcGx5UnVuUm91
bmRpbmcoKSAmJiBsYXN0R2x5cGgpKSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCB0b3RhbFdp
ZHRoID0gd2lkdGhTaW5jZUxhc3RDb21taXQgKyBhZHZhbmNlLndpZHRoOyAKICAgICAgICAgICAg
ICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCA9IGNlaWxDR0Zsb2F0KHRvdGFsV2lkdGgpOyAKICAg
ICAgICAgICAgICAgICBDR0Zsb2F0IGV4dHJhV2lkdGggPSB3aWR0aFNpbmNlTGFzdENvbW1pdCAt
IHRvdGFsV2lkdGg7IApAQCAtNzA5LDcgKzcxMCw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1pdCAr
PSBhZHZhbmNlLndpZHRoOyAKIAogICAgICAgICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBtYXJr
cyBzaG91bGQgcmVjZWl2ZSBhIHRleHQgZW1waGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21iaW5l
IHdpdGggYSBzcGFjZS4KLSAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZv
bnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoY2gpIHx8IChVX0dFVF9HQ19NQVNLKGNoKSAmIFVf
R0NfTV9NQVNLKSkpCisgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMgJiYgKCFGb250
Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaCkgfHwgKFVfR0VUX0dDX01BU0soY2gp
ICYgVV9HQ19NX01BU0spKSkKICAgICAgICAgICAgICAgICBnbHlwaCA9IDA7CiAKICAgICAgICAg
ICAgIGFkdmFuY2UuaGVpZ2h0ICo9IC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmUKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGb250OworY2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBTaW1wbGVG
b250RGF0YTsKIGNsYXNzIFRleHRSdW47CiAKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBHbHlwaEl0
ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYQogLy8gY29tcGxleCBzY3JpcHRzIG9uIE9TIFgu
CiBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJh
bFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAg
Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYs
IGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFz
aXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBlbWl0IGdseXBocyB1cCB0byB0aGUg
c3BlY2lmaWVkIGNoYXJhY3Rlci4KICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0x
MzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBtX3J1bklu
ZGljZXM7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9J
bmRleDsKIAotICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
bV9mb250OwogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogICAgIGJvb2wgbV9pc0xUUk9ubHk7
CiAgICAgYm9vbCBtX21heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVU
ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAi
Q29tcGxleFRleHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCiAKQEAgLTQwLDE5ICs0MCwxOSBAQAogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVM
aXN0IDogTlNBcnJheSB7CiAgICAgQHByaXZhdGUKLSAgICBjb25zdCBXZWJDb3JlOjpGb250KiBf
Zm9udDsKKyAgICBjb25zdCBXZWJDb3JlOjpGb250Q2FzY2FkZSogX2ZvbnQ7CiAgICAgVUNoYXIz
MiBfY2hhcmFjdGVyOwogICAgIE5TVUludGVnZXIgX2NvdW50OwogICAgIFZlY3RvcjxSZXRhaW5Q
dHI8Q1RGb250RGVzY3JpcHRvclJlZj4sIDE2PiBfZm9udERlc2NyaXB0b3JzOwogfQogCi0tIChp
ZClpbml0V2l0aEZvbnQ6KGNvbnN0IFdlYkNvcmU6OkZvbnQqKWZvbnQgY2hhcmFjdGVyOihVQ2hh
cjMyKWNoYXJhY3RlcjsKKy0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENh
c2NhZGUqKWZvbnQgY2hhcmFjdGVyOihVQ2hhcjMyKWNoYXJhY3RlcjsKIAogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gV2ViQ2FzY2FkZUxpc3QKIAotLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBX
ZWJDb3JlOjpGb250Kilmb250IGNoYXJhY3RlcjooVUNoYXIzMiljaGFyYWN0ZXIKKy0gKGlkKWlu
aXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udENhc2NhZGUqKWZvbnQgY2hhcmFjdGVyOihV
Q2hhcjMyKWNoYXJhY3RlcgogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAg
ICAgICByZXR1cm4gbmlsOwpAQCAtNjAsNyArNjAsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNv
bnN0IFdlYkNvcmU6OkZvbnQqCiAgICAgX2ZvbnQgPSBmb250OwogICAgIF9jaGFyYWN0ZXIgPSBj
aGFyYWN0ZXI7CiAKLSAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQs
IHRoZSBGb250IGhhcyBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCisg
ICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENhc2Nh
ZGUgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKICAgICAvLyBG
b250RGF0YSwgc28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdo
aWxlICghX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAg
X2NvdW50Kys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKICNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3JlR3Jh
cGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAj
aW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgog
I2ltcG9ydCAiTlNGb250U1BJLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
b21wbGV4VGV4dE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJGb250R2x5cGhzLmgiCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0
aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAgLTUyLDcgKzUyLDcg
QEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleAogICAgIHNlbGVjdGlv
blJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9u
dDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJv
bSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApA
QCAtNzUsNyArNzUsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
CiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udENh
c2NhZGU6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFu
Y2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVm
ZmVyOwpAQCAtOTMsNyArOTMsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBn
bHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwg
cG9pbnQueSgpKSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVy
ZmxvdykgewpAQCAtMTE2LDEzICsxMTYsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbgogICAgIHJldHVybiBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKIH0KIAot
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnRD
YXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBDb21w
bGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIHJldHVybiBjb250
cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAot
Y29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRh
VmFyaWFudCB2YXJpYW50KSBjb25zdAorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRl
Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsK
ICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CiAgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5n
dGggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRNYWMubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJG
b250Q2FzY2FkZS5oIgogCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCkBAIC01OCwxMiArNTgsMTIgQEAgU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRH
ZXRUZXh0RWZmZWN0c0NhdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgRm9udDo6Y2Fu
UmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKK2Jvb2wgRm9udENhc2NhZGU6OmNh
blJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KQorYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRl
eHQoKQogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyB2
b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoQ0dDb24KIH0KICNlbmRpZgogCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIGNvbnN0Cit2b2lkIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewog
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3Jt
RGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTUyNiw3ICs1MjYsNyBA
QCB2b2lkIE1hY0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZSgpCiAgICAgfSB3aGlsZSAo
bV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgp
KTsKIH0KIAotRGFzaEFycmF5IEZvbnQ6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZs
b2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CitEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hl
c0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CiB7
CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkpCiAgICAgICAgIHJldHVybiBEYXNoQXJy
YXkoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCBEYXNoQXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJz
ZWN0aW9uc1dpCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZ2x5cGhCdWZmZXIu
c2F2ZU9mZnNldHNJblN0cmluZygpOwogICAgIGZsb2F0IGRlbHRhWDsKLSAgICBpZiAoY29kZVBh
dGgocnVuKSAhPSBGb250OjpDb21wbGV4KQorICAgIGlmIChjb2RlUGF0aChydW4pICE9IEZvbnRD
YXNjYWRlOjpDb21wbGV4KQogICAgICAgICBkZWx0YVggPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
clNpbXBsZVRleHQocnVuLCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKICAgICBlbHNl
CiAgICAgICAgIGRlbHRhWCA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCAwLCBydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBEYXNo
QXJyYXkgRm9udDo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpCiB9CiAjZW5kaWYKIAotYm9vbCBG
b250OjpwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2Fk
ZTo6cHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJ
T1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCiAgICAgY29uc3Qg
YXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udERhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5
cGhQYWdlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVk
ZSAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKLSNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZP
Uk0oSU9TKQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChj
b25zdCBVQ2hhCiAgICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQo
KSAhPSBSZWd1bGFyV2lkdGggfHwgZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAg
ICAgICAgLy8gSWRlb2dyYXBocyBkb24ndCBoYXZlIGEgdmVydGljYWwgdmFyaWFudCBvciB3aWR0
aCB2YXJpYW50cy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUZvbnQ6OmlzQ0pLSWRlb2dyYXBoKGJ1ZmZlcltp
XSkpCisgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJb
aV0pKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw4ICszMiw4IEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQg
IkNvcmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIK
ICNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKQEAgLTEyNyw3
ICsxMjcsNyBAQCBzdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChIREMgCiAgICAg
cmV0dXJuIHBhdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
IAogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAt
NDEsMTcgKzQxLDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQor
Ym9vbCBGb250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCitib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2
b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICBp
dC5hZHZhbmNlKGZyb20pOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRo
IC0gYmVmb3JlV2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMp
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAog
ewogICAgIGlmIChmb3JUZXh0RW1waGFzaXMpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JU
ZXh0RW1waGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4K
QEAgLTkyLDcgKzkyLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bAogICAgIHJldHVybiBiZWZvcmVXaWR0aDsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnRDYXNj
YWRlOjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNl
cyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZl
cjsKQEAgLTEwOSw3ICsxMDksNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRlCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBn
bHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwg
cG9pbnQueSgpKSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9s
bGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSk7CkBAIC0xMzMsMTAgKzEzMywxMCBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
OwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3QKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0g
Zm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9p
bnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRw
Oi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgorICAgIC8v
IHRvIEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5v
cmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KICAgICBpbnQgeCA9IHN0YXRp
Y19jYXN0PGludD4oeEZsb2F0KTsKIAogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxl
cih0aGlzLCBydW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dp
bi5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkhXbmREQy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Vbmlz
Y3JpYmVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkhXbmRE
Qy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpA
QCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyB0aGF0IGRvZXMgc3R1ZmYg
aW4gdGhhdCBtZXRob2QgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGluIHRoZSBjb25zdHJ1
Y3Rvci4gIEhhdmUgYWR2YW5jZSgpCiAvLyB0YWtlIHRoZSBHbHlwaEJ1ZmZlciBhcyBhbiBhcmcg
c28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlIHRoZSBnbHlwaCBidWZmZXIgd2hlbgog
Ly8gbWVhc3VyaW5nLgotVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihj
b25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cykKK1VuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmli
ZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQogICAgIDogbV9m
b250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxi
YWNrRm9udHMpCkBAIC02Myw3ICs2Myw3IEBAIFVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmli
ZUNvbnRyb2xsZXIKICAgICBlbHNlIHsKICAgICAgICAgZmxvYXQgbnVtU3BhY2VzID0gMDsKICAg
ICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7Ci0gICAgICAg
ICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKKyAgICAgICAgICAgIGlmIChG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKICAgICAgICAgICAgICAgICBudW1T
cGFjZXMrKzsKICAgICAgICAgfQogCkBAIC0yODcsOCArMjg3LDggQEAgYm9vbCBVbmlzY3JpYmVD
b250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogCiAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBsZW47
IGsrKykgewogICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7Ci0gICAgICAgIGJvb2wgdHJl
YXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgYm9vbCB0cmVhdEFz
WmVyb1dpZHRoU3BhY2UgPSBGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOworICAgICAg
ICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOworICAg
ICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVy
b1dpZHRoU3BhY2UoY2gpOwogICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJv
V2lkdGhTcGFjZSkgewogICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5
cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMKICAgICAgICAgICAgIC8v
IGFycmF5LgpAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hh
cGVBbmRQbGFjZUkKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEp
KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIUZvbnQ6OnRyZWF0QXNTcGFjZShjYW5kaWRh
dGVTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNT
cGFjZShjYW5kaWRhdGVTcGFjZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9
IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDE2IEBACiAjaWZuZGVmIFVuaXNjcmliZUNvbnRyb2xsZXJf
aAogI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKIAotI2luY2x1ZGUgPHVzcDEwLmg+Ci0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlIDx1c3AxMC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKIHB1
YmxpYzoKLSAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVu
JiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Cisg
ICAgVW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAog
ICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFy
YWN0ZXIuCiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsK
QEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZTogICAgCiAgICAgICAgICAgICAgICBWZWN0b3I8V09S
RD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKICAgICAgICAgICAgICAgIFZlY3Rv
cjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwogCi0gICAgY29uc3QgRm9udCYg
bV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1
biYgbV9ydW47CiAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBtX2ZhbGxiYWNr
Rm9udHM7CiAgICAgRmxvYXRQb2ludCBtX2dseXBoT3JpZ2luOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkN1cnNvci5o
IgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW1wb3J0ICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2Fr
L1dLR3JhcGhpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XS0dyYXBoaWNzLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgot
I2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIldlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKICNpbXBvcnQg
PEltYWdlSU8vSW1hZ2VJTy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ry
YWdJbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAjaW1w
b3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxl
Y3Rvci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xNTcsMTAgKzE1NywxMCBA
QCBjb25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CiAKIC8vIEZJWE1FIC0gd2Ug
c2hvdWxkIG1vdmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5nIGV4dHJhcyB0byBX
ZWJDb3JlCiAgICAgCi1zdGF0aWMgRm9udCYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250KQor
c3RhdGljIEZvbnRDYXNjYWRlJiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCiB7CiAgICAg
c3RhdGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChGb250Q2FzY2FkZSwgY3VycmVudFJlbmRlcmVyLCAoKSk7CiAgICAgCiAg
ICAgaWYgKFtmb250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQogICAgICAgICByZXR1cm4gY3VycmVu
dFJlbmRlcmVyOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBGb250JiBmb250RnJvbU5TRm9u
dChOU0ZvbnQgKmZvbnQKICAgICBjdXJyZW50Rm9udCA9IGZvbnQ7CiAgICAgQ0ZSZXRhaW4oY3Vy
cmVudEZvbnQpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgZihmb250LCBbZm9udCBwb2ludFNpemVd
KTsKLSAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250KGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOworICAgIGN1cnJlbnRSZW5kZXJlciA9
IEZvbnRDYXNjYWRlKGYsICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0Ry
YXdpbmdUb1NjcmVlbl0pOwogICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CiB9CiAKQEAgLTE5
Miw3ICsxOTIsNyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhXaXRoRm9udChOU1N0cmluZyAqc3RyCiAg
ICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwogICAgIAogICAgIGlmIChj
YW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBGb250
IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSksICFb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwor
ICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtm
b250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNE
cmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVu
Z3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgICAgIHJldHVy
biB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lk
IGRyYXdBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAg
ICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250
IHBvaW50U2l6ZV0pLCAhW25zQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0sIEFudGlhbGlhc2Vk
KTsKKyAgICAgICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250
LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBBbnRp
YWxpYXNlZCk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAg
ICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwx
MyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVz
dG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBjb25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVh
bCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9s
U2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1D
b250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFj
dG9yKSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0OwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQg
em9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmco
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRC
b3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRy
b2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3QgeyBy
ZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDks
NyBAQCBUaGVtZSogcGxhdGZvcm1UaGVtZSgpCiAKIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBi
eSBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgogCi1zdGF0aWMgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAg
ICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAx
NikKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgTGVuZ3RoU2l6ZSBzaXplRnJvbU5TQ29udHJv
bFNpemUoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgc2l6ZUZy
b21Gb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZs
b2F0IHpvb21GYWN0b3IsIGNvbnN0IHN0ZDo6YXJyYXk8SW50U2l6ZSwgMz4mIHNpemVzKQorc3Rh
dGljIExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBzdGQ6OmFy
cmF5PEludFNpemUsIDM+JiBzaXplcykKIHsKICAgICByZXR1cm4gc2l6ZUZyb21OU0NvbnRyb2xT
aXplKGNvbnRyb2xTaXplRm9yRm9udChmb250KSwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvciwgc2l6
ZXMpOwogfQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIGNoZWNrYm94TWFy
Z2lucyhOU0NvbnQKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRp
YyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhT
aXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUgY2hl
Y2tib3hTaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVp
Z2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAg
aWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6
ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtMzIzLDcgKzMyMyw3IEBAIHN0YXRp
YyBjb25zdCBpbnQqIHJhZGlvTWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2luc1tj
b250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQor
c3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQogewogICAgIC8vIElm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5v
dGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtNTkz
LDcgKzU5Myw3IEBAIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PEludFNpemUsIDM+JiBzdGUKIAog
Ly8gV2UgZG9uJ3QgdXNlIGNvbnRyb2xTaXplRm9yRm9udCgpIGZvciBzdGVwcGVycyBiZWNhdXNl
IHRoZSBzdGVwcGVyIGhlaWdodAogLy8gc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0
aGUgY29ycmVzcG9uZGluZyB0ZXh0IGZpZWxkIGhlaWdodCwKLXN0YXRpYyBOU0NvbnRyb2xTaXpl
IHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOU0Nv
bnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQpCiB7CiAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKICAgICBpZiAoZm9u
dFNpemUgPj0gMTgpCkBAIC02NzMsNyArNjczLDcgQEAgaW50IFRoZW1lTWFjOjpiYXNlbGluZVBv
c2l0aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVz
dG1lbnQocGFydCk7CiB9CiAKLUZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQo
Q29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3QKK0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKQEAgLTY5
MSw3ICs2OTEsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvCiAg
ICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0
KSB7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgpAQCAtNzEwLDcgKzcxMCw3IEBAIExlbmd0
aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2wKICAgICB9CiB9CiAKLUxlbmd0aFNp
emUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBG
b250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6
bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAg
ICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CkBAIC03MjcsNyArNzI3LDcgQEAgTGVuZ3RoU2l6
ZSBUaGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKAogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRo
ZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVu
Z3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVC
dXR0b25QYXJ0OgpAQCAtNzM5LDcgKzczOSw3IEBAIExlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJv
bEJvcmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBh
ZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVNYWM6
OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQgIkN1
cnNvci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3Lmgi
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oSU9T
KQotY2xhc3MgRm9udDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogI2VuZGlmCiAKIGNsYXNzIExvY2Fs
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9M
b2NhbGl6ZWREYXRlQ2FjaGUuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKIAogI2luY2x1ZGUg
IkRhdGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKIGNsYXNzIExvY2FsaXplZERhdGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgTlNEYXRlRm9y
bWF0dGVyICpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7Ci0gICAg
ZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0
IEZvbnQmLCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYpOworICAgIGZsb2F0IG1heGltdW1XaWR0
aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IE1lYXN1cmVUZXh0Q2xpZW50Jik7CiAgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7CiAKIHBy
aXZhdGU6CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgZmxvYXQ+IERhdGVUeXBlTWF4V2lkdGhNYXA7CiAgICAgRGF0ZVR5cGVGb3JtYXR0ZXJNYXAg
bV9mb3JtYXR0ZXJNYXA7CiAgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdpZHRoTWFwOwot
ICAgIEZvbnQgbV9mb250OworICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKIAogICAgIGZyaWVuZCBM
b2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOwogICAgIGZyaWVuZCBOZXZl
ckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVk
RGF0ZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJj
b25maWcuaCIKICNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCi0jaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiVGV4dFJ1bi5oIgogI2ltcG9y
dCA8bWF0aC5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTUyLDcgKzUyLDYgQEAg
c3RhdGljIHZvaWQgX2xvY2FsZUNoYW5nZWQoQ0ZOb3RpZmljYXRpbwogfQogCiBMb2NhbGl6ZWRE
YXRlQ2FjaGU6OkxvY2FsaXplZERhdGVDYWNoZSgpCi0gICAgOiBtX2ZvbnQoRm9udCgpKQogewog
ICAgIC8vIExpc3RlbiB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBhbmQg
Y2xlYXIgdGhlIGNhY2hlIHdoZW4gaXQgZG9lcy4KICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFk
ZE9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQqKXRo
aXMsIF9sb2NhbGVDaGFuZ2VkLApAQCAtODQsMTQgKzgzLDE0IEBAIE5TRGF0ZUZvcm1hdHRlciAq
TG9jYWxpemVkRGF0ZUNhY2hlOjpmb3IKICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKIH0KIAot
ZmxvYXQgTG9jYWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29t
cG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBNZWFzdXJlVGV4dENs
aWVudCYgbWVhc3VyZXIpCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZv
ckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBNZWFzdXJlVGV4dENsaWVudCYgbWVhc3VyZXIpCiB7CiAgICAgaW50IGtleSA9
IHN0YXRpY19jYXN0PGludD4odHlwZSk7CiAgICAgaWYgKG1fZm9udCA9PSBmb250KSB7CiAgICAg
ICAgIGlmIChtX21heFdpZHRoTWFwLmNvbnRhaW5zKGtleSkpCiAgICAgICAgICAgICByZXR1cm4g
bV9tYXhXaWR0aE1hcC5nZXQoa2V5KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnQgPSBG
b250KGZvbnQpOworICAgICAgICBtX2ZvbnQgPSBGb250Q2FzY2FkZShmb250KTsKICAgICAgICAg
bV9tYXhXaWR0aE1hcC5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludAogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgIHBhaW50U2Vs
ZWN0aW9uKGNvbnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCkBAIC0xMTAs
NyArMTEwLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRNYXJrdXBCb3goUGFpbnRJbgogSW50
UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBsaW5lU3R5bGUuZm9udCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0
eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJv
b3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3Np
bmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAgICBMYXlvdXRSZWN0IHNlbGVjdGlv
blJlY3QgPSBMYXlvdXRSZWN0KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3Rl
ZEZvclByZWNlZGluZ0Jsb2NrKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRG
b3JQcmVjZWRpbmdCbG9jaygpKTsKQEAgLTExOSw3ICsxMTksNyBAQCBJbnRSZWN0IEVsbGlwc2lz
Qm94OjpzZWxlY3Rpb25SZWN0KCkKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rp
b25SZWN0KTsKIH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxsaXBzaXNCb3g6OnBh
aW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250KQogewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBDb2xvciBjID0gYmxvY2tGbG93KCkuc2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIGNvbnN0
IFJlbmRlclN0eWxlJik7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0
OyB9CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0
YXRlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQotICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250Q2FzY2FkZSYpOwogICAgIElubGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAKICAg
ICBib29sIG1fc2hvdWxkUGFpbnRNYXJrdXBCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMjIs
NyArMTIyLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KgogICAg
ICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2Vs
aW5lID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmJlaGF2ZXNMaWtlVGV4dCgpKSB7
CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSB8fCBjaGls
ZC0+cmVuZGVyZXIoKS5wYXJlbnQoKSAhPSAmcmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAg
IGlmICghcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50
RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5o
YXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUubGlu
ZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAgICAg
IHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElu
bGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdo
dEFuZEJhc2VsaW5lID0gdHJ1ZTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIElubGluZUZsb3dC
b3g6OmFkZFRvTGluZShJbmxpbmVCb3gqCiAgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRGbG93
Qm94ID0gZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgICAgICAgICAv
LyBDaGVjayB0aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZlcmVu
Y2VzIGluIGZvbnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgogICAgICAgICAgICAgICAg
IGlmICghY2hpbGRGbG93Qm94LmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxp
bmUoKQotICAgICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgpLmZvbnRNZXRy
aWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250
KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLmZv
bnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGlu
ZUdhcChjaGlsZFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAg
ICAgICAgICAgfHwgcGFyZW50U3R5bGUubGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhl
aWdodCgpCiAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgICAgICAgICB8fCBjaGlsZFN0eWxl
Lmhhc0JvcmRlcigpIHx8IGNoaWxkU3R5bGUuaGFzUGFkZGluZygpIHx8IGNoaWxkU3R5bGUuaGFz
VGV4dENvbWJpbmUoKSkKQEAgLTM4OCw3ICszODgsNyBAQCBmbG9hdCBJbmxpbmVGbG93Qm94Ojpw
bGFjZUJveFJhbmdlSW5JbmxpCiAgICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0g
dGV4dEJveC5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlclRleHQudGV4dExlbmd0
aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9y
TmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3guc3RhcnQoKSkpKQotICAgICAg
ICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS53
b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94
LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAg
ICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0
ZXJBdCh0ZXh0Qm94LmVuZCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXh0Qm94
LnNldExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29sIElu
bGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5mb250
RGVzY3JpcHRpb24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmll
bnRhdGlvblVwcmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERh
dGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtNDYwLDcgKzQ2MCw3IEBAIGJv
b2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChk
b3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5wcmlt
YXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNoaWxk
LT5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2Fs
R2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMg
PSBudWxscHRyOwpAQCAtODczLDcgKzg3Myw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6
OmFkZFRleHRCb3hWaXMKIAogICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICBpZiAo
bGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiB0
ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNpc01h
cmtJc0Fib3ZlKSkgewotICAgICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxl
LmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJp
bmcoKSk7CisgICAgICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5lU3R5bGUuZm9udENh
c2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJp
bmcoKSk7CiAgICAgICAgIGlmIChlbXBoYXNpc01hcmtJc0Fib3ZlID09ICFsaW5lU3R5bGUuaXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxvdyA9
IHN0ZDo6bWluKHRvcEdseXBoT3ZlcmZsb3csIC1lbXBoYXNpc01hcmtIZWlnaHQpOwogICAgICAg
ICBlbHNlCkBAIC04ODIsNyArODgyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRk
VGV4dEJveFZpcwogCiAgICAgLy8gSWYgbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmUsIHdlIHNo
b3VsZCBmYWN0b3IgdGhhdCBpbnRvIHJpZ2h0IGxheW91dCBvdmVyZmxvdy4gKEV2ZW4gaW4gUlRM
LCBsZXR0ZXItc3BhY2luZyBpcwogICAgIC8vIGFwcGxpZWQgdG8gdGhlIHJpZ2h0LCBzbyB0aGlz
IGlzIG5vdCBhbiBpc3N1ZSB3aXRoIGxlZnQgb3ZlcmZsb3cuCi0gICAgcmlnaHRHbHlwaE92ZXJm
bG93IC09IHN0ZDo6bWluKDAsIChpbnQpbGluZVN0eWxlLmZvbnQoKS5sZXR0ZXJTcGFjaW5nKCkp
OworICAgIHJpZ2h0R2x5cGhPdmVyZmxvdyAtPSBzdGQ6Om1pbigwLCAoaW50KWxpbmVTdHlsZS5m
b250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSk7CiAKICAgICBMYXlvdXRVbml0IHRleHRTaGFk
b3dMb2dpY2FsVG9wOwogICAgIExheW91dFVuaXQgdGV4dFNoYWRvd0xvZ2ljYWxCb3R0b207CkBA
IC0xNTM0LDEwICsxNTM0LDEwIEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92
ZXJBbm4KICAgICAgICAgICAgIGJvb2wgZW1waGFzaXNNYXJrSXNBYm92ZTsKICAgICAgICAgICAg
IGlmIChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFy
a05vbmUgJiYgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlz
dHNBbmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKSAmJiBlbXBo
YXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHlsZS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRv
cE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZv
bnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0
cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY2hp
bGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNN
YXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9u
IC0gdG9wT2ZFbXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90
dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGlu
dCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZExp
bmVTdHlsZS5mb250Q2FzY2FkZSgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dGQ6Om1heChyZXN1bHQsIGJvdHRvbU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBvc2l0aW9uKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTgzLDEwICsxNTgzLDEwIEBA
IExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZVVuZGVyQW4KICAgICAgICAgICAgIGRv
d25jYXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92
ZShjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSk7CiAgICAgICAgICAgICBpZiAo
Y2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25l
ICYmICFlbXBoYXNpc01hcmtJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExp
bmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBib3R0b21PZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsQm90dG9t
KCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0
eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hp
bGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5
bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3NpdGlv
bik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCB0b3BPZkVtcGhhc2lzTWFyayA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVT
dHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNp
c01hcmtTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZFbXBo
YXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5lU3R5bGUuZm9udENhc2Nh
ZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0
cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBh
bGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTQgKzI0NSwxNCBAQCBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAgICAgcmV0dXJuIHN0YXRlOwog
fQogCi1zdGF0aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgRm9udENhc2NhZGUm
IGZvbnRUb1VzZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlcmVyKQogewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNv
bWJpbmVUZXh0PihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3QgYXV0byYgdGV4dENvbWJpbmVS
ZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcik7CiAgICAgICAg
IGlmICh0ZXh0Q29tYmluZVJlbmRlcmVyLmlzQ29tYmluZWQoKSkKICAgICAgICAgICAgIHJldHVy
biB0ZXh0Q29tYmluZVJlbmRlcmVyLnRleHRDb21iaW5lRm9udCgpOwogICAgIH0KLSAgICByZXR1
cm4gc3R5bGUuZm9udCgpOworICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQogCiBM
YXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3Ms
IGludCBlbmRQb3MpIGNvbnN0CkBAIC0yNjYsNyArMjY2LDcgQEAgTGF5b3V0UmVjdCBJbmxpbmVU
ZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gdGhp
cy0+c2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlz
LT5zZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0g
dGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5l
U3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRv
VXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlcjsKICAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5
cGhlbigpOwpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWkKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHRleHRQYWludFN0eWxl
OwogCiAgICAgLy8gU2V0IG91ciBmb250LgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBmb250VG9V
c2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9
IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIC8vIDEuIFBhaW50IGJhY2tn
cm91bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gRXhhbXBsZXMgb2Ygc3VjaCBiYWNrZ3JvdW5k
cyBpbmNsdWRlIHNlbGVjdGlvbgogICAgIC8vIGFuZCBjb21wb3NpdGlvbiB1bmRlcmxpbmVzLgog
ICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZVRleHRDbGlwICYmICFpc1ByaW50aW5nKSB7CkBAIC02Nzgs
NyArNjc4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgogICAg
IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKIH0KIAotdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCit2b2lkIElubGluZVRleHRCb3g6OnBh
aW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBDb2xvciB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQogICAg
IGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAjZW5kaWYKIH0KIAotdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lk
IElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQ
b3MpCiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBzdGQ6Om1h
eChzdGFydFBvcyAtIG9mZnNldCwgMCk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBzdGF0aWMgR3Jh
cGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpCiAgICAgfQogfQogCi12b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIp
Cit2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgYm9vbCBncmFtbWFyKQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dy
YW1tYXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnBy
aW50aW5nKCkpCkBAIC0xMTI4LDcgKzExMjgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
RG9jdW1lbnRNYXJrZXIoCiAgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKEZs
b2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5l
T2Zmc2V0KSwgd2lkdGgsIGxpbmVTdHlsZUZvck1hcmtlclR5cGUobWFya2VyLnR5cGUoKSkpOwog
fQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYg
Zm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXImIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCkKIHsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRoaXMt
PnNlbGVjdGlvbkhlaWdodCgpOwogCkBAIC0xMTU5LDcgKzExNTksNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRC
b3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtl
ciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2
b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJlIG5v
dCBhY3R1YWxseSBkcmF3biwgYnV0IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQgZm9y
IGhpdCB0ZXN0aW5nLgogICAgIExheW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CkBAIC0x
MTc3LDcgKzExNzcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFj
CiAgICAgbWFya2VyLnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKLXZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQordm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgYm9vbCBiYWNrZ3JvdW5kKQogewogICAgIGlmICghcmVuZGVyZXIoKS50
ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbnQgSW5s
aW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAgICAgIHJldHVybiBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogbGVuKCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
bGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGZv
bnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIGZvbnQu
b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBsaW5l
T2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCkBAIC0x
MzQyLDcgKzEzNDIsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChp
CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBm
b250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIGludCBmcm9tID0g
IWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwogICAgIGlu
dCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3Rh
cnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwpA
QCAtMTM1Miw3ICsxMzUyLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZz
ZXQoaQogICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rp
b24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCksIHJ1bi5sdHIoKSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0
cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBT
dHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAogewog
ICAgIEFTU0VSVChyZW5kZXJlcigpLnRleHQoKSk7CiAKQEAgLTEzNjYsNyArMTM2Niw3IEBAIFRl
eHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKICAgICByZXR1cm4gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAt
IHN0YXJ0UG9zLCBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKTsKIH0KIAotVGV4dFJ1biBJbmxpbmVU
ZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
Rm9udCYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3RyaW5n
KiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyog
aHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKICAgICBMYXlvdXRVbml0
IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZyogaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1M
ZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZv
bnRDYXNjYWRlJiwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29u
c3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyog
aHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwogCiBwdWJsaWM6CiAgICAg
dmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIEZs
b2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNDgsMTcgKzE0OCwx
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zm
c2V0KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwot
ICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29s
IGJhY2tncm91bmQpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2
b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJv
b2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRp
b25VbmRlcmxpbmUmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFRleHREZWNvcmF0aW9u
LCBUZXh0RGVjb3JhdGlvblN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwgVGV4dFBhaW50ZXImKTsK
LSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQ29sb3IgdGV4
dENvbG9yKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBh
aW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgQ29sb3IgdGV4dENvbG9yKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJv
b2wgZ3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJik7CiAKLSAgICB2b2lkIGNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYsIGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgY29tcHV0ZVJlY3RGb3JS
ZXBsYWNlbWVudE1hcmtlcihSZW5kZXJlZERvY3VtZW50TWFya2VyJiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyNSw3
ICsyMzI1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAg
ICAgICByZXR1cm4gbGVmdDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcg
YXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUg
ZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRo
ID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhD
aGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIGxlZnQ7
CiAKQEAgLTIzNjUsNyArMjM2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExv
Z2ljYWxSaWcKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBs
ZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0
IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5z
dHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9h
dCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAg
ICByZXR1cm4gcmlnaHQ7CiAKQEAgLTMwMDMsNyArMzAwMyw3IEBAIHN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CiAgICAgICAgIHBzZXVkb1N0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcHNldWRv
U3R5bGUtPmZvbnQoKS51cGRhdGUocHNldWRvU3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7
CisgICAgICAgIHBzZXVkb1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShwc2V1ZG9TdHlsZS0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQgZGVz
aXJlZENhcEhlaWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkg
KiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0
KCk7CiAgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJp
Y3MoKS5jYXBIZWlnaHQoKTsKQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsK
ICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHBzZXVk
b1N0eWxlLT5mb250KCkudXBkYXRlKHBzZXVkb1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICAgICAgcHNldWRvU3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKHBzZXVkb1N0
eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIGFjdHVhbENh
cEhlaWdodCA9IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzY5Myw3ICszNjkzLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6
OnJlbmRlck5hbWUoKSBjbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2Jq
ZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b24pCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wg
ZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7
CkBAIC0zNzA4LDcgKzM3MDgsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4
dFJ1bkluCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlu
bGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChSZW5kZXJPYmplY3QqIGNvbnRl
eHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gTFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxl
LnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CkBAIC0zNzI3LDI0ICszNzI3LDI0IEBAIHN0
YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICByZXR1cm4gcnVuOwog
fQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVu
OjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRl
eHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0eWxlLCBl
eHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJu
IGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5n
dGgsIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
UmVuZGVyVGV4dCogdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBh
bnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IFJlbmRlclRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6
RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIGlmICh0ZXh0LT5pczhCaXQoKSkK
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCB0
ZXh0LT5jaGFyYWN0ZXJzOCgpLCB0ZXh0LT50ZXh0TGVuZ3RoKCksIHN0eWxlLCBleHBhbnNpb24p
OwogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4
dC0+Y2hhcmFjdGVyczE2KCksIHRleHQtPnRleHRMZW5ndGgoKSwgc3R5bGUsIGV4cGFuc2lvbik7
CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBU
ZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbikKIHsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHRleHQt
PnRleHRMZW5ndGgoKSk7CiAgICAgaWYgKHRleHQtPmlzOEJpdCgpKQpAQCAtMzc1Miw3ICszNzUy
LDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZQogICAgIHJldHVy
biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgdGV4dC0+Y2hhcmFjdGVy
czE2KCkgKyBvZmZzZXQsIGxlbmd0aCwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAKLVRleHRSdW4g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25z
dCBGb250JiBmb250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBm
bGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0
KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwyMiArMjAyLDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpICYmICFvYmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYgIW9i
ai0+Y29udGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6
RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4
dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRS
dW5GbGFncyk7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5k
ZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmpl
Y3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgUmVuZGVyVGV4dCosIGNvbnN0
IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFu
c2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlv
ciA9IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFk
aW5nRXhwYW5zaW9uKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVu
ZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgUmVuZGVyVGV4dCosIHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgUmVuZGVyU3R5bGUmLAorICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFJlbmRlclRleHQqLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAg
ICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0
aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3Qg
Rm9udCYsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJT
dHlsZSYsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3Qq
IGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9y
YmlkTGVhZGluZ0V4cGFuc2lvbik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgc3RhdGljIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0
eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbik7CiAg
ICAgCiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlw
VHJhaWxpbmdTcGFjZShmbAogICAgICAgICAvLyBDb2xsYXBzZSBhd2F5IHRoZSB0cmFpbGluZyBz
cGFjZSBhdCB0aGUgZW5kIG9mIGEgYmxvY2suCiAgICAgICAgIFJlbmRlclRleHQmIHJlbmRlclRl
eHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqdHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAgICAg
Y29uc3QgVUNoYXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5k
ZXJUZXh0LnN0eWxlKCkuZm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUu
CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcmVuZGVyVGV4dC5zdHlsZSgpLmZv
bnRDYXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAg
ZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oJnJlbmRlclRleHQsIGZvbnQsICZzcGFjZSwgMSwgcmVuZGVyVGV4dC5zdHlsZSgpKSk7CiAg
ICAgICAgIGlubGluZU1heCAtPSBzcGFjZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOwogICAg
ICAgICBpZiAoaW5saW5lTWluID4gaW5saW5lTWF4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNl
dExvZ2ljYWxXaWR0aEZvclRleAogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBm
YWxsYmFja0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAotICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8p
LmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVy
ZXItPnBhcmVudCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKICAgICAvLyBBbHdheXMgY29t
cHV0ZSBnbHlwaCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJveC1jb250YWluIHZhbHVl
IGlzICJnbHlwaHMiLgogICAgIGlmIChsaW5lQm94LT5maXRzVG9HbHlwaHMoKSkgewogICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdzIGZvbnQgYm94LCB0
aGVuIGRvbid0IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93LiBUaGlzIG9wdGlt
aXphdGlvbgpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2Fs
V2lkdGhGb3JUZXgKICAgICAgICAgICAgICAgICAgICAgJndvcmRNZWFzdXJlbWVudC5mYWxsYmFj
a0ZvbnRzLCAmb3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgIFVDaGFyIGMgPSByZW5kZXJlci0+
Y2hhcmFjdGVyQXQod29yZE1lYXN1cmVtZW50LnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBpZiAoaSA+IDAgJiYgd29yZExlbmd0aCA9PSAxICYmIChjID09ICcgJyB8fCBjID09ICdcdCcp
KQotICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRlcmVyLT5zdHlsZSgp
LmZvbnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRo
ICs9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1lYXN1
cmVtZW50LndpZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tG
b250cy5pc0VtcHR5KCkpIHsKQEAgLTc0MywxNCArNzQzLDE0IEBAIEJpZGlSdW4qIFJlbmRlckJs
b2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT0gSlVT
VElGWSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1bikgewogICAgICAgICAgICAgICAgIGlmICgh
aXNBZnRlckV4cGFuc2lvbikKICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4
dEJveD4oKnJ1bi0+Ym94KCkpLnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKHRydWUpOwotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9zdGFydCwgcnVu
LT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5zdHJpbmdWaWV3KHJ1bi0+bV9z
dGFydCwgcnVuLT5tX3N0b3ApLCBydW4tPmJveCgpLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFu
c2lvbik7CiAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bw
b3J0dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50ICs9IG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGludCBsZW5ndGggPSByZW5kZXJUZXh0LnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAg
ICAgIGlmICghcnVuLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3
bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1bi0+bV9zdGFydCkpKQotICAgICAgICAgICAg
ICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFyZW50
KCksIGxpbmVJbmZvKS5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
dG90YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5l
SW5mbykuZm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIG5lZWRz
V29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHJ1
bi0+bV9zdG9wIC0gMSkpICYmIHJ1bi0+bV9zdG9wID09IGxlbmd0aDsKICAgICAgICAgICAgIH0K
IApAQCAtNzY4LDcgKzc2OCw3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlu
bGluZUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVUZXh0Qm94
PigqbGVhZkNoaWxkKS5zZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4o
bGVhZkNoaWxkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9wcG9ydHVuaXRpZXNJblJ1biA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVu
ZGVyVGV4dC5zdHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBh
bnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0lu
UnVuID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocmVuZGVyVGV4dC5z
dHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCksIGlzQWZ0ZXJFeHBhbnNpb24pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQob3Bw
b3J0dW5pdGllc0luUnVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQgKz0gb3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0xOTA3LDkgKzE5MDcsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tMaW5lc0Zv
clRleHRPCiB7CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMgdXNp
bmcgdGhlIGN1cnJlbnQgZm9udC4KICAgICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29u
ZmlndXJhYmxlLCBhbHNvIG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jpem9u
dGFsIGVsbGlwc2lzIGlzICJub3QgcmVuZGVyYWJsZSIKLSAgICBjb25zdCBGb250JiBmb250ID0g
c3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7Ci0gICAgY29uc3Qg
Rm9udCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBmaXJzdExpbmVGb250ID0gZmlyc3RMaW5lU3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOwogICAgIGZsb2F0IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxp
cHNpcywgMSwgZmlyc3RMaW5lU3R5bGUoKSkpOwogICAgIGZsb2F0IGVsbGlwc2lzV2lkdGggPSAo
Zm9udCA9PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwg
c3R5bGUoKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6c2V0UmVuZGVyZWRUZXh0KAogICAgIG1fbmVlZHNG
b250VXBkYXRlID0gdHJ1ZTsKIH0KIAotZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBv
c2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4
dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAg
ICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgcmV0dXJuIGZvbnQuc2l6ZSgpOwpAQCAtMTA4
LDcgKzEwOCw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBm
bG9hdCBjb21iaW5lZFRleHRXaWR0aCA9IHdpZHRoKDAsIHRleHRMZW5ndGgoKSwgb3JpZ2luYWxG
b250KCksIDAsIG51bGxwdHIsICZnbHlwaE92ZXJmbG93KTsKICAgICBtX2lzQ29tYmluZWQgPSBj
b21iaW5lZFRleHRXaWR0aCA8PSBlbVdpZHRoOwogICAgIAotICAgIEZvbnRTZWxlY3RvciogZm9u
dFNlbGVjdG9yID0gc3R5bGUoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7
CiAKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICBzaG91bGRVcGRhdGVGb250ID0gbV9j
b21iaW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOyAvLyBOZWVk
IHRvIGNoYW5nZSBmb250IG9yaWVudGF0aW9uIHRvIGhvcml6b250YWwuCkBAIC0xMTcsNyArMTE3
LDggQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgICAgICBzdGF0
aWMgY29uc3QgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnRzW10gPSB7IEhhbGZXaWR0aCwg
VGhpcmRXaWR0aCwgUXVhcnRlcldpZHRoIH07CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgod2lkdGhWYXJpYW50cykgOyArK2kpIHsKICAgICAgICAgICAg
IGRlc2NyaXB0aW9uLnNldFdpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnRzW2ldKTsKLSAgICAgICAg
ICAgIEZvbnQgY29tcHJlc3NlZEZvbnQgPSBGb250KGRlc2NyaXB0aW9uLCBzdHlsZSgpLmZvbnQo
KS5sZXR0ZXJTcGFjaW5nKCksIHN0eWxlKCkuZm9udCgpLndvcmRTcGFjaW5nKCkpOworCisgICAg
ICAgICAgICBGb250Q2FzY2FkZSBjb21wcmVzc2VkRm9udChkZXNjcmlwdGlvbiwgc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRT
cGFjaW5nKCkpOwogICAgICAgICAgICAgY29tcHJlc3NlZEZvbnQudXBkYXRlKGZvbnRTZWxlY3Rv
cik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZsb2F0IHJ1bldpZHRoID0gUmVuZGVyVGV4
dDo6d2lkdGgoMCwgdGV4dExlbmd0aCgpLCBjb21wcmVzc2VkRm9udCwgMCwgbnVsbHB0ciwgJmds
eXBoT3ZlcmZsb3cpOwpAQCAtMTM2LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6
OmNvbWJpbmVUZXh0KCkKICAgICAgICAgc2hvdWxkVXBkYXRlRm9udCA9IG1fY29tYmluZUZvbnRT
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigp
KTsKIAogICAgIGlmIChzaG91bGRVcGRhdGVGb250KQotICAgICAgICBtX2NvbWJpbmVGb250U3R5
bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKyAgICAgICAgbV9jb21iaW5lRm9udFN0
eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShmb250U2VsZWN0b3IpOwogCiAgICAgaWYgKG1faXND
b21iaW5lZCkgewogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclN0cmluZywgKCZvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciwgMSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAj
aWZuZGVmIFJlbmRlckNvbWJpbmVUZXh0X2gKICNkZWZpbmUgUmVuZGVyQ29tYmluZVRleHRfaAog
Ci0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCkBAIC0zOCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdp
bihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0
OwogICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmLCBpbnQmIGxlbmd0aCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVk
OyB9Ci0gICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9udCkgY29uc3Qg
eyByZXR1cm4gZm9udC5zaXplKCk7IH0KLSAgICBjb25zdCBGb250JiBvcmlnaW5hbEZvbnQoKSBj
b25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250KCk7IH0KLSAgICBjb25zdCBGb250
JiB0ZXh0Q29tYmluZUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbWJpbmVGb250U3R5bGUtPmZv
bnQoKTsgfQorICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBvcmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250Q2Fz
Y2FkZSgpOyB9CisgICAgY29uc3QgRm9udENhc2NhZGUmIHRleHRDb21iaW5lRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tYmluZUZvbnRTdHlsZS0+Zm9udENhc2NhZGUoKTsgfQogCiBwcml2YXRl
OgogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmlydHVhbCBib29sIGlz
Q29tYmluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQm
LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZv
bnRDYXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuICJSZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKIAotI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtOTk3LDcg
Kzk5Nyw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUwKICAgICAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNB
bmRTcGFjZVN0ciwgKGVsbGlwc2lzQW5kU3BhY2UsIDIpKTsKICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRh
bEVsbGlwc2lzLCAxKSk7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBu
dW1WaXNpYmxlTGluZXMgPT0gMSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgICAg
ICBjb25zdCBGb250JiBmb250ID0gbGluZVN0eWxlLmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKIAogICAgICAgICAvLyBH
ZXQgZWxsaXBzaXMgd2lkdGgsIGFuZCBpZiB0aGUgbGFzdCBjaGlsZCBpcyBhbiBhbmNob3IsIGl0
IHdpbGwgZ28gYWZ0ZXIgdGhlIGVsbGlwc2lzLCBzbyBhZGQgaW4gYSBzcGFjZSBhbmQgdGhlIGFu
Y2hvciB3aWR0aCB0b28KICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbFdpZHRoOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRP
YmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdDsKICAgICBG
bG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0Owot
ICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2FzY2FkZSBmb250OwogICAgIFRleHRSdW4gcnVuKCIi
KTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFnZXRSZXBsYWNlbWVudFRleHRHZW9t
ZXRyeShwYWludE9mZnNldCwgY29udGVudFJlY3QsIGluZGljYXRvclJlY3QsIHJlcGxhY2VtZW50
VGV4dFJlY3QsIGFycm93UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQpAQCAtMzQ5LDcgKzM0
OSw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFVuYXZhaWxhYmwKICAgICByZXBh
aW50KCk7CiB9CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0
JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxh
Y2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiBmb250LCBUZXh0UnVu
JiBydW4sIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0Citib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0
OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNhdG9yUmVj
dCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93UmVjdCwg
Rm9udENhc2NhZGUmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3QK
IHsKICAgICBib29sIGluY2x1ZGVzQXJyb3cgPSBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3Nh
Z2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKIApA
QCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2Vt
ZW4KICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShmcmFtZSgpLnNldHRpbmdzKCkuZm9udFJl
bmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgxMik7
Ci0gICAgZm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKKyAgICBmb250ID0gRm9u
dENhc2NhZGUoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZSgwKTsKIAog
ICAgIHJ1biA9IFRleHRSdW4obV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4dCk7CkBA
IC0zOTEsNyArMzkxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dW5hdmFp
bAogICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0OwogICAgIEZsb2F0UmVjdCByZXBsYWNlbWVu
dFRleHRSZWN0OwogICAgIEZsb2F0UmVjdCBhcnJvd1JlY3Q7Ci0gICAgRm9udCBmb250OworICAg
IEZvbnRDYXNjYWRlIGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIsIDApOwogICAgIGZsb2F0IHRl
eHRXaWR0aDsKICAgICBpZiAoZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoYWNjdW11bGF0ZWRP
ZmZzZXQsIGNvbnRlbnRSZWN0LCBpbmRpY2F0b3JSZWN0LCByZXBsYWNlbWVudFRleHRSZWN0LCBh
cnJvd1JlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBib29s
IFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFiCiAgICAgRmxvYXRSZWN0IGluZGlj
YXRvclJlY3Q7CiAgICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRmxvYXRS
ZWN0IGFycm93UmVjdDsKLSAgICBGb250IGZvbnQ7CisgICAgRm9udENhc2NhZGUgZm9udDsKICAg
ICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwogICAgIHJldHVybiBnZXRS
ZXBsYWNlbWVudFRleHRHZW9tZXRyeShJbnRQb2ludCgpLCBjb250ZW50UmVjdCwgaW5kaWNhdG9y
UmVjdCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgYXJyb3dSZWN0LCBmb250LCBydW4sIHRleHRXaWR0
aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9v
bCk7CiAgICAgYm9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VF
dmVudCYpIGNvbnN0OwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21l
dHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250
ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50
VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0
ZXh0V2lkdGgpIGNvbnN0OworICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0
LCBGbG9hdFJlY3QmIGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVj
dCwgRmxvYXRSZWN0JiBhcnJvd1JlY3QsIEZvbnRDYXNjYWRlJiwgVGV4dFJ1biYsIGZsb2F0JiB0
ZXh0V2lkdGgpIGNvbnN0OwogICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0
b3JCb3VuZHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjCiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheWVkRmlsZW5hbWUgPSBm
aWxlVGV4dFZhbHVlKCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQo
KTsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCk7CiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9u
dCwgZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBh
bnNpb24sIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwogICAg
ICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBA
QCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlSW50CiAgICAgLy8gKHVzaW5n
ICIwIiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgIGNvbnN0IFVDaGFyIGNoYXJhY3Rl
ciA9ICcwJzsKICAgICBjb25zdCBTdHJpbmcgY2hhcmFjdGVyQXNTdHJpbmcgPSBTdHJpbmcoJmNo
YXJhY3RlciwgMSk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcgY29u
c3RydWN0VGV4dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KICAgICBSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbCogcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250
cm9sKj4odGhpcyk7CiAgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0V2lk
dGhOdW1DaGFycyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwg
Y2hhcmFjdGVyQXNTdHJpbmcsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNp
b24pKTsKQEAgLTI3MSw5ICsyNzEsOSBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmZpbGVUZXh0CiAgICAgQVNTRVJUKGlucHV0RWxlbWVudCgpLmZpbGVzKCkpOwogI2lmIFBMQVRG
T1JNKElPUykKICAgICBpZiAoaW5wdXRFbGVtZW50KCkuZmlsZXMoKS0+bGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoaW5wdXRFbGVtZW50KCku
ZGlzcGxheVN0cmluZygpLCBtYXhGaWxlbmFtZVdpZHRoKCksIHN0eWxlKCkuZm9udCgpLCBTdHJp
bmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICByZXR1cm4gU3RyaW5n
VHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGlucHV0RWxlbWVudCgpLmRpc3BsYXlTdHJpbmcoKSwg
bWF4RmlsZW5hbWVXaWR0aCgpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIFN0cmluZ1RydW5jYXRv
cjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CiAjZW5kaWYKLSAgICByZXR1cm4gdGhlbWUoKS5maWxl
TGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBzdHlsZSgpLmZvbnQoKSwg
bWF4RmlsZW5hbWVXaWR0aCgpLCBpbnB1dEVsZW1lbnQoKS5tdWx0aXBsZSgpKTsKKyAgICByZXR1
cm4gdGhlbWUoKS5maWxlTGlzdE5hbWVGb3JXaWR0aChpbnB1dEVsZW1lbnQoKS5maWxlcygpLCBz
dHlsZSgpLmZvbnRDYXNjYWRlKCksIG1heEZpbGVuYW1lV2lkdGgoKSwgaW5wdXRFbGVtZW50KCku
bXVsdGlwbGUoKSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgUmVmPFJlbmRlclN0eWxlPiBSZW5kZXJG
bG93VGhyZWFkOjpjcmVhdAogICAgIG5ld1N0eWxlLmdldCgpLnNldFRvcChMZW5ndGgoMCwgRml4
ZWQpKTsKICAgICBuZXdTdHlsZS5nZXQoKS5zZXRXaWR0aChMZW5ndGgoMTAwLCBQZXJjZW50KSk7
CiAgICAgbmV3U3R5bGUuZ2V0KCkuc2V0SGVpZ2h0KExlbmd0aCgxMDAsIFBlcmNlbnQpKTsKLSAg
ICBuZXdTdHlsZS5nZXQoKS5mb250KCkudXBkYXRlKDApOworICAgIG5ld1N0eWxlLmdldCgpLmZv
bnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogICAgIHJldHVybiBuZXdTdHlsZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxT
Y3JlZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBSZWY8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0
WkluZGV4KElOVF9NQVgpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEZvbnREZXNj
cmlwdGlvbihGb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZv
bnQoKS51cGRhdGUoMCk7CisgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCku
dXBkYXRlKG51bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3BsYXko
RkxFWCk7CiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEp1c3RpZnlDb250ZW50KEp1c3Rp
ZnlDZW50ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6c2V0
SW1hZ2VTaXplRm9yQWx0VGV4dAogCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2Vy
IG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgp
OworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KTsKICAgICAgICAgSW50U2l6ZSBwYWRkZWRUZXh0U2l6ZShwYWRkaW5nV2lkdGggKyBzdGQ6Om1p
bihjZWlsZihmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZv
bnQsIG1fYWx0VGV4dCwgc3R5bGUoKSkpKSwgbWF4QWx0VGV4dFdpZHRoKSwgcGFkZGluZ0hlaWdo
dCArIHN0ZDo6bWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhlaWdo
dCkpOwogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemUuZXhwYW5kZWRUbyhwYWRkZWRUZXh0
U2l6ZSk7CiAgICAgfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKG1fYWx0VGV4dCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZSgpLmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IEZv
bnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3MoKTsKICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwogICAgICAgICAg
ICAgICAgIExheW91dFBvaW50IGFsdFRleHRPZmZzZXQgPSBwYWludE9mZnNldDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXND
cmVhdGVMaW4KICAgICAgICAgfHwgKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRTdHlsZS0+
dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FKQogICAgICAgICB8fCBzdHlsZSgpLnZlcnRpY2Fs
QWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgpLnRleHRFbXBoYXNpc01hcmso
KSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZQotICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAoIXBh
cmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50
QW5kTGluZUdhcChzdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpKQorICAgICAgICB8fCAoY2hl
Y2tGb250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFz
SWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZv
bnRNZXRyaWNzKCkpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5
bGUoKS5saW5lSGVpZ2h0KCkpKQogICAgICAgICB8fCAoZmxvd1RocmVhZCAmJiBmbG93VGhyZWFk
LT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKTsgLy8gRklYTUU6IEVuYWJsZSB0aGUgb3B0aW1p
emF0aW9uIG9uY2Ugd2UgbWFrZSBvdmVyZmxvdyBjb21wdXRhdGlvbiBmb3IgY3VsbGVkIGlubGlu
ZXMgaW4gcmVnaW9ucy4KIApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1
cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3Qg
bGluZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmly
c3RMaW5lU3R5bGUoKTsKICAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExp
bmVTdHlsZSgpOwotICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAhcGFyZW50U3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2Fw
KGNoaWxkU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpCisgICAgICAgIGFsd2F5c0NyZWF0ZUxp
bmVCb3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lk
ZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5m
b250TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkg
IT0gQkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0g
Y2hpbGRTdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgfQpAQCAtNTc0LDggKzU3NCw4IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgIGlmIChyZW5k
ZXJCb3guaW5saW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElu
bGluZUJveCYgcm9vdEJveCA9IHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsK
ICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290
Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWlu
ZXItPnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94Lmxv
Z2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwot
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyU3R5bGUuZm9udCgp
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3Ag
PSByb290Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWln
aHQgPSBjb250YWluZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT54
KCkgLSByZW5kZXJCb3gubWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCByZW5kZXJCb3gud2lkdGgo
KSArIHJlbmRlckJveC5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGxvZ2ljYWxIZWlnaHQpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveAogICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxv
d0JveCogY2hpbGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7
IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgewogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJv
b3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRh
aW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290
Qm94LmxvZ2ljYWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNh
bFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gY29udGFpbmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXJTdHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3Qo
RmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgp
LApAQCAtNjEwLDggKzYxMCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExp
bmVCb3gKICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRl
eHQuZmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5uZXh0
VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJv
eCA9IGNoaWxkVGV4dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBjb250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmly
c3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCku
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gu
bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFp
bmVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxvYXRSZWN0KGNoaWxkVGV4
dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVp
Z2h0KSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3gKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCB1c2UgYSBoZWxwZXIgdG8gc2hhcmUgdGhlc2Ugd2l0aCB0ZXh0IHBhdGgu
CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGlubGluZUJv
eC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjb250YWluZXJT
dHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUo
KSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IHJvb3RCb3gubG9naWNhbFRvcCgpICsgKHJvb3RCb3gubGluZVN0eWxlKCkuZm9udCgpLmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXJTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGNvbnRhaW5lclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJT
dHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6
b250YWwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QoaW5s
aW5lQm94LT54KCksIGxvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFdpZHRoKCksIGxvZ2lj
YWxIZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxp
c3RJdGVtc1tpXTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwotICAgICAgICAgICAgRm9udCBp
dGVtRm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgICAgICAgICAgRm9udENhc2NhZGUgaXRlbUZv
bnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVu
dCkpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVu
dD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICBk
LnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVtRm9udCA9
IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygp
KTsKKyAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250Lmxl
dHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICAgICAg
aXRlbUZvbnQudXBkYXRlKGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxl
Y3RvcigpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRT
aXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSog
aXRlbVN0eWxlLCBGb250IGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3Rh
dGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJl
bmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0
ZW1Cb3VkaW5nQm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0
eWxlLT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3Qg
SlVTVElGWS4gU2hvdWxkIHdlPwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxs
Q29sb3IodGV4dENvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihpdGVt
VGV4dCwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgaXRlbVN0eWxlLT5k
aXJlY3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUtPnVuaWNvZGVCaWRpKCkpLCB0cnVlLCBU
ZXh0UnVuOjpOb1JvdW5kaW5nKTsKLSAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS5mb250KCk7
CisgICAgRm9udENhc2NhZGUgaXRlbUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAg
TGF5b3V0UmVjdCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4
KTsKICAgICByLm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVuLCBpdGVtU3R5bGUs
IGl0ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJ
dGVtRWxlbWVudCkpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0g
ICAgICAgIGl0ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1G
b250LndvcmRTcGFjaW5nKCkpOworICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0
ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAg
IGl0ZW1Gb250LnVwZGF0ZShkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5mb250U2Vs
ZWN0b3IoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgpAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7
CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAg
ICAgVGV4dFJ1biB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywg
Zm9udCwgbV90ZXh0LCBzdHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogCiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGggPSAwOwogICAgIEVMaXN0U3R5bGVUeXBlIHR5cGUgPSBzdHlsZSgpLmxp
c3RTdHlsZVR5cGUoKTsKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1h
cmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBB
c3Rlcmlza3M6CiAgICAgICAgIGNhc2UgRm9vdG5vdGVzOiB7Ci0gICAgICAgICAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgICAgICAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKICAgICAgICAgICAgIFRleHRSdW4gcnVu
ID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHls
ZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVh
ZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgICAgICAgICByZWxhdGl2
ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIGZvbnQud2lkdGgocnVuKSwgZm9udC5mb250TWV0cmljcygp
LmhlaWdodCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1MSw3ICsxODUxLDcgQEAgSW50
UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICBjYXNlIFVyZHU6
CiAgICAgICAgICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9u
dCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIERlZmF1bHRU
ZXh0UnVuRmxhZ3MpOwogICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgocnVu
KTsKICAgICAgICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4
KHR5cGUsIG1fbGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsNyArMTk2LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bAogICAgIGlmIChtX2lubmVyQmxvY2spIC8vIFJlbmRlckJsb2NrIGhhbmRsZWQgdXBkYXRpbmcg
dGhlIGFub255bW91cyBibG9jaydzIHN0eWxlLgogICAgICAgICBhZGp1c3RJbm5lclN0eWxlKCk7
CiAKLSAgICBib29sIGZvbnRDaGFuZ2VkID0gIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5mb250KCkg
IT0gc3R5bGUoKS5mb250KCk7CisgICAgYm9vbCBmb250Q2hhbmdlZCA9ICFvbGRTdHlsZSB8fCBv
bGRTdHlsZS0+Zm9udENhc2NhZGUoKSAhPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYg
KGZvbnRDaGFuZ2VkKSB7CiAgICAgICAgIHVwZGF0ZU9wdGlvbnNXaWR0aCgpOwogICAgICAgICBt
X25lZWRzT3B0aW9uc1dpZHRoVXBkYXRlID0gZmFsc2U7CkBAIC0yMjIsMTMgKzIyMiwxMyBAQCB2
b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgICAgICBpZiAo
UmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAg
ICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25T
dHlsZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS5mb250KCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCk7CiAgICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWls
aW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgRGVmYXVsdFRl
eHRSdW5GbGFncyk7CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gZm9udC53aWR0aChy
dW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4T3B0aW9uV2lkdGggPSBzdGQ6Om1h
eChtYXhPcHRpb25XaWR0aCwgb3B0aW9uV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9u
dCgpOworICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7CiAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxp
bmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBEZWZhdWx0VGV4
dFJ1bkZsYWdzKTsKICAgICAgICAgICAgIG1heE9wdGlvbldpZHRoID0gc3RkOjptYXgobWF4T3B0
aW9uV2lkdGgsIGZvbnQud2lkdGgocnVuKSk7CiAgICAgICAgIH0KQEAgLTUyMyw3ICs1MjMsNyBA
QCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgZ2V0SXRlbUJh
Y2tncm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXNDdXN0
b21CYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+
cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5jb21wdXRl
ZFN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwg
c3R5bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVy
biBzdHlsZSA/IFBvcHVwTWVudVN0eWxlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLT5mb250Q2FzY2FkZSgp
LCBzdHlsZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLT5kaXNwbGF5
KCkgPT0gTk9ORSwgdHJ1ZSwgc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUtPmRpcmVjdGlvbigp
LCBpc092ZXJyaWRlKHN0eWxlLT51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3Rv
bUJhY2tncm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3Ig
OiBQb3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcikgOiBtZW51U3R5bGUoKTsK
IH0KQEAgLTU2NCw3ICs1NjQsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVu
dVN0eWxlCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBtX2lubmVyQmxvY2sg
PyBtX2lubmVyQmxvY2stPnN0eWxlKCkgOiBzdHlsZSgpOwogICAgIEludFJlY3QgYWJzQm91bmRz
ID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICByZXR1
cm4gUG9wdXBNZW51U3R5bGUoc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSwKLSAgICAgICAgc3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9Vc2Uu
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsCisg
ICAgICAgIHN0eWxlVG9Vc2UuZm9udENhc2NhZGUoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwKICAgICAgICAgc3R5bGUo
KS5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
LCBzdHlsZVRvVXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5kaXJlY3Rpb24oKSwg
aXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6RGVmYXVs
dEJhY2tncm91bmRDb2xvciwKICAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0
aGVtZSgpLnBvcHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFJlbmRlclJ1YnlSdW46OmxheW91dCgpCiAg
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcnQtPnN0eWxlKCkucnVieVBvc2l0
aW9uKCkgPT0gUnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIpIHsKICAgICAgICAgLy8gQm9wb21v
Zm8uIFdlIG5lZWQgdG8gbW92ZSB0aGUgUmVuZGVyUnVieVRleHQgb3ZlciB0byB0aGUgcmlnaHQg
c2lkZSBhbmQgY2VudGVyIGl0CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgcmVsYXRpdmUgdG8gdGhl
IGJhc2UuCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLmZvbnQoKTsKLSAgICAg
ICAgZmxvYXQgZGlzdGFuY2VCZXR3ZWVuQmFzZSA9IG1heChmb250LmxldHRlclNwYWNpbmcoKSwg
Mi4wZiAqIHJ0LT5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpKTsKKyAgICAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CisgICAg
ICAgIGZsb2F0IGRpc3RhbmNlQmV0d2VlbkJhc2UgPSBtYXgoZm9udC5sZXR0ZXJTcGFjaW5nKCks
IDIuMGYgKiBydC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkp
OwogICAgICAgICBzZXRXaWR0aCh3aWR0aCgpICsgZGlzdGFuY2VCZXR3ZWVuQmFzZSAtIGZvbnQu
bGV0dGVyU3BhY2luZygpKTsKICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiByYiA9IHJ1YnlC
YXNlKCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgZmlyc3RMaW5lVG9wID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIFBvcHVwTWVudVN0eWxl
IFJlbmRlclNlYXJjaEZpZWxkOjppdGVtU3QKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNo
RmllbGQ6Om1lbnVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCku
Zm9udCgpLCBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAorICAgIHJldHVybiBQb3B1
cE1lbnVTdHlsZShzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSwgc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCksIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lC
TEUsCiAgICAgICAgIHN0eWxlKCkuZGlzcGxheSgpID09IE5PTkUsIHRydWUsIHN0eWxlKCkudGV4
dEluZGVudCgpLCBzdHlsZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29k
ZUJpZGkoKSksIFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNzg0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOSw4ICsyMjksOCBAQCBib29sIFJlbmRlclRleHQ6OmlzVGV4dEZyYWdtZW50
KCkgY29uc3QKIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9s
KCkgY29uc3QKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OwotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9u
dCgpLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChzdHlsZS5mb250KCkudXNlQmFja3NsYXNo
QXNZZW5TeW1ib2woKSkKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKHN0eWxl
LmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIG1fdXNl
QmFja3NsYXNoQXNZZW5TeW1ib2wgPSBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKTsK
ICAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwotICAg
IH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9
IG5ld1N0eWxlLmZvbnQoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpKSB7CisgICAgfSBlbHNl
IGlmIChvbGRTdHlsZS0+Zm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpICE9
IG5ld1N0eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkgewogICAg
ICAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC00NTEs
NyArNDUxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAg
IHJldHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0
Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0
IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAorQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBG
b250Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5
bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CiAg
ICAgICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJl
bmRlckNvbWJpbmVUZXh0PigqdGhpcyk7CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBSZW5kZXJU
ZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0
cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcg
fHwgKHRleHRbMF0gPT0gJ1xuJyAmJiAhc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpIHx8IHRleHRb
MF0gPT0gJ1x0JykgewotICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOyAv
LyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBm
aXJzdC1saW5lLgogICAgICAgICBpZiAoc3RyaXBGcm9udFNwYWNlcykgewogICAgICAgICAgICAg
Y29uc3QgVUNoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0g
Zm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmc3Bh
Y2UsIDEsIHN0eWxlKSk7CkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmlt
bWVkUHJlZldpZHRocyhmbG9hdAogCiAgICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRocyBieSBz
Y2FubmluZyB0aGUgc3RyaW5nIGZvciBuZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWspIHsKLSAg
ICAgICAgY29uc3QgRm9udCYgZiA9IHN0eWxlLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3Jl
cyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZiA9IHN0eWxlLmZvbnRD
YXNjYWRlKCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgYm9v
bCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBiZWdpbk1heFcgPSBtYXhXOwogICAgICAgICBl
bmRNYXhXID0gbWF4VzsKQEAgLTYzNywxMyArNjM3LDEzIEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmRO
b0ZhbGxiYWNrRm9udHMgPSB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldp
ZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQorc3RhdGljIGlubGlu
ZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSkp
OwogfQogCi1zdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5n
VmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZp
eExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZs
b2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQs
IGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBp
bnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAgc3VmZml4U3RhcnQg
PSAwOwogICAgIGlmICh3b3JkLmxlbmd0aCgpIDw9IG1pbmltdW1TdWZmaXhMZW5ndGgpCkBAIC03
MDEsNyArNzAxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAog
ICAgIG1faGFzRW5kV1MgPSBmYWxzZTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9
IHRoaXMtPnN0eWxlKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsgLy8g
RklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1s
aW5lLgogICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gZm9udC53b3JkU3BhY2luZygpOwogICAgIGlu
dCBsZW4gPSB0ZXh0TGVuZ3RoKCk7CiAgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFrSXRl
cmF0b3IobV90ZXh0LCBzdHlsZS5sb2NhbGUoKSwgbWFwTGluZUJyZWFrVG9JdGVyYXRvck1vZGUo
c3R5bGUubGluZUJyZWFrKCkpKTsKQEAgLTEyMTUsMTAgKzEyMTUsMTAgQEAgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgICAgICBsZW4gPSB0ZXh0TGVuZ3RoKCkg
LSBmcm9tOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IGZpcnN0TGluZSA/
IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwotICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4s
IGxpbmVTdHlsZS5mb250KCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwor
ICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4UG9z
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6
d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250JiBmLCBmbG9hdCB4
UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdCB4
UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBsZW4g
PD0gdGV4dExlbmd0aCgpKTsKICAgICBpZiAoIXRleHRMZW5ndGgoKSkKQEAgLTEyMjYsNyArMTIy
Niw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKIAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgZmxvYXQgdzsKLSAg
ICBpZiAoJmYgPT0gJnN0eWxlLmZvbnQoKSkgeworICAgIGlmICgmZiA9PSAmc3R5bGUuZm9udENh
c2NhZGUoKSkgewogICAgICAgICBpZiAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSgpICYmICFmcm9t
ICYmIGxlbiA9PSB0ZXh0TGVuZ3RoKCkgJiYgKCFnbHlwaE92ZXJmbG93IHx8ICFnbHlwaE92ZXJm
bG93LT5jb21wdXRlQm91bmRzKSkgewogICAgICAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZ2x5cGhPdmVyZmxvdyk7CkBAIC0xNTU2LDcgKzE1NTYs
NyBAQCBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVDYW5Vc2VTaW1wbGVGb250CiB7CiAgICAgaWYg
KGlzQWxsQVNDSUkoKSB8fCBtX3RleHQuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIHJldHVybiBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgoKSkgPT0gRm9udDo6U2ltcGxlOworICAgIHJldHVybiBGb250Q2FzY2FkZTo6Y2hhcmFj
dGVyUmFuZ2VDb2RlUGF0aChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpID09IEZvbnRDYXNjYWRl
OjpTaW1wbGU7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6bW9tZW50YXJpbHlSZXZlYWxMYXN0VHlw
ZWRDaGFyYWN0ZXIodW5zaWduZWQgb2Zmc2V0QWZ0ZXJMYXN0VHlwZWRDaGFyYWN0ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1l
bnRhdGlvbiBvZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRC
b3gmKTsKIAotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBjb25zdCBGb250JiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9u
dENhc2NhZGUmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwg
ZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29s
IGZpcnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogCiAgICAgZmxvYXQgbWlu
TG9naWNhbFdpZHRoKCkgY29uc3Q7CkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4pIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQm
LCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmLCBp
bnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJ
OyB9CiAgICAgYm9vbCBjb21wdXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sOjpoaXRJbm5lclRleHRFbGVtCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJv
bDo6Z2V0QXZlcmFnZUNoYXJXaWR0aCgpCiB7CiAgICAgZmxvYXQgd2lkdGg7Ci0gICAgaWYgKHN0
eWxlKCkuZm9udCgpLmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUod2lkdGgpKQorICAg
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJs
ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiB3aWR0aDsKIAogICAgIGNvbnN0IFVDaGFyIGNoID0g
JzAnOwogICAgIGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKLSAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS5mb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0
VGV4dFJ1bih0aGlzLCBmb250LCBzdHIsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdF
eHBhbnNpb24pOwogICAgIHRleHRSdW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKICAgICByZXR1
cm4gZm9udC53aWR0aCh0ZXh0UnVuKTsKQEAgLTE4OSw3ICsxODksNyBAQCBmbG9hdCBSZW5kZXJU
ZXh0Q29udHJvbDo6c2NhbGVFbVRvVW5pdHMoCiB7CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSB1
bml0c1BlckVtIHZhbHVlIGZvciBNUyBTaGVsbCBEbGcgYW5kIENvdXJpZXIgTmV3IGZyb20gdGhl
ICJoZWFkIiBmb250IHRhYmxlLgogICAgIGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOwotICAg
IHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOwor
ICAgIHJldHVybiByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAqIHggLyB1bml0
c1BlckVtKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZUludHJpbnNpY0xv
Z2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhM
b2dpY2FsV2lkdGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmU6OmdldEF2ZQogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRl
ZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIENv
dXJpZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3gg
YW5kIFNhZmFyaSBXaW4uCiAgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGlu
IHRoZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KLSAgICBpZiAoc3R5bGUoKS5mb250KCku
Zmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCisgICAgaWYgKHN0eWxlKCkuZm9udENh
c2NhZGUoKS5maXJzdEZhbWlseSgpID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgcmV0dXJu
IHNjYWxlRW1Ub1VuaXRzKDEyMjkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIGZs
b2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXYKICAgICAvLyBvZiBNUyBTaGVs
bCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkg
V2luIGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0
IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgogICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldp
ZHRoIHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKHN0
eWxlKCkuZm9udCgpLmZpcnN0RmFtaWx5KCkgPT0gIkx1Y2lkYSBHcmFuZGUiKQorICAgIGlmIChz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZmlyc3RGYW1pbHkoKSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAg
ICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwogI2VuZGlmCiAKQEAgLTMzOCwxNSAr
MzM4LDE1IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjoKICAgICBm
bG9hdCBtYXhDaGFyV2lkdGggPSAwLmY7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS5mb250KCkuZmlyc3RGYW1pbHkoKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5maXJz
dEZhbWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9u
dCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9mIE1TIFNoZWxsIERs
ZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4g
YW5kCiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9u
dCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCiAgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4TWlu
KSB2YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KICAgICBp
ZiAoZmFtaWx5ID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgbWF4Q2hhcldpZHRoID0gc2Nh
bGVFbVRvVW5pdHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoc3R5bGUoKS5mb250KCkuaGFzVmFsaWRB
dmVyYWdlQ2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgp
LmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CisgICAgZWxzZSBpZiAo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQorICAgICAg
ICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLm1heENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQgaW5wdXRz
LCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgY2FzZSBCdXR0
b25QYXJ0OiB7CiAgICAgICAgIC8vIEJvcmRlcgogICAgICAgICBMZW5ndGhCb3ggYm9yZGVyQm94
KHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUu
Ym9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICBi
b3JkZXJCb3ggPSBtX3RoZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnQoKSwgYm9y
ZGVyQm94LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBib3JkZXJCb3ggPSBtX3Ro
ZW1lLT5jb250cm9sQm9yZGVyKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIGJvcmRlckJveCwg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1
ZSgpICE9IHN0YXRpY19jYXN0PGludD4oc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSkpIHsKICAgICAg
ICAgICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUoKSkKICAgICAgICAgICAgICAgICBzdHls
ZS5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJCb3gudG9wKCkudmFsdWUoKSk7CkBAIC0xNDMsNyAr
MTQzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAg
ICB9CiAKICAgICAgICAgLy8gUGFkZGluZwotICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCA9
IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUucGFkZGlu
Z0JveCgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBMZW5ndGhCb3ggcGFkZGlu
Z0JveCA9IG1fdGhlbWUtPmNvbnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCks
IHN0eWxlLnBhZGRpbmdCb3goKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYg
KHBhZGRpbmdCb3ggIT0gc3R5bGUucGFkZGluZ0JveCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0
UGFkZGluZ0JveChwYWRkaW5nQm94KTsKIApAQCAtMTU0LDI1ICsxNTQsMjUgQEAgdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICAvLyBXaWR0aCAvIEhlaWdo
dAogICAgICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBoZXJlIGFyZSBhZmZlY3RlZCBieSB0
aGUgem9vbS4KICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9l
c24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgotICAgICAgICBMZW5n
dGhTaXplIGNvbnRyb2xTaXplID0gbV90aGVtZS0+Y29udHJvbFNpemUocGFydCwgc3R5bGUuZm9u
dCgpLCBMZW5ndGhTaXplKHN0eWxlLndpZHRoKCksIHN0eWxlLmhlaWdodCgpKSwgc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUt
PmNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIExlbmd0aFNpemUoc3R5bGUu
d2lkdGgoKSwgc3R5bGUuaGVpZ2h0KCkpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgICAg
ICBpZiAoY29udHJvbFNpemUud2lkdGgoKSAhPSBzdHlsZS53aWR0aCgpKQogICAgICAgICAgICAg
c3R5bGUuc2V0V2lkdGgoY29udHJvbFNpemUud2lkdGgoKSk7CiAgICAgICAgIGlmIChjb250cm9s
U2l6ZS5oZWlnaHQoKSAhPSBzdHlsZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHN0eWxlLnNldEhl
aWdodChjb250cm9sU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8v
IE1pbi1XaWR0aCAvIE1pbi1IZWlnaHQKLSAgICAgICAgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6
ZSA9IG1fdGhlbWUtPm1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS5mb250KCksIHN0eWxl
LmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUgPSBt
X3RoZW1lLT5taW5pbXVtQ29udHJvbFNpemUocGFydCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5
bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLndpZHRoKCkg
IT0gc3R5bGUubWluV2lkdGgoKSkKICAgICAgICAgICAgIHN0eWxlLnNldE1pbldpZHRoKG1pbkNv
bnRyb2xTaXplLndpZHRoKCkpOwogICAgICAgICBpZiAobWluQ29udHJvbFNpemUuaGVpZ2h0KCkg
IT0gc3R5bGUubWluSGVpZ2h0KCkpCiAgICAgICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQobWlu
Q29udHJvbFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBGb250
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRyb2xG
b250KHBhcnQsIHN0eWxlLmZvbnQoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAgICAg
aWYgKGNvbnRyb2xGb250ICE9IHN0eWxlLmZvbnQoKS5mb250RGVzY3JpcHRpb24oKSkgeworICAg
ICAgICBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChw
YXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgICAg
ICBpZiAoY29udHJvbEZvbnQgIT0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24o
KSkgewogICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgZm9udC4KICAgICAgICAgICAgIGlm
IChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQotICAgICAgICAgICAgICAg
IHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgICAgICAgICAgc3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoMCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgb3VyIGxpbmUtaGVp
Z2h0CiAgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxl
TGlzdERlZmF1bHRMYWJlbAogICAgIHJldHVybiBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJl
bCgpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11
bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1lOjpmaWxlTGlzdE5h
bWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAgICAg
aWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcg
KzIzOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1
cm4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxp
c3REZWZhdWx0TGFiZWwoYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBG
b250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0
IEZvbnRDYXNjYWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25z
dDsKIAogICAgIGVudW0gRmlsZVVwbG9hZERlY29yYXRpb25zIHsgU2luZ2xlRmlsZSwgTXVsdGlw
bGVGaWxlcyB9OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiAvKmlucHV0UmVuZGVyZXIqLywgY29uc3QgUmVuZGVyT2Jq
ZWN0JiAvKmJ1dHRvblJlbmRlcmVyKi8sIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
LCBJY29uKiwgRmlsZVVwbG9hZERlY29yYXRpb25zKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2NDMsNyArMTY0Myw3IEBAIEludFJlY3QgUmVuZGVyVGhlbWVHdGs6
OmNhbGN1bGF0ZVByb2dyZXMKICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwogfQogCi1TdHJpbmcg
UmVuZGVyVGhlbWVHdGs6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxl
TGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxv
d2VkKSBjb25zdAorU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChj
b25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgd2lk
dGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHdpZHRoIDw9
IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4
MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAg
dmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25z
dCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxl
TGlzdCosIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNB
bGxvd2VkKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJv
cmRlcnMoUmVuZGVyU3R5bGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBA
CiAjaW1wb3J0ICJEYXRlQ29tcG9uZW50cy5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBv
cnQgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRD
YWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1w
b3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkdyYWRpZW50LmgiCkBAIC01NDUsNyArNTQ1LDcg
QEAgc3RhdGljIHZvaWQgYWRqdXN0U2VsZWN0TGlzdEJ1dHRvblN0eWxlKAogICAgIAogY2xhc3Mg
UmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudCA6IHB1YmxpYyBNZWFzdXJlVGV4dENsaWVudCB7
CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudChjb25zdCBGb250JiBm
b250LCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQorICAgIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
CiAgICAgICAgIDogbV9mb250KGZvbnQpCiAgICAgICAgICwgbV9yZW5kZXJPYmplY3QocmVuZGVy
T2JqZWN0KQogICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCkBAIC01NTcsNyArNTU3LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9mb250LndpZHRoKHJ1bik7CiAgICAgfQogcHJpdmF0ZToK
LSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsK
ICAgICBSZW5kZXJPYmplY3QmIG1fcmVuZGVyT2JqZWN0OwogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBtX3N0eWxlOwogfTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1
dEVsZW1lbnRCdXR0b25TdHlsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgdGhl
IHdpZHRoIGFuZCBzZXQgdGhlIGJveC1zaXppbmcgdG8gY29udGVudC1ib3ggdG8gbm90IGNvbmZs
aWN0IHdpdGggdGhlIHBhZGRpbmcuCi0gICAgRm9udCBmb250ID0gc3R5bGUuZm9udCgpOworICAg
IEZvbnRDYXNjYWRlIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIAogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoZm9u
dC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTc4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OSw3ICsxNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50
U25hcHNob3R0ZWRQbHVnaW5PdmVybGF5KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQm
LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0Kiwg
Y29uc3QgRm9udENhc2NhZGUmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChj
b25zdCBSZW5kZXJPYmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFy
dFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAKICAgICBpZiAoc3R5bGUuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUo
MCk7CisgICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKDApOwogfQogCiBOU0NvbnRy
b2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdApAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgTlNUZXh0RmllbGRDZWxsKiBS
ZW5kZXJUaGVtZU1hYzo6dGV4dEZpZQogICAgIHJldHVybiBtX3RleHRGaWVsZC5nZXQoKTsKIH0K
IAotU3RyaW5nIFJlbmRlclRoZW1lTWFjOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxl
TGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3QKK1N0cmluZyBSZW5kZXJUaGVtZU1hYzo6ZmlsZUxpc3ROYW1l
Rm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAogewogICAgIGlm
ICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRG
b3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LmxpbmVTdHls
ZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYmIChpbmNs
dWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5j
bHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxl
LmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKSk7CisgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZi
b3hMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKSk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9u
dE1ldHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNz
LmFzY2VudChiYXNlbGluZVR5cGUoKSk7CkBAIC0xMDE3LDcgKzEwMTcsNyBAQCBMYXlvdXRVbml0
IFJvb3RJbmxpbmVCb3g6OnZlcnRpY2FsUG9zaXRpCiAgICAgCiAgICAgaWYgKHZlcnRpY2FsQWxp
Z24gIT0gQkFTRUxJTkUpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudExpbmVT
dHlsZSA9IGZpcnN0TGluZSA/IHBhcmVudC0+Zmlyc3RMaW5lU3R5bGUoKSA6IHBhcmVudC0+c3R5
bGUoKTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHBhcmVudExpbmVTdHlsZS5mb250KCk7
CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gcGFyZW50TGluZVN0eWxlLmZvbnRD
YXNjYWRlKCk7CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQu
Zm9udE1ldHJpY3MoKTsKICAgICAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNw
cAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTcgKzE4NCwxNyBAQCBib29sIGNh
blVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0gICAgaWYgKHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NW
R0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFs
bCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0g
ICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgp
OworICAgIGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCk7CiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5pc0xvYWRpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hp
bGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJl
ci5pc0NvbWJpbmVUZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5k
ZXJlci5pc1F1b3RlKCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKICAgICAgICAg
ICAgIHx8IHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKHN0eWxlLmZvbnQoKS5jb2RlUGF0aChUZXh0UnVuKHRleHRS
ZW5kZXJlci50ZXh0KCkpKSAhPSBGb250OjpTaW1wbGUpCisgICAgICAgIGlmIChzdHlsZS5mb250
Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRD
YXNjYWRlOjpTaW1wbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICgh
Y2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250RGF0YSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dEZsb3dDb250ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewogCiBGbG93Q29udGVudHM6OlN0eWxlOjpT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnQoKSkK
KyAgICA6IGZvbnQoc3R5bGUuZm9udENhc2NhZGUoKSkKICAgICAsIHRleHRBbGlnbihzdHlsZS50
ZXh0QWxpZ24oKSkKICAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRl
U3BhY2UoKSkKICAgICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzX2gK
ICNkZWZpbmUgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIK
QEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgIGV4
cGxpY2l0IFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKLSAgICAgICAgY29uc3QgRm9udCYg
Zm9udDsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQ7CiAgICAgICAgIEVUZXh0QWxp
Z24gdGV4dEFsaWduOwogICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZTsKICAgICAgICAg
Ym9vbCBwcmVzZXJ2ZU5ld2xpbmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBwYWludEZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbAogICAgIGJvb2wgZGVidWdCb3JkZXJzRW5hYmxlZCA9IGZsb3cu
ZnJhbWUoKS5zZXR0aW5ncygpLnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCk7
CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSAqcGFpbnRJbmZvLmNvbnRleHQ7Ci0g
ICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLmZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgVGV4dFBhaW50U3R5bGUgdGV4dFBh
aW50U3R5bGUgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUoZmxvdy5mcmFtZSgpLCBzdHlsZSwgcGFp
bnRJbmZvKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCwgdGV4dFBhaW50U3R5bGUuc3Ryb2tlV2lkdGggPiAwKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDggQEAgUnVuUmVz
b2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsbwogICAgICwgbV9saW5lSGVpZ2h0KGxp
bmVIZWlnaHRGcm9tRmxvdyhmbG93KSkKICAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmVGcm9tRmxv
dyhmbG93KSkKICAgICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZShmbG93LmJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKSkKLSAgICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSkKLSAgICAsIG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZv
bnRNZXRyaWNzKCkuZGVzY2VudCgpKQorICAgICwgbV9hc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkKKyAgICAsIG1fZGVzY2VudChmbG93LnN0
eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSkKIHsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1Zh
bHVlOjphZGp1c3ROb2RlU2l6ZQogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoYXZlcmFnZVNpemUpOwogICAgICAgICAgICAgc3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgc3R5bGUt
PmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNv
bHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgp
LnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCku
Zm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgdGV4dC0+cGFyZW50KCktPnNldFN0eWxlKHN0
eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZW5kZXJF
bGVtZW50KiBwYXJlbnRSZW5kZXJlciA9IHRleHQtPnBhcmVudCgpOwpAQCAtMTc2LDcgKzE3Niw3
IEBAIGJvb2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAg
IGlmIChsaXN0TWFya2VyUmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKSB7CiAgICAgICAgICAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUo
bGlzdE1hcmtlclJlbmRlcmVyLT5zdHlsZSgpKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgc3R5bGUt
PmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNv
bHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+Zm9udENhc2Nh
ZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZl
cigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMaXN0
TWFya2VyPigqbGlzdE1hcmtlclJlbmRlcmVyKS5zZXRTdHlsZShzdHlsZS5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTk2LDcgKzE5Niw3IEBAIGJv
b2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAgICAgICBu
ZXdQYXJlbnRTdHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgobGluZUhlaWdodCwgRml4ZWQpKTsK
ICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChs
aW5lSGVpZ2h0TGVuZ3RoKTsKICAgICAgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgbmV3UGFyZW50
U3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5
bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBuZXdQYXJlbnRT
dHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5z
dXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgICAgICBwYXJl
bnRSZW5kZXJlci0+c2V0U3R5bGUobmV3UGFyZW50U3R5bGUucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFRleHRBdXRv
U2l6aW5nVmFsdWU6OnJlc2V0KCkKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUob3JpZ2luYWxTaXplKTsKICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHRleHQtPnN0eWxlKCkpOwogICAgICAg
ICAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAg
ICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5z
dXJlU3R5bGVSZXNvbHZlcigpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5m
b250Q2FzY2FkZSgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5lbnN1cmVTdHls
ZVJlc29sdmVyKCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgdGV4dC0+cGFyZW50KCkt
PnNldFN0eWxlKHN0eWxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIC8v
IFJlc2V0IHRoZSBsaW5lIGhlaWdodCBvZiB0aGUgcGFyZW50LgpAQCAtMjM3LDcgKzIzNyw3IEBA
IHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBuZXdQYXJlbnRTdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUocGFy
ZW50U3R5bGUpOwogICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldExpbmVIZWlnaHQob3Jp
Z2luYWxMaW5lSGVpZ2h0KTsKICAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIG5ld1BhcmVudFN0eWxlLT5m
b250KCkudXBkYXRlKGF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udENh
c2NhZGUoKS51cGRhdGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNv
bHZlcigpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5zZXRT
dHlsZShuZXdQYXJlbnRTdHlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAkocmV2aXNpb24g
MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRl
eHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29u
c3QgRm9udCYgZm9udCwKK1RleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRU
ZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsCiAgICAgaW50IHN0YXJ0UG9z
aXRpb25JblRleHRSdW4sIGludCBlbmRQb3NpdGlvbkluVGV4dEJveFN0cmluZywgaW50IGxlbmd0
aCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIFJlbmRlckNvbWJpbmVUZXh0KiBj
b21iaW5lZFRleHQsIFRleHRSdW4mIHRleHRSdW4sCiAgICAgRmxvYXRSZWN0JiBib3hSZWN0LCBG
bG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBTaGFk
b3dEYXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFkb3csCiAg
ICAgYm9vbCB0ZXh0Qm94SXNIb3Jpem9udGFsLCBUZXh0UGFpbnRTdHlsZSYgdGV4dFBhaW50U3R5
bGUsIFRleHRQYWludFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxlKQpAQCAtNTYsNyArNTYsNyBA
QCBUZXh0UGFpbnRlcjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0CiB7CiB9CiAKLXN0YXRp
YyB2b2lkIGRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBlbXBoYXNpc01hcmssCitzdGF0aWMgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKICAgICBp
bnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgaW50
IGZyb20sIGNvbnN0IGludCB0bykKIHsKICAgICBpZiAoZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkK
QEAgLTExMyw3ICsxMTMsNyBAQCBTaGFkb3dBcHBsaWVyOjp+U2hhZG93QXBwbGllcigpCiAgICAg
ICAgIG1fY29udGV4dC5jbGVhclNoYWRvdygpOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRleHRX
aXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLAor
c3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3Qg
QXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssCiAgICAgaW50IGVtcGhhc2lzTWFya09mZnNldCwg
aW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsCiAgICAg
Y29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBib29sIHN0cm9rZWQsIGJvb2wgaG9yaXpvbnRhbCkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBy
b3RhdGlvbihjCiAKIGNsYXNzIFRleHRQYWludGVyIHsKIHB1YmxpYzoKLSAgICBUZXh0UGFpbnRl
cihHcmFwaGljc0NvbnRleHQmLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWlu
dFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0IEZvbnQmLAorICAgIFRleHRQYWludGVyKEdy
YXBoaWNzQ29udGV4dCYsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5LCBib29sIHBhaW50U2Vs
ZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgRm9udENhc2NhZGUmLAogICAgIGludCBzdGFydFBv
c2l0aW9uSW5UZXh0UnVuLCBpbnQgZW5kUG9zaXRpb25JblRleHRCb3hTdHJpbmcsIGludCBsZW5n
dGgsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBSZW5kZXJDb21iaW5lVGV4dCos
CiAgICAgVGV4dFJ1biYsIEZsb2F0UmVjdCYgYm94UmVjdCwgRmxvYXRQb2ludCYgdGV4dE9yaWdp
biwgaW50IGVtcGhhc2lzTWFya09mZnNldCwgY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdywg
Y29uc3QgU2hhZG93RGF0YSogc2VsZWN0aW9uU2hhZG93LAogICAgIGJvb2wgdGV4dEJveElzSG9y
aXpvbnRhbCwgVGV4dFBhaW50U3R5bGUmIG5vblNlbGVjdGlvblBhaW50U3R5bGUsIFRleHRQYWlu
dFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxlKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRvdzsKICAgICBib29sIG1fcGFp
bnRTZWxlY3RlZFRleHRPbmx5OwogICAgIGJvb2wgbV9wYWludFNlbGVjdGVkVGV4dFNlcGFyYXRl
bHk7Ci0gICAgY29uc3QgRm9udCYgbV9mb250OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2Zv
bnQ7CiAgICAgaW50IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsKICAgICBpbnQgbV9lbmRQb3Np
dGlvbkluVGV4dFJ1bjsKICAgICBpbnQgbV9sZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVh
ZGVycy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Niwx
MyArNDg2LDEzIEBAIGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJZk5lZWRlZChSZW5kZXIKICAg
ICBkb3duY2FzdDxSZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51cGRhdGVDb3VudGVyKCk7CiB9
CiAKLWlubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIs
IGNvbnN0IEZvbnQmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDApCitpbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQq
IHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5n
KCkuc3RyaW5nKCksIHN0eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
ZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IGxlbiwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJv
b2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZh
bGxiYWNrRm9udHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCitBTFdBWVNfSU5MSU5FIGZsb2F0
IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4s
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwg
Ym9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYg
ZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKIHsKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogCkBAIC01MDEsNyArNTAxLDcgQEAgQUxX
QVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dAogICAgICAgICByZXR1cm4gdGV4
dC0+d2lkdGgoZnJvbSwgbGVuLCBmb250LCB4UG9zLCAmZmFsbGJhY2tGb250cywgJmdseXBoT3Zl
cmZsb3cpOwogCiAgICAgaWYgKGxheW91dCkKLSAgICAgICAgcmV0dXJuIEZvbnQ6OndpZHRoKCps
YXlvdXQsIGZyb20sIGxlbiwgJmZhbGxiYWNrRm9udHMpOworICAgICAgICByZXR1cm4gRm9udENh
c2NhZGU6OndpZHRoKCpsYXlvdXQsIGZyb20sIGxlbiwgJmZhbGxiYWNrRm9udHMpOwogCiAgICAg
VGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0
ZXh0LCBmcm9tLCBsZW4sIHN0eWxlKTsKICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0
LT50ZXh0TGVuZ3RoKCkgLSBmcm9tKTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBpbmxpbmUgdm9pZCBl
bnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJveChMCiAgICAgbGluZU1pZHBvaW50U3RhdGUuc3RvcEln
bm9yaW5nU3BhY2VzKElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IucmVu
ZGVyZXIoKSwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5vZmZzZXQoKSkpOwogfQogCi1pbmxpbmUg
dm9pZCB0cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0ZXh0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGNvbnNlY3V0aXZl
SHlwaGVuYXRlZExpbmVzLCBpbnQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXNMaW1pdCwgaW50
IG1pbmltdW1QcmVmaXhMaW1pdCwgaW50IG1pbmltdW1TdWZmaXhMaW1pdCwgdW5zaWduZWQgbGFz
dFNwYWNlLCB1bnNpZ25lZCBwb3MsIGZsb2F0IHhQb3MsIGludCBhdmFpbGFibGVXaWR0aCwgYm9v
bCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBpbnQgbGFzdFNwYWNlV29y
ZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGludCBuZXh0QnJlYWthYmxlLCBi
b29sJiBoeXBoZW5hdGVkKQoraW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCog
dGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
SWRlbnRpZmllciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25z
ZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQg
bWluaW11bVN1ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxv
YXQgeFBvcywgaW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xs
YXBzZVdoaXRlU3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3Im
IGxpbmVCcmVhaywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCiB7CiAgICAg
Ly8gTWFwICdoeXBoZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06IGF1dG87JyB0byAyLgogICAg
IHVuc2lnbmVkIG1pbmltdW1QcmVmaXhMZW5ndGg7CkBAIC02MTUsMTIgKzYxNSwxMiBAQCBpbmxp
bmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgfQogCiAgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlID0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBtX2xp
bmVJbmZvKTsKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUuZm9udCgpOworICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBib29sIGlzRml4
ZWRQaXRjaCA9IGZvbnQuaXNGaXhlZFBpdGNoKCk7CiAgICAgYm9vbCBjYW5IeXBoZW5hdGUgPSBz
dHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29yZTo6Y2FuSHlwaGVuYXRlKHN0
eWxlLmxvY2FsZSgpKTsKIAogICAgIHVuc2lnbmVkIGxhc3RTcGFjZSA9IG1fY3VycmVudC5vZmZz
ZXQoKTsKLSAgICBmbG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250KCkud29y
ZFNwYWNpbmcoKTsKKyAgICBmbG9hdCB3b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250
Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7CiAgICAgZmxvYXQgbGFzdFNwYWNlV29yZFNwYWNpbmcg
PSAwOwogICAgIGZsb2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVtZW50ID0gMDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBSZW5kZXJUZXh0SW5mbyB7
CiAgICAgUmVuZGVyVGV4dCogbV90ZXh0OwogICAgIE93blB0cjxUZXh0TGF5b3V0PiBtX2xheW91
dDsKICAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKLSAgICBj
b25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9udDsKIH07CiAK
IGNsYXNzIExpbmVCcmVha2VyIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNyArNTYsNyBAQCBpbmxpbmUgYm9vbCByZXF1aXJlc0xpbmVCb3hGb3JDb250ZW50
KGNvCiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSA9IGxpbmVTdHlsZSgq
cGFyZW50LCBsaW5lSW5mbyk7CiAgICAgICAgIGlmIChmbG93U3R5bGUubGluZUhlaWdodCgpICE9
IHBhcmVudFN0eWxlLmxpbmVIZWlnaHQoKQogICAgICAgICAgICAgfHwgZmxvd1N0eWxlLnZlcnRp
Y2FsQWxpZ24oKSAhPSBwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkKLSAgICAgICAgICAgIHx8
ICFwYXJlbnRTdHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNj
ZW50QW5kTGluZUdhcChmbG93U3R5bGUuZm9udCgpLmZvbnRNZXRyaWNzKCkpKQorICAgICAgICAg
ICAgfHwgIXBhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGlj
YWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChmbG93U3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0
cmljcygpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIy
LDcgKzIyMiw3IEBAIGJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiBzdHIKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh1bml0ID09ICJlbSIpIHsKLSAgICAg
ICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZvbnQoKS5zaXplKCk7CisgICAg
ICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250Q2FzY2FkZSgpLnNpemUo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh1bml0ID09ICJleCIpIHsK
QEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIHBhcnNlTWF0aE1MTmFtZWRTcGFjZShjb25zdCBTdHJp
bmcmCiAgICAgICAgICAgICBsZW5ndGggPSAtNzsgICAgICAgIAogICAgIH0KICAgICBpZiAobGVu
Z3RoKSB7Ci0gICAgICAgIGxlbmd0aFZhbHVlID0gbGVuZ3RoICogc3R5bGUtPmZvbnQoKS5zaXpl
KCkgLyAxODsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5zaXplKCkgLyAxODsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE5MSw4ICsxMTkxLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBtX29wZXJhdG9yRmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7
CiAKICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSBpcyBzcGVjaWZpZWQgYXMgbXVs
dGlwbGUgb2YgMS8xOGVtLgotICAgIG1fbGVhZGluZ1NwYWNlID0gZW50cnktPmxzcGFjZSAqIHN0
eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OwotICAgIG1fdHJhaWxpbmdTcGFjZSA9IGVudHJ5LT5y
c3BhY2UgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBtX2xlYWRpbmdTcGFjZSA9
IGVudHJ5LT5sc3BhY2UgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CisgICAg
bV90cmFpbGluZ1NwYWNlID0gZW50cnktPnJzcGFjZSAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5z
aXplKCkgLyAxODsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQ
cm9wZXJ0aWVzKCkKQEAgLTEyMjksOSArMTIyOSw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnNldE9wZXJhdG9yUHIKICAgICAgICAgbV9vcGVyYXRvckZsYWdzICY9IE1hdGhNTE9wZXJh
dG9yRGljdGlvbmFyeTo6RmVuY2UgfCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlNlcGFyYXRv
cjsgLy8gVGhpcyByZXNldHMgYWxsIGJ1dCB0aGUgRmVuY2UgYW5kIFNlcGFyYXRvciBwcm9wZXJ0
aWVzLgogICAgIGVsc2UKICAgICAgICAgbV9vcGVyYXRvckZsYWdzID0gMDsgLy8gVGhpcyByZXNl
dHMgYWxsIHRoZSBvcGVyYXRvciBwcm9wZXJ0aWVzLgotICAgIG1fbGVhZGluZ1NwYWNlID0gNSAq
IHN0eWxlKCkuZm9udCgpLnNpemUoKSAvIDE4OyAvLyBUaGlzIHNldHMgbGVhZGluZyBzcGFjZSB0
byAidGhpY2ttYXRoc3BhY2UiLgotICAgIG1fdHJhaWxpbmdTcGFjZSA9IDUgKiBzdHlsZSgpLmZv
bnQoKS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5nIHNwYWNlIHRvICJ0aGlja21h
dGhzcGFjZSIuCi0gICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250KCkuc2l6ZSgpOyAvLyBUaGlz
IHNldHMgbWluc2l6ZSB0byAiMWVtIi4KKyAgICBtX2xlYWRpbmdTcGFjZSA9IDUgKiBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7IC8vIFRoaXMgc2V0cyBsZWFkaW5nIHNwYWNlIHRv
ICJ0aGlja21hdGhzcGFjZSIuCisgICAgbV90cmFpbGluZ1NwYWNlID0gNSAqIHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5zaXplKCkgLyAxODsgLy8gVGhpcyBzZXRzIHRyYWlsaW5nIHNwYWNlIHRvICJ0
aGlja21hdGhzcGFjZSIuCisgICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNp
emUoKTsgLy8gVGhpcyBzZXRzIG1pbnNpemUgdG8gIjFlbSIuCiAgICAgbV9tYXhTaXplID0gaW50
TWF4Rm9yTGF5b3V0VW5pdDsgLy8gVGhpcyBzZXRzIG1heHNpemUgdG8gImluZmluaXR5Ii4KIAog
ICAgIGlmIChtX3RleHRDb250ZW50KSB7CkBAIC0xMzU1LDcgKzEzNTUsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVyCiAgICAgICAgIFJlbmRlck1hdGhNTFRva2Vu
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICBpZiAoaXNJbnZpc2li
bGVPcGVyYXRvcigpKSB7CiAgICAgICAgICAgICAvLyBJbiBzb21lIGZvbnRzLCBnbHlwaHMgZm9y
IGludmlzaWJsZSBvcGVyYXRvcnMgaGF2ZSBub256ZXJvIHdpZHRoLiBDb25zZXF1ZW50bHksIHdl
IHN1YnRyYWN0IHRoYXQgd2lkdGggaGVyZSB0byBhdm9pZCB3aWRlIGdhcHMuCi0gICAgICAgICAg
ICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3Rlciht
X3RleHRDb250ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgZmFs
c2UpOwogICAgICAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IGFkdmFuY2VGb3JHbHlwaChkYXRh
KTsKICAgICAgICAgICAgIEFTU0VSVChnbHlwaFdpZHRoIDw9IG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKTsKICAgICAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoIC09IGdseXBo
V2lkdGg7CkBAIC0xMzY0LDcgKzEzNjQsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpj
b21wdXRlUHJlZmVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHbHlwaERhdGEgZGF0
YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAh
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIEdseXBoRGF0YSBkYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50
LCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIGZsb2F0IG1heGltdW1H
bHlwaFdpZHRoID0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwogICAgIGlmICghbV9pc1ZlcnRpY2Fs
KSB7CiAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCkBAIC0x
NTIxLDcgKzE1MjEsNyBAQCBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2Vt
CiAgICAgaWYgKCFib3R0b20uZ2x5cGgpCiAgICAgICAgIGJvdHRvbS5nbHlwaCA9IGV4dGVuc2lv
bi5nbHlwaDsKIAotICAgIHRvcC5mb250RGF0YSA9ICZzdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9u
dERhdGEoKTsKKyAgICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpOwogICAgIGV4dGVuc2lvbi5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKICAg
ICBib3R0b20uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CiAgICAgaWYgKG1pZGRsZS5nbHlwaCkK
QEAgLTE1MzgsOCArMTUzOCw4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEg
UmVuZGUKIAogICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNw
bGF5U3R5bGUoKSk7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgp
LmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5
bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgR2x5cGhEYXRh
IGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIGlmICgh
cHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9ICZwcmlt
YXJ5Rm9udERhdGEpCiAgICAgICAgIHJldHVybiBkYXRhOwogCkBAIC0xNTcwLDggKzE1NzAsOCBA
QCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlE
YXRhIGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwot
ICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSk7CiAgICAgCiAgICAgaWYgKHByaW1hcnlGb250RGF0YS5tYXRoRGF0
YSgpICYmIGJhc2VHbHlwaC5mb250RGF0YSA9PSAmcHJpbWFyeUZvbnREYXRhKSB7CiAgICAgICAg
IFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwpAQCAtMTYxOCwxMiArMTYxOCwxMiBAQCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgICAgICAgICByZXR1cm4g
ZGF0YTsKIAogICAgICAgICAvLyBXZSBjb252ZXJ0IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFj
dGVycyBpbnRvIGEgbGlzdCBvZiBnbHlwaCBkYXRhLgotICAgICAgICBHbHlwaERhdGEgdG9wID0g
c3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50
b3BDaGFyLCBmYWxzZSk7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgpLmZv
bnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNo
YXIsIGZhbHNlKTsKLSAgICAgICAgR2x5cGhEYXRhIGJvdHRvbSA9IHN0eWxlKCkuZm9udCgpLmds
eXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2Up
OworICAgICAgICBHbHlwaERhdGEgdG9wID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0
YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOworICAgICAg
ICBHbHlwaERhdGEgZXh0ZW5zaW9uID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZv
ckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOworICAg
ICAgICBHbHlwaERhdGEgYm90dG9tID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZv
ckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOwogICAgICAg
ICBHbHlwaERhdGEgbWlkZGxlOwogICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRs
ZUNoYXIpCi0gICAgICAgICAgICBtaWRkbGUgPSBzdHlsZSgpLmZvbnQoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsKKyAgICAgICAg
ICAgIG1pZGRsZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
c3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKTsKICAgICAgICAgYXNzZW1ibHlE
YXRhLnNldEdseXBoQXNzZW1ibHlNb2RlKHRvcCwgZXh0ZW5zaW9uLCBib3R0b20sIG1pZGRsZSk7
CiAgICAgfQogCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp1cGRhdGVTdHlsZSgpCiAgICAgICAgIG1fc3RyZXRjaHlEYXRhID0gZ2V0RGlzcGxheVN0eWxl
TGFyZ2VPcGVyYXRvcihtX3RleHRDb250ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ug
ZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAg
ICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Cisg
ICAgICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSk7CiAgICAgICAgIGZsb2F0IGJhc2VTaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0
Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VGb3JHbHlwaChiYXNlR2x5cGgpOwogICAgICAg
ICBpZiAoc3RyZXRjaFNpemUoKSA8PSBiYXNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE4MDIsNyArMTgwMiw3IEBAIExheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50
R2wKIAogICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKICAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgs
IGRhdGEuZm9udERhdGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0
LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udCgpLCAqZGF0YS5mb250RGF0YSwgYnVmZmVyLCAwLCAx
LCBvcmlnaW4pOworICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNj
YWRlKCksICpkYXRhLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1
cm4gZ2x5cGhQYWludFJlY3Q7CiB9CkBAIC0xODk4LDcgKzE4OTgsNyBAQCB2b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludChQYWludEluCiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9y
VG9wTGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAg
ICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRh
LnZhcmlhbnQoKSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9y
VG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAg
ICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250KCksICptX3N0cmV0Y2h5
RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwor
ICAgICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAq
bV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9wZXJhdG9y
T3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk4MCw3ICsxOTgwLDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbgogCiBMYXlvdXRVbml0IFJl
bmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IoKQogewotICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpOwor
ICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKICAgICBpZiAoIXByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpKQog
ICAgICAgICByZXR1cm4gMDsKIApAQCAtMTk4OSw3ICsxOTg5LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbgogICAgIExheW91dFVuaXQgd2lkdGggPSBsb2dpY2Fs
V2lkdGgoKTsKIAogICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd05vcm1hbCkg
ewotICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udCgpLmdseXBoRGF0YUZvckNo
YXJhY3Rlcih0ZXh0Q29udGVudCgpLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
OworICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZUZvckdseXBoKGRhdGEpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSYWRpY2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExh
eW91dFVuaXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmICghc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2Ug
ZG8gbm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFk
aWNhbCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJl
bG93QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAg
IEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgewogICAgICAgICBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
YWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRv
cjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1
ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1h
dGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVM
b2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRp
bmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5
bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKICAg
ICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk5LDE3ICsxOTksMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1
cGRhdGVTdHlsZSgpCiAKICAgICAvLyBXZSBzZXQgc29tZSBjb25zdGFudHMgdG8gZHJhdyB0aGUg
cmFkaWNhbCwgYXMgZGVmaW5lZCBpbiB0aGUgT3BlblR5cGUgTUFUSCB0YWJsZXMuCiAKLSAgICBt
X3J1bGVUaGlja25lc3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udCgpLnNpemUoKTsKKyAgICBtX3J1
bGVUaGlja25lc3MgPSAwLjA1ZiAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7CiAKICAg
ICAvLyBGSVhNRTogVGhlIHJlY29tbWVuZGVkIGRlZmF1bHQgZm9yIG1fdmVydGljYWxHYXAgaW4g
ZGlzcGxheXN0eWxlIGlzIHJ1bGUgdGhpY2tuZXNzICsgMS80IHgtaGVpZ2h0IChodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICBtX3ZlcnRpY2FsR2Fw
ID0gMTEgKiBtX3J1bGVUaGlja25lc3MgLyA0OwogICAgIG1fZXh0cmFBc2NlbmRlciA9IG1fcnVs
ZVRoaWNrbmVzczsKLSAgICBMYXlvdXRVbml0IGtlcm5CZWZvcmVEZWdyZWUgPSA1ICogc3R5bGUo
KS5mb250KCkuc2l6ZSgpIC8gMTg7Ci0gICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAt
MTAgKiBzdHlsZSgpLmZvbnQoKS5zaXplKCkgLyAxODsKKyAgICBMYXlvdXRVbml0IGtlcm5CZWZv
cmVEZWdyZWUgPSA1ICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKSAvIDE4OworICAgIExh
eW91dFVuaXQga2VybkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNp
emUoKSAvIDE4OwogICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0gMC42ZjsKIAotICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250
RGF0YSgpOwotICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgaWYgKGF1dG8q
IG1hdGhEYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhE
YXRhKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1fdmVydGljYWxHYXAgc2hvdWxkIHVzZSBSYWRp
Y2FsRGlzcGxheVN0eWxlVmVydGljYWwgaW4gZGlzcGxheSBtb2RlIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICAgICAgbV92ZXJ0aWNhbEdhcCA9
IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhE
YXRhOjpSYWRpY2FsVmVydGljYWxHYXApOwogICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRo
RGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6
UmFkaWNhbFJ1bGVUaGlja25lc3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxUb2tl
bjo6dXBkYXRlU3R5bGUoKQogICAgICAgICAvLyBUaGlzIHRyaWVzIHRvIGVtdWxhdGUgdGhlIGRl
ZmF1bHQgbWF0aHZhcmlhbnQgdmFsdWUgb24gPG1pPiB1c2luZyB0aGUgQ1NTIGZvbnQtc3R5bGUg
cHJvcGVydHkuCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIHdoZW4g
bWF0aHZhcmlhbnQgaXMgaW1wbGVtZW50ZWQgKGh0dHA6Ly93a2J1Zy84NTczNSkgYW5kIHdoZW4g
Zm9udHMgd2l0aCBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMgY2hhcmFjdGVycyBh
cmUgbW9yZSBwb3B1bGFyLgogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
KG5ld1N0eWxlLmdldCgpLmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250KCkuZm9udFNlbGVjdG9yKCk7Cisg
ICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3U3R5bGUuZ2V0KCkuZm9udENh
c2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICAgICAgaWYgKCFtX2NvbnRhaW5zRWxlbWVudCAm
JiBlbGVtZW50KCkudGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3BhY2UoKS5zaW1wbGlmeVdoaXRl
U3BhY2UoKS5sZW5ndGgoKSA9PSAxICYmICF0b2tlbkVsZW1lbnQuaGFzQXR0cmlidXRlKG1hdGh2
YXJpYW50QXR0cikpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRJ
dGFsaWNPbik7CiAgICAgICAgIGlmIChuZXdTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgIG5ld1N0eWxlLmdldCgpLmZvbnQoKS51cGRh
dGUoZm9udFNlbGVjdG9yKTsKKyAgICAgICAgICAgIG5ld1N0eWxlLmdldCgpLmZvbnRDYXNjYWRl
KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiAgICAgfQogCiAgICAgd3JhcHBlci0+c2V0U3R5bGUo
V1RGOjptb3ZlKG5ld1N0eWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgi
CkBAIC0yOTMsNyArMjkzLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6aW5oZXJpdGVkTm90RXF1YWwo
Y29ucwogfQogCiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi1pbmxpbmUgdW5zaWdu
ZWQgY29tcHV0ZUZvbnRIYXNoKGNvbnN0IEZvbnQmIGZvbnQpCitpbmxpbmUgdW5zaWduZWQgY29t
cHV0ZUZvbnRIYXNoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewogICAgIHVuc2lnbmVkIGhh
c2hDb2Rlc1syXSA9IHsKICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGZvbnQuZm9udERl
c2NyaXB0aW9uKCkuZmlyc3RGYW1pbHkoKS5pbXBsKCkpLApAQCAtMzE1LDcgKzMxNSw3IEBAIHVp
bnQzMl90IFJlbmRlclN0eWxlOjpoYXNoRm9yVGV4dEF1dG9zaXoKICAgICBoYXNoIF49IHJhcmVJ
bmhlcml0ZWREYXRhLT5uYnNwTW9kZTsKICAgICBoYXNoIF49IHJhcmVJbmhlcml0ZWREYXRhLT5s
aW5lQnJlYWs7CiAgICAgaGFzaCBePSBXVEY6OkZsb2F0SGFzaDxmbG9hdD46Omhhc2goaW5oZXJp
dGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0LnZhbHVlKCkpOwotICAgIGhhc2ggXj0gY29tcHV0ZUZv
bnRIYXNoKGluaGVyaXRlZC0+Zm9udCk7CisgICAgaGFzaCBePSBjb21wdXRlRm9udEhhc2goaW5o
ZXJpdGVkLT5mb250Q2FzY2FkZSk7CiAgICAgaGFzaCBePSBpbmhlcml0ZWQtPmhvcml6b250YWxf
Ym9yZGVyX3NwYWNpbmc7CiAgICAgaGFzaCBePSBpbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9z
cGFjaW5nOwogICAgIGhhc2ggXj0gaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uOwpAQCAt
MzM5LDcgKzMzOSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmVxdWFsRm9yVGV4dEF1dG9zaXppbmcK
ICAgICAgICAgJiYgcmFyZUluaGVyaXRlZERhdGEtPmxpbmVCcmVhayA9PSBvdGhlci0+cmFyZUlu
aGVyaXRlZERhdGEtPmxpbmVCcmVhawogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4
dFNlY3VyaXR5ID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNlY3VyaXR5CiAgICAg
ICAgICYmIGluaGVyaXRlZC0+c3BlY2lmaWVkTGluZUhlaWdodCA9PSBvdGhlci0+aW5oZXJpdGVk
LT5zcGVjaWZpZWRMaW5lSGVpZ2h0Ci0gICAgICAgICYmIGluaGVyaXRlZC0+Zm9udC5lcXVhbEZv
clRleHRBdXRvU2l6aW5nKG90aGVyLT5pbmhlcml0ZWQtPmZvbnQpCisgICAgICAgICYmIGluaGVy
aXRlZC0+Zm9udENhc2NhZGUuZXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlci0+aW5oZXJpdGVk
LT5mb250Q2FzY2FkZSkKICAgICAgICAgJiYgaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9z
cGFjaW5nID09IG90aGVyLT5pbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKICAg
ICAgICAgJiYgaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZyA9PSBvdGhlci0+aW5o
ZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZwogICAgICAgICAmJiBpbmhlcml0ZWRfZmxh
Z3MuX2JveF9kaXJlY3Rpb24gPT0gb3RoZXItPmluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlv
bgpAQCAtNTUxLDcgKzU1MSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5
b3V0KGMKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgfHwgaW5oZXJp
dGVkLT5zcGVjaWZpZWRMaW5lSGVpZ2h0ICE9IG90aGVyLmluaGVyaXRlZC0+c3BlY2lmaWVkTGlu
ZUhlaWdodAogI2VuZGlmCi0gICAgICAgIHx8IGluaGVyaXRlZC0+Zm9udCAhPSBvdGhlci5pbmhl
cml0ZWQtPmZvbnQKKyAgICAgICAgfHwgaW5oZXJpdGVkLT5mb250Q2FzY2FkZSAhPSBvdGhlci5p
bmhlcml0ZWQtPmZvbnRDYXNjYWRlCiAgICAgICAgIHx8IGluaGVyaXRlZC0+aG9yaXpvbnRhbF9i
b3JkZXJfc3BhY2luZyAhPSBvdGhlci5pbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNp
bmcKICAgICAgICAgfHwgaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZyAhPSBvdGhl
ci5pbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nCiAgICAgICAgIHx8IGluaGVyaXRl
ZF9mbGFncy5fYm94X2RpcmVjdGlvbiAhPSBvdGhlci5pbmhlcml0ZWRfZmxhZ3MuX2JveF9kaXJl
Y3Rpb24KQEAgLTExODQsNyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5
bGU6Omh5cGhlblMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4K
ICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5N
aW51c1N0cmluZywgKCZoeXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAg
ICByZXR1cm4gZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhl
bikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKKyAgICByZXR1cm4gZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlw
aGVuU3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYg
UmVuZGVyU3R5bGU6OnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSBjb25zdApAQCAtMTM0MCwyMCAr
MTM0MCwyMCBAQCBjb25zdCBBbmltYXRpb24qIFJlbmRlclN0eWxlOjp0cmFuc2l0aW9uCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWNvbnN0IEZvbnQmIFJlbmRlclN0eWxlOjpmb250KCkgY29uc3QgeyBy
ZXR1cm4gaW5oZXJpdGVkLT5mb250OyB9Ci1jb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6
OmZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LmZvbnRNZXRyaWNz
KCk7IH0KLWNvbnN0IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZvbnREZXNjcmlwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5mb250RGVzY3JpcHRpb24oKTsgfQor
Y29uc3QgRm9udENhc2NhZGUmIFJlbmRlclN0eWxlOjpmb250Q2FzY2FkZSgpIGNvbnN0IHsgcmV0
dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGU7IH0KK2NvbnN0IEZvbnRNZXRyaWNzJiBSZW5kZXJT
dHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRl
LmZvbnRNZXRyaWNzKCk7IH0KK2NvbnN0IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZv
bnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9u
dERlc2NyaXB0aW9uKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpzcGVjaWZpZWRGb250U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsgfQogZmxv
YXQgUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVz
Y3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQotaW50IFJlbmRlclN0eWxlOjpmb250U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5waXhlbFNpemUoKTsgfQoraW50IFJlbmRl
clN0eWxlOjpmb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUu
cGl4ZWxTaXplKCk7IH0KIAogY29uc3QgTGVuZ3RoJiBSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmco
KSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+d29yZFNwYWNpbmc7IH0KLWZsb2F0
IFJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5m
b250LmxldHRlclNwYWNpbmcoKTsgfQorZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmco
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmxldHRlclNwYWNpbmcoKTsg
fQogCiBib29sIFJlbmRlclN0eWxlOjpzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2Ny
aXB0aW9uJiB2KQogewotICAgIGlmIChpbmhlcml0ZWQtPmZvbnQuZm9udERlc2NyaXB0aW9uKCkg
IT0gdikgewotICAgICAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnQgPSBGb250KHYsIGluaGVy
aXRlZC0+Zm9udC5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udC53b3JkU3BhY2luZygp
KTsKKyAgICBpZiAoaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSAhPSB2
KSB7CisgICAgICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENhc2NhZGUgPSBGb250Q2FzY2Fk
ZSh2LCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmxldHRlclNwYWNpbmcoKSwgaW5oZXJpdGVkLT5m
b250Q2FzY2FkZS53b3JkU3BhY2luZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MDQsNyArMTQwNCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldFdvcmRTcGFjaW5nKExlbmd0aCAKICAgICAgICAgZm9udFdvcmRTcGFjaW5nID0gMDsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBQZXJjZW50OgotICAgICAgICBmb250V29yZFNwYWNpbmcg
PSB2YWx1ZS5wZXJjZW50KCkgKiBmb250KCkuc3BhY2VXaWR0aCgpIC8gMTAwOworICAgICAgICBm
b250V29yZFNwYWNpbmcgPSB2YWx1ZS5wZXJjZW50KCkgKiBmb250Q2FzY2FkZSgpLnNwYWNlV2lk
dGgoKSAvIDEwMDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaXhlZDoKICAgICAgICAgZm9u
dFdvcmRTcGFjaW5nID0gdmFsdWUudmFsdWUoKTsKQEAgLTE0MTcsMTEgKzE0MTcsMTEgQEAgdm9p
ZCBSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcoTGVuZ3RoIAogICAgICAgICBmb250V29yZFNw
YWNpbmcgPSAwOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaW5oZXJpdGVkLmFjY2Vzcygp
LT5mb250LnNldFdvcmRTcGFjaW5nKGZvbnRXb3JkU3BhY2luZyk7CisgICAgaW5oZXJpdGVkLmFj
Y2VzcygpLT5mb250Q2FzY2FkZS5zZXRXb3JkU3BhY2luZyhmb250V29yZFNwYWNpbmcpOwogICAg
IHJhcmVJbmhlcml0ZWREYXRhLmFjY2VzcygpLT53b3JkU3BhY2luZyA9IFdURjo6bW92ZSh2YWx1
ZSk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcoZmxvYXQgdikgeyBp
bmhlcml0ZWQuYWNjZXNzKCktPmZvbnQuc2V0TGV0dGVyU3BhY2luZyh2KTsgfQordm9pZCBSZW5k
ZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyhmbG9hdCB2KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+
Zm9udENhc2NhZGUuc2V0TGV0dGVyU3BhY2luZyh2KTsgfQogCiB2b2lkIFJlbmRlclN0eWxlOjpz
ZXRGb250U2l6ZShmbG9hdCBzaXplKQogewpAQCAtMTQzNCw3ICsxNDM0LDcgQEAgdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogICAgIGVsc2UKICAgICAgICAgc2l6ZSA9
IHN0ZDo6bWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHNpemUpOwogCi0gICAgRm9udFNlbGVj
dG9yKiBjdXJyZW50Rm9udFNlbGVjdG9yID0gZm9udCgpLmZvbnRTZWxlY3RvcigpOworICAgIEZv
bnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCk7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MoZm9udERlc2NyaXB0aW9uKCkpOwogICAg
IGRlc2Muc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShz
aXplKTsKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEZvbnRTaXpl
KGZsb2F0IHNpemUKICNlbmRpZgogCiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGRlc2MpOwotICAg
IGZvbnQoKS51cGRhdGUoY3VycmVudEZvbnRTZWxlY3Rvcik7CisgICAgZm9udENhc2NhZGUoKS51
cGRhdGUoY3VycmVudEZvbnRTZWxlY3Rvcik7CiB9CiAKIHZvaWQgUmVuZGVyU3R5bGU6OmdldFNo
YWRvd0V4dGVudChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIExheW91dFVuaXQgJnRvcCwgTGF5
b3V0VW5pdCAmcmlnaHQsIExheW91dFVuaXQgJmJvdHRvbSwgTGF5b3V0VW5pdCAmbGVmdCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENvbnRl
bnREYXRhOwogY2xhc3MgQ291bnRlckNvbnRlbnQ7CiBjbGFzcyBDdXJzb3JMaXN0OwogY2xhc3Mg
RmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNz
IEZvbnRNZXRyaWNzOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1hc2tJbWFnZU9wZXJhdGlvbjsK
QEAgLTY4OSw3ICs2ODksNyBAQCBwdWJsaWM6CiAgICAgRUNsZWFyIGNsZWFyKCkgY29uc3QgeyBy
ZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLmNsZWFyKCk7IH0KICAgICBFVGFibGVMYXlvdXQgdGFi
bGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MudGFibGVMYXlvdXQo
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgZmxvYXQgc3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRl
ZERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBpbmxpbmUgU3R5bGVJbmhlcml0ZWREYXRhOjpTdHlsZUluaGVyaXRlCiAjaWYgRU5BQkxF
KElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgLCBzcGVjaWZpZWRMaW5lSGVpZ2h0KG8uc3BlY2lm
aWVkTGluZUhlaWdodCkKICNlbmRpZgotICAgICwgZm9udChvLmZvbnQpCisgICAgLCBmb250Q2Fz
Y2FkZShvLmZvbnRDYXNjYWRlKQogICAgICwgY29sb3Ioby5jb2xvcikKICAgICAsIHZpc2l0ZWRM
aW5rQ29sb3Ioby52aXNpdGVkTGlua0NvbG9yKQogewpAQCAtNjcsNyArNjcsNyBAQCBib29sIFN0
eWxlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShjb25zCiAjaWYgRU5BQkxFKElPU19URVhUX0FV
VE9TSVpJTkcpCiAgICAgICAgICYmIHNwZWNpZmllZExpbmVIZWlnaHQgPT0gby5zcGVjaWZpZWRM
aW5lSGVpZ2h0CiAjZW5kaWYKLSAgICAgICAgJiYgZm9udCA9PSBvLmZvbnQKKyAgICAgICAgJiYg
Zm9udENhc2NhZGUgPT0gby5mb250Q2FzY2FkZQogICAgICAgICAmJiBjb2xvciA9PSBvLmNvbG9y
CiAgICAgICAgICYmIHZpc2l0ZWRMaW5rQ29sb3IgPT0gby52aXNpdGVkTGlua0NvbG9yCiAgICAg
ICAgICYmIGhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0gby5ob3Jpem9udGFsX2JvcmRlcl9z
cGFjaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0
ZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlSW5oZXJpdGVkRGF0YS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNkZWZpbmUgU3R5bGVJbmhlcml0ZWREYXRhX2gKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgTGVuZ3RoIHNw
ZWNpZmllZExpbmVIZWlnaHQ7CiAjZW5kaWYKIAotICAgIEZvbnQgZm9udDsKKyAgICBGb250Q2Fz
Y2FkZSBmb250Q2FzY2FkZTsKICAgICBDb2xvciBjb2xvcjsKICAgICBDb2xvciB2aXNpdGVkTGlu
a0NvbG9yOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNSwxMyArMjI1LDEzIEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6dXBkYXRlU2Nh
bGVkRm8KICAgICBjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKCp0aGlzLCBzdHlsZSgpLCBt
X3NjYWxpbmdGYWN0b3IsIG1fc2NhbGVkRm9udCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW5saW5l
VGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0JiBzY2FsaW5nRmFjdG9yLCBG
b250JiBzY2FsZWRGb250KQordm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2Nh
bGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnRDYXNjYWRlJiBzY2FsZWRG
b250KQogewogICAgIC8vIEFsdGVyIGZvbnQtc2l6ZSB0byB0aGUgcmlnaHQgb24tc2NyZWVuIHZh
bHVlIHRvIGF2b2lkIHNjYWxpbmcgdGhlIGdseXBocyB0aGVtc2VsdmVzLCBleGNlcHQgd2hlbiBH
ZW9tZXRyaWNQcmVjaXNpb24gaXMgc3BlY2lmaWVkCiAgICAgc2NhbGluZ0ZhY3RvciA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVNjcmVlbkZvbnRTaXplU2NhbGluZ0ZhY3RvcihyZW5k
ZXJlcik7CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgPT0gMSB8fCAhc2NhbGluZ0ZhY3RvciB8fCBz
dHlsZS5mb250RGVzY3JpcHRpb24oKS50ZXh0UmVuZGVyaW5nTW9kZSgpID09IEdlb21ldHJpY1By
ZWNpc2lvbikgewogICAgICAgICBzY2FsaW5nRmFjdG9yID0gMTsKLSAgICAgICAgc2NhbGVkRm9u
dCA9IHN0eWxlLmZvbnQoKTsKKyAgICAgICAgc2NhbGVkRm9udCA9IHN0eWxlLmZvbnRDYXNjYWRl
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFJl
bmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsCiAgICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gYmV0dGVyIGhhbmRsZSB0aGUgY2FzZSB3aGVuIHdlIGNvbXB1dGUgdmVyeSBzbWFsbCBmb250
cyBiZWxvdyAoYmVsb3cgMXB0KS4KICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1
dGVTaXplKCksIHNjYWxpbmdGYWN0b3IsIHJlbmRlcmVyLmRvY3VtZW50KCkpKTsKIAotICAgIHNj
YWxlZEZvbnQgPSBGb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAgc2NhbGVkRm9udCA9
IEZvbnRDYXNjYWRlKGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgc2NhbGVkRm9udC51cGRh
dGUocmVuZGVyZXIuZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuZm9udFNlbGVjdG9y
KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDcgQEAKICNpZm5kZWYgUmVuZGVyU1ZHSW5saW5lVGV4dF9oCiAjZGVmaW5lIFJlbmRl
clNWR0lubGluZVRleHRfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtNDEsOSArNDEsOSBAQCBwdWJsaWM6
CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGxheW91dEF0dHJpYnV0ZXMoKSB7IHJldHVy
biAmbV9sYXlvdXRBdHRyaWJ1dGVzOyB9CiAKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zY2FsaW5nRmFjdG9yOyB9Ci0gICAgY29uc3QgRm9udCYgc2NhbGVkRm9u
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9CiAgICAgdm9pZCB1
cGRhdGVTY2FsZWRGb250KCk7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZU5ld1NjYWxlZEZvbnRG
b3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0JiBz
Y2FsaW5nRmFjdG9yLCBGb250JiBzY2FsZWRGb250KTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRl
TmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0
eWxlJiwgZmxvYXQmIHNjYWxpbmdGYWN0b3IsIEZvbnRDYXNjYWRlJiBzY2FsZWRGb250KTsKIAog
ICAgIC8vIFByZXNlcnZlcyBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gZm9yIHRoZSB1c2UgaW4g
RFJULiBJdCBrbm93cyBob3cgdG8gcm91bmQgYW5kIGRvZXMgYSBiZXR0ZXIgam9iIHRoYW4gZW5j
bG9zaW5nSW50UmVjdC4KICAgICBGbG9hdFJlY3QgZmxvYXRMaW5lc0JvdW5kaW5nQm94KCkgY29u
c3Q7CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwogCiAgICAgZmxvYXQg
bV9zY2FsaW5nRmFjdG9yOwotICAgIEZvbnQgbV9zY2FsZWRGb250OworICAgIEZvbnRDYXNjYWRl
IG1fc2NhbGVkRm9udDsKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyBtX2xheW91dEF0dHJp
YnV0ZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjCiAg
ICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAg
IEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIAotICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSBy
ZW5kZXJlcigpLnNjYWxlZEZvbnQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgc2NhbGVkRm9u
dCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBzY2Fs
ZWRGb250TWV0cmljcyA9IHNjYWxlZEZvbnQuZm9udE1ldHJpY3MoKTsKICAgICBGbG9hdFBvaW50
IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CiAgICAgaWYgKHNjYWxpbmdGYWN0
b3IgIT0gMSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6
OmxvY2FsU2VsZWN0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZXh0U2hvdWxkQmVQYWludGVkKGNv
bnN0IFJlbmRlclNWR0lubGluZVRleHQmIHRleHRSZW5kZXJlcikKIHsKLSAgICAvLyBGb250Ojpw
aXhlbFNpemUoKSwgcmV0dXJucyBGb250RGVzY3JpcHRpb246OmNvbXB1dGVkUGl4ZWxTaXplKCks
IHdoaWNoIHJldHVybnMgImludCh4ICsgMC41KSIuCisgICAgLy8gRm9udENhc2NhZGU6OnBpeGVs
U2l6ZSgpLCByZXR1cm5zIEZvbnREZXNjcmlwdGlvbjo6Y29tcHV0ZWRQaXhlbFNpemUoKSwgd2hp
Y2ggcmV0dXJucyAiaW50KHggKyAwLjUpIi4KICAgICAvLyBJZiB0aGUgYWJzb2x1dGUgZm9udCBz
aXplIG9uIHNjcmVlbiBpcyBiZWxvdyB4PTAuNSwgZG9uJ3QgcmVuZGVyIGFueXRoaW5nLgogICAg
IHJldHVybiB0ZXh0UmVuZGVyZXIuc2NhbGVkRm9udCgpLnBpeGVsU2l6ZSgpOwogfQpAQCAtNDE5
LDcgKzQxOSw3IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFIKICAg
ICAgICAgICAgICAgICAsIGRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBkaXJPdmVycmlk
ZSgpIHx8IHN0eWxlLT5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyIC8qIGRpcmVjdGlvbmFs
T3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnREYXRhKCku
aXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIHJ1bi5kaXNh
YmxlUm91bmRpbmdIYWNrcygpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHN0YXRpYyBpbmxpbmUgZmxv
YXQgcG9zaXRpb25PZmZzZXRGb3JEZWMKICAgICByZXR1cm4gMC4wZjsKIH0KIAotc3RhdGljIGlu
bGluZSBmbG9hdCB0aGlja25lc3NGb3JEZWNvcmF0aW9uKFRleHREZWNvcmF0aW9uLCBjb25zdCBG
b250JiBmb250KQorc3RhdGljIGlubGluZSBmbG9hdCB0aGlja25lc3NGb3JEZWNvcmF0aW9uKFRl
eHREZWNvcmF0aW9uLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCkKIHsKICAgICAvLyBGSVhNRTog
Rm9yIFNWRyBGb250cyB3ZSBuZWVkIHRvIHVzZSB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRo
ZSA8Zm9udC1mYWNlPiBpZiBzcGVjaWZpZWQuCiAgICAgLy8gQ29tcGF0aWJsZSB3aXRoIEJhdGlr
L09wZXJhCkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERl
Y29yYXRpb25XaQogICAgIFJlbmRlclN0eWxlJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9u
UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSAxOwotICAgIEZv
bnQgc2NhbGVkRm9udDsKKyAgICBGb250Q2FzY2FkZSBzY2FsZWRGb250OwogICAgIFJlbmRlclNW
R0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoZGVjb3JhdGlvblJlbmRl
cmVyLCBkZWNvcmF0aW9uU3R5bGUsIHNjYWxpbmdGYWN0b3IsIHNjYWxlZEZvbnQpOwogICAgIEFT
U0VSVChzY2FsaW5nRmFjdG9yKTsKIApAQCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWQKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVu
ZGVyZXIoKS5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0g
ICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gcmVuZGVyZXIoKS5zY2FsZWRGb250KCk7
CiAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3R5bGUtPnRleHRTaGFkb3coKTsKIAog
ICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDcgKzQzOSw3
IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0VGV4dE9uTGkKIAogICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0ZXh0LT50ZXh0KCkpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCk7CiAKICAgICBT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyBzcGFjaW5nTGF5b3V0KGZvbnQpOwogICAgIFNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZSBiYXNlbGluZUxheW91dChmb250KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIgogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtMjgsNyAr
MjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZTo6U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnQmIGZvbnQpCitTVkdU
ZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZShjb25z
dCBGb250Q2FzY2FkZSYgZm9udCkKICAgICA6IG1fZm9udChmb250KQogewogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udDsKK2Ns
YXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgU1ZHRWxlbWVudDsK
IGNsYXNzIFNWR1JlbmRlclN0eWxlOwpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBTVkdUZXh0TWV0
cmljczsKIGNsYXNzIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKTsKIHB1YmxpYzoKLSAgICBT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUoY29uc3QgRm9udCYpOworICAgIFNWR1RleHRMYXlv
dXRFbmdpbmVCYXNlbGluZShjb25zdCBGb250Q2FzY2FkZSYpOwogCiAgICAgZmxvYXQgY2FsY3Vs
YXRlQmFzZWxpbmVTaGlmdChjb25zdCBTVkdSZW5kZXJTdHlsZSosIFNWR0VsZW1lbnQqIGxlbmd0
aENvbnRleHQpIGNvbnN0OwogICAgIGZsb2F0IGNhbGN1bGF0ZUFsaWdubWVudEJhc2VsaW5lU2hp
ZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIp
IGNvbnN0OwpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEVBbGlnbm1l
bnRCYXNlbGluZSBkb21pbmFudEJhc2VsaW5lVG9BbGlnbm1lbnRCYXNlbGluZShib29sIGlzVmVy
dGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3Q7CiAKLSAg
ICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
LmgiCiAKLSNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNs
dWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIApA
QCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250JiBmb250
KQorU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX2xh
c3RDaGFyYWN0ZXIoMCkKIHsKQEAgLTk4LDcgKzk4LDcgQEAgZmxvYXQgU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmc6OmNhbGN1bAogCiAgICAgZmxvYXQgc3BhY2luZyA9IG1fZm9udC5sZXR0ZXJT
cGFjaW5nKCkgKyBrZXJuaW5nOwogICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICYmIGxhc3RDaGFy
YWN0ZXIgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpIHsKLSAgICAgICAgaWYgKEZvbnQ6OnRyZWF0
QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqbGFzdENo
YXJhY3RlcikpCisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKCpjdXJyZW50
Q2hhcmFjdGVyKSAmJiAhRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3Rlcikp
CiAgICAgICAgICAgICBzcGFjaW5nICs9IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEVuZ2luZVNwYWNpbmcuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9u
dDsKK2NsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CiBjbGFzcyBTVkdF
bGVtZW50OwogCkBAIC0zMiwxMyArMzIsMTMgQEAgY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFNW
R1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdU
ZXh0TGF5b3V0RW5naW5lU3BhY2luZyk7CiBwdWJsaWM6Ci0gICAgU1ZHVGV4dExheW91dEVuZ2lu
ZVNwYWNpbmcoY29uc3QgRm9udCYpOworICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNv
bnN0IEZvbnRDYXNjYWRlJik7CiAKICAgICBmbG9hdCBjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wg
aXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBo
KTsKICAgICBmbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nQW5kU3BhY2luZyhjb25zdCBTVkdSZW5k
ZXJTdHlsZSosIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQsIGNvbnN0IFVDaGFyKiBjdXJyZW50
Q2hhcmFjdGVyKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29u
c3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBjb25zdCBVQ2hhciogbV9sYXN0Q2hhcmFjdGVy
OwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3MoUmVuZGVy
U1ZHCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHRSZW5kZXJlci5zY2FsaW5nRmFjdG9y
KCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAgY29uc3QgRm9udCYgc2NhbGVk
Rm9udCA9IHRleHRSZW5kZXJlci5zY2FsZWRGb250KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUm
IHNjYWxlZEZvbnQgPSB0ZXh0UmVuZGVyZXIuc2NhbGVkRm9udCgpOwogICAgIGludCBsZW5ndGgg
PSAwOwogCiAgICAgLy8gQ2FsY3VsYXRlIHdpZHRoL2hlaWdodCB1c2luZyB0aGUgc2NhbGVkIGZv
bnQsIGRpdmlkZSB0aGlzIHJlc3VsdCBieSB0aGUgc2NhbGluZ0ZhY3RvciBhZnRlcndhcmRzLgpA
QCAtNzAsNyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1Y3RUZXh0UnVu
CiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwg
aXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICov
KTsKIAotICAgIGlmIChzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkp
CisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250
KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7
CkBAIC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJl
Q2gKIAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWR0lubGluZVRleHQm
IHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGZsb2F0IHdpZHRoLCBj
b25zdCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQu
c3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7CisgICAgYm9vbCBu
ZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gdGV4dC5zY2FsaW5nRmFj
dG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCShy
ZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsOSBAQCB2b2lk
IFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6aW5pdGlhbGl6ZU1lCiAgICAgbV9jb21wbGV4U3RhcnRU
b0N1cnJlbnRNZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3MoKTsKICAgICBtX3RvdGFsV2lkdGggPSAw
OwogCi0gICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHRleHQuc2NhbGVkRm9udCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBzY2FsZWRGb250ID0gdGV4dC5zY2FsZWRGb250KCk7CiAgICAg
bV9ydW4gPSBTVkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0KTsKLSAgICBtX2lz
Q29tcGxleFRleHQgPSBzY2FsZWRGb250LmNvZGVQYXRoKG1fcnVuKSA9PSBGb250OjpDb21wbGV4
OworICAgIG1faXNDb21wbGV4VGV4dCA9IHNjYWxlZEZvbnQuY29kZVBhdGgobV9ydW4pID09IEZv
bnRDYXNjYWRlOjpDb21wbGV4OwogCiAgICAgaWYgKG1faXNDb21wbGV4VGV4dCkKICAgICAgICAg
bV9zaW1wbGVXaWR0aEl0ZXJhdG9yID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIs
NyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250CiAgICAgcmV0dXJu
IHN2Z0ZvbnREYXRhOwogfQogCi1mbG9hdCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Zmxv
YXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4s
IGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBTVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0
cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3IgaXQoJmZvbnQsIHJ1
bik7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9p
ZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogICAgIH0KIH0KIAotc3RhdGlj
IEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMg
R2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7
CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0YSA9IGZvbnQucHJpbWFy
eUZvbnREYXRhKCk7CiAgICAgaWYgKCFwcmltYXJ5Rm9udERhdGEuaXNTVkdGb250KCkpCkBAIC0z
MDEsNyArMzAxLDcgQEAgc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JGb250KGNvbgog
ICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFy
eUZvbnREYXRhKTsKIH0KIAotR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRl
cmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0
ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJp
bmdDYWNoZSkKK0dseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBXaWR0aEl0ZXJhdG9yJiBpdGVy
YXRvciwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rl
ciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmlu
Z0NhY2hlKQogewogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBmb250LmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIG1pcnJvciwgQXV0b1ZhcmlhbnQpOwogICAgIGlmICghZ2x5cGhE
YXRhLmdseXBoKQpAQCAtMzQyLDcgKzM0Miw3IEBAIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDo6Z2wKICAgICAvLyBUaGUgYmVoYXZpb3IgZG9lcyBub3Qgc2VlbSB0byBiZSBz
cGVjaWZpZWQuIEZvciBzaW1wbGljaXR5IHdlIGRvbid0IHRyeSB0byByZXNvbHZlIGZvbnQgZmFs
bGJhY2tzIGNvbnRleHQtc2Vuc2l0aXZlbHkuCiAgICAgRm9udERlc2NyaXB0aW9uIGZhbGxiYWNr
RGVzY3JpcHRpb24gPSBmb250LmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZhbGxiYWNrRGVzY3Jp
cHRpb24uc2V0RmFtaWxpZXMoVmVjdG9yPEF0b21pY1N0cmluZz4geyBzYW5zU2VyaWZGYW1pbHkg
fSk7Ci0gICAgRm9udCBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlvbiwgZm9udC5sZXR0
ZXJTcGFjaW5nKCksIGZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgRm9udENhc2NhZGUgZmFsbGJh
Y2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250Lndv
cmRTcGFjaW5nKCkpOwogICAgIGZhbGxiYWNrRm9udC51cGRhdGUoZm9udC5mb250U2VsZWN0b3Io
KSk7CiAKICAgICByZXR1cm4gZmFsbGJhY2tGb250LmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsIG1pcnJvciwgQXV0b1ZhcmlhbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZu
ZGVmIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKICNkZWZpbmUgU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHRfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw5
ICs0Miw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZTsgfQogICAg
IHZvaWQgc2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZSogb2JqZWN0
KSB7IG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IG9iamVjdDsgfQogCi0gICAgdmlydHVhbCBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIs
IGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5n
dGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVG
b250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVz
aW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1l
ZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQg
ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwg
V2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOwog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxl
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4
dEJveFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHlsZS5oIgogCi0jaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIApAQCAtODksNyArODksNyBAQCBHbHlw
aE92ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvCiAgICAgZmxvYXQgd2F2eU9mZnNl
dDsKICAgICAgICAgCiAgICAgVGV4dERlY29yYXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUgPSBs
aW5lU3R5bGUudGV4dERlY29yYXRpb25TdHlsZSgpOwotICAgIGZsb2F0IGhlaWdodCA9IGxpbmVT
dHlsZS5mb250KCkuZm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOworICAgIGZsb2F0IGhlaWdo
dCA9IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKTsK
ICAgICBHbHlwaE92ZXJmbG93IG92ZXJmbG93UmVzdWx0OwogICAgIAogICAgIGlmIChkZWNvcmF0
aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZVdhdnkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBJbmxpbmVUZXh0Qm94U3R5bGVfaAogI2RlZmluZSBJbmxp
bmVUZXh0Qm94U3R5bGVfaAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50
LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNv
bHZlRm9yRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgUmVm
PFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29ucwogICAgIGRvY3VtZW50U3R5bGUu
Z2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAKICAgICBDU1NGb250
U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygp
ID8gZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCktPmZvbnRTZWxlY3RvcigpIDogbnVs
bHB0cjsKLSAgICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9y
KTsKKyAgICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxl
Y3Rvcik7CiAKICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTc4LDcgKzk3OCw3IEBAIHZvaWQgcmVzb2x2ZVRyZWUoRG9jdW1lbnQmIGRvY3VtZW50LCBDaGEK
ICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LnNldHRpbmdzKCkpIHsK
ICAgICAgICAgICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBkb2N1bWVudC5zdHls
ZVJlc29sdmVySWZFeGlzdHMoKTsKICAgICAgICAgICAgIGlmIChzZXR0aW5ncy0+Zm9udEZhbGxi
YWNrUHJlZmVyc1BpY3RvZ3JhcGhzKCkgJiYgc3R5bGVSZXNvbHZlcikKLSAgICAgICAgICAgICAg
ICBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNl
bGVjdG9yKCkpOworICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udENhc2Nh
ZGUoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgU3R5bGU6OkNoYW5nZSBkb2N1bWVudENoYW5nZSA9IGRldGVybWluZUNoYW5nZShk
b2N1bWVudFN0eWxlLmdldCgpLCBkb2N1bWVudC5yZW5kZXJWaWV3KCktPnN0eWxlKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOSAr
MjgwLDkgQEAgdm9pZCBjb21wdXRlTm9ybWFsaXplZFNwYWNlcyhjb25zdCBUZXh0UgogICAgIGlm
IChub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUubGVuZ3RoKCkgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KHJ1bi5pczhCaXQoKSkKLSAgICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9u
dDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzOCgpLCBydW4uY2hhcmFjdGVyc0xlbmd0
aCgpKTsKKyAgICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udENhc2NhZGU6
Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVyczgoKSwgcnVuLmNoYXJhY3RlcnNMZW5ndGgo
KSk7CiAgICAgZWxzZQotICAgICAgICBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUgPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMxNigpLCBydW4uY2hhcmFjdGVyc0xlbmd0
aCgpKTsKKyAgICAgICAgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlID0gRm9udENhc2NhZGU6
Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3Ro
KCkpOwogICAgIGlmIChtaXJyb3IpCiAgICAgICAgIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNo
ZSA9IGNyZWF0ZVN0cmluZ1dpdGhNaXJyb3JlZENoYXJhY3RlcnMobm9ybWFsaXplZFNwYWNlc1N0
cmluZ0NhY2hlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdIS2VybkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUxp
c3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5o
IgotI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHRm9udEZhY2VTcmNFbGVtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2
LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
Rm9udC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9Gb250Q2FzY2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4K
QEAgLTQ2MywxMiArNDYzLDEyIEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0RGVmYXVsdFJlcXVlc3RU
aW1lb3UKIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0
aChib29sIGFsd2F5c1VzZUNvbXBsZXhUZXh0KQogewotICAgIFdlYkNvcmU6OkZvbnQ6OnNldENv
ZGVQYXRoKGFsd2F5c1VzZUNvbXBsZXhUZXh0ID8gV2ViQ29yZTo6Rm9udDo6Q29tcGxleCA6IFdl
YkNvcmU6OkZvbnQ6OkF1dG8pOworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRDb2RlUGF0
aChhbHdheXNVc2VDb21wbGV4VGV4dCA/IFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpDb21wbGV4IDog
V2ViQ29yZTo6Rm9udENhc2NhZGU6OkF1dG8pOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcoYm9vbCB1c2VGb250U21vb3RoaW5nKQogewotICAgIFdlYkNv
cmU6OkZvbnQ6OnNldFNob3VsZFVzZVNtb290aGluZyh1c2VGb250U21vb3RoaW5nKTsKKyAgICBX
ZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKHVzZUZvbnRTbW9vdGhp
bmcpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNzg0OTYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwMiw3ICs4MDIsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JT
dGF0ZSgpIGNvbnN0CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKICAgICAgICAgTm9k
ZSogbm9kZVRvUmVtb3ZlOwogICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRpdG9y
OjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewotICAgICAg
ICAgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdl
dENURm9udCgpOworICAgICAgICAgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKICAgICAgICAgICAgIENURm9udFN5
bWJvbGljVHJhaXRzIHRyYWl0cyA9IGZvbnQgPyBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250
KSA6IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0cmFpdHMgJiBrQ1RGb250VHJh
aXRCb2xkKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNz
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQcm9jZXNzQ29jb2EubW0JKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNp
bXBvcnQgPFdlYkNvcmUvRm9udC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01l
bW9yeUNhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeVByZXNzdXJlSGFuZGxlci5oPgpA
QCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2Vi
UHIKICAgICBtX2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCA9IFdURjo6bW92ZShwYXJhbWV0
ZXJzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQb3J0KTsKICAgICBtX3ByZXNlbnRlckFwcGxpY2F0
aW9uUGlkID0gcGFyYW1ldGVycy5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZDsKICAgICBtX3Nob3Vs
ZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbiA9IHBhcmFtZXRlcnMuc2hvdWxkRm9yY2VTY3Jl
ZW5Gb250U3Vic3RpdHV0aW9uOwotICAgIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1
cmVzKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCA/
IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0RGVmYXVsdFR5
cGVzZXR0aW5nRmVhdHVyZXMocGFyYW1ldGVycy5zaG91bGRFbmFibGVLZXJuaW5nQW5kTGlnYXR1
cmVzQnlEZWZhdWx0ID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDApOwogCiAgICAgTWVtb3J5UHJl
c3N1cmVIYW5kbGVyOjpSZWxpZWZMb2dnZXI6OnNldExvZ2dpbmdFbmFibGVkKHBhcmFtZXRlcnMu
c2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZMb2dnaW5nKTsKIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCShyZXZpc2lvbiAx
Nzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJXZWJLaXROU1N0cmlu
Z0V4dHJhcy5oIgogCiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9y
dCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UnVu
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5oPgpAQCAtOTIsNyAr
OTIsNyBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgCiAgICAgICAg
IGlmICghZmxpcHBlZCkKICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwg
MSwgLTEpOwogCi0gICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250
LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBmb250
U21vb3RoaW5nSXNBbGxvd2VkID8gQXV0b1Ntb290aGluZyA6IEFudGlhbGlhc2VkKTsKKyAgICAg
ICAgRm9udENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBw
b2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dLCBmb250U21vb3RoaW5n
SXNBbGxvd2VkID8gQXV0b1Ntb290aGluZyA6IEFudGlhbGlhc2VkKTsKICAgICAgICAgVGV4dFJ1
biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGlu
Z0hhY2tzKCk7CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCAtIChmbG9hdClfd2ViX3dpZHRoV2l0aEZv
bnQ6KE5TRm9udCAqKWZvCiAgICAgW3NlbGYgZ2V0Q2hhcmFjdGVyczpidWZmZXIuZGF0YSgpXTsK
IAogICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewot
ICAgICAgICBGb250IHdlYkNvcmVGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQgcG9p
bnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdU
b1NjcmVlbl0pOworICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1E
YXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVy
LmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAg
ICAgICAgIHJldHVybiB3ZWJDb3JlRm9udC53aWR0aChydW4pOwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJTdHJpbmdUcnVuY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJTdHJpbmdUcnVuY2F0b3IubW0JKHJldmlzaW9uIDE3ODQ5NikKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU3RyaW5nVHJ1bmNhdG9yLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwyMSArMjksMjEgQEAKICNpbXBvcnQgIldlYlN0cmluZ1RydW5jYXRvci5oIgog
CiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbXBvcnQgPFdlYkNvcmUvRm9udC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250
UGxhdGZvcm1EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmluZ1RydW5jYXRvci5oPgogI2lt
cG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRo
cmVhZC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKLXN0YXRpYyBXZWJDb3Jl
OjpGb250JiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCitzdGF0aWMgV2ViQ29yZTo6Rm9u
dENhc2NhZGUmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKIHsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TRm9udD4+IGN1cnJlbnROU0ZvbnQ7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OkZvbnQ+IGN1cnJlbnRGb250OworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxXZWJDb3JlOjpGb250Q2FzY2FkZT4gY3VycmVudEZvbnQ7CiAgICAgaWYg
KFtmb250IGlzRXF1YWw6Y3VycmVudE5TRm9udC5nZXQoKS5nZXQoKV0pCiAgICAgICAgIHJldHVy
biBjdXJyZW50Rm9udDsKICAgICBjdXJyZW50TlNGb250LmdldCgpID0gZm9udDsKLSAgICBjdXJy
ZW50Rm9udC5nZXQoKSA9IFdlYkNvcmU6OkZvbnQoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YShm
b250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRl
eHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CisgICAgY3VycmVudEZvbnQuZ2V0KCkgPSBXZWJDb3Jl
OjpGb250Q2FzY2FkZShXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKGZvbnQsIFtmb250IHBvaW50
U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9T
Y3JlZW5dKTsKICAgICByZXR1cm4gY3VycmVudEZvbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDE3
ODQ5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9w
dWxhdGUoKQogCiAgICAgICAgIFBvcHVwTWVudVN0eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1T
dHlsZShpKTsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0
ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAg
ICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnQoKSkgeworICAgICAgICBpZiAoc3R5bGUuZm9udCgp
ICE9IEZvbnRDYXNjYWRlKCkpIHsKICAgICAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKICAgICAgICAgICAgIGlmICghZm9u
dCkgewogICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5
Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OTAsNyArMTQ5MCw3IEBAIC0g
KEJPT0wpX3ZpZXdDbGFzczooQ2xhc3MgKil2Q2xhc3MgYW5kUmUKIAogKyAodm9pZClfc2V0QWx3
YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGg6KEJPT0wpZgogewotICAgIEZvbnQ6OnNldENvZGVQ
YXRoKGYgPyBGb250OjpDb21wbGV4IDogRm9udDo6QXV0byk7CisgICAgRm9udENhc2NhZGU6OnNl
dENvZGVQYXRoKGYgPyBGb250Q2FzY2FkZTo6Q29tcGxleCA6IEZvbnRDYXNjYWRlOjpBdXRvKTsK
IH0KIAogKyAodm9pZClfc2V0QWxsb3dzUm91bmRpbmdIYWNrczooQk9PTClhbGxvd3NSb3VuZGlu
Z0hhY2tzCkBAIC0zMTY4LDEyICszMTY4LDEyIEBAIC0gKEJPT0wpX2Rhc2hib2FyZEJlaGF2aW9y
OihXZWJEYXNoYm9hcmQKIAogKyAodm9pZClfc2V0U2hvdWxkVXNlRm9udFNtb290aGluZzooQk9P
TClmCiB7Ci0gICAgRm9udDo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGYpOworICAgIEZvbnRDYXNj
YWRlOjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoZik7CiB9CiAKICsgKEJPT0wpX3Nob3VsZFVzZUZv
bnRTbW9vdGhpbmcKIHsKLSAgICByZXR1cm4gRm9udDo6c2hvdWxkVXNlU21vb3RoaW5nKCk7Cisg
ICAgcmV0dXJuIEZvbnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhpbmcoKTsKIH0KIAogI2lmICFQ
TEFURk9STShJT1MpCkBAIC00NzEwLDcgKzQ3MTAsNyBAQCArICh2b2lkKWluaXRpYWxpemUKICAg
ICBncmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViR3JhbW1h
ckNoZWNraW5nRW5hYmxlZF07CiAjZW5kaWYKIAotICAgIEZvbnQ6OnNldERlZmF1bHRUeXBlc2V0
dGluZ0ZlYXR1cmVzKFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVy
ZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldID8gS2VybmluZyB8IExpZ2F0dXJlcyA6IDAp
OworICAgIEZvbnRDYXNjYWRlOjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERl
ZmF1bHRzS2V5XSA/IEtlcm5pbmcgfCBMaWdhdHVyZXMgOiAwKTsKIAogI2lmICFQTEFURk9STShJ
T1MpCiAgICAgYXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkID0gW3NlbGYgX3Nob3Vs
ZEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uQmVFbmFibGVkXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>