<?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>215259</bug_id>
          
          <creation_ts>2020-08-07 00:21:17 -0700</creation_ts>
          <short_desc>[WinCairo] Use Cairo DirectWrite font backend</short_desc>
          <delta_ts>2023-10-12 14:03:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>262768</dependson>
          <blocked>258365</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1678529</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-07 00:21:17 -0700</bug_when>
    <thetext>[WinCairo] Use Cairo DirectWrite font backend

Mozilla has Cairo DirectWrite patch. Let&apos;s try it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678530</commentid>
    <comment_count>1</comment_count>
      <attachid>406156</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-07 00:21:58 -0700</bug_when>
    <thetext>Created attachment 406156
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678532</commentid>
    <comment_count>2</comment_count>
      <attachid>406157</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-07 00:25:49 -0700</bug_when>
    <thetext>Created attachment 406157
Patch for Cairo 1.16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679186</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-10 13:42:01 -0700</bug_when>
    <thetext>No color glyphs are rendered with this patch.

According to the following document, I should use IDWriteFactory4::TranslateColorGlyphRun.

Color Fonts - Win32 apps | Microsoft Docs
https://docs.microsoft.com/en-us/windows/win32/directwrite/color-fonts

IDWriteFactory4::TranslateColorGlyphRun (dwrite_3.h) - Win32 apps | Microsoft Docs
https://docs.microsoft.com/en-us/windows/win32/api/dwrite_3/nf-dwrite_3-idwritefactory4-translatecolorglyphrun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681006</commentid>
    <comment_count>4</comment_count>
      <attachid>406764</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-17 19:59:25 -0700</bug_when>
    <thetext>Created attachment 406764
Patch for Cairo 1.16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681007</commentid>
    <comment_count>5</comment_count>
      <attachid>406765</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-17 20:00:06 -0700</bug_when>
    <thetext>Created attachment 406765
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683580</commentid>
    <comment_count>6</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-27 21:31:06 -0700</bug_when>
    <thetext>Graphic bits » Blog Archive » DirectWrite Text Rendering in Firefox 6
https://web.archive.org/web/20160909065035/https://blog.mozilla.org/nattokirai/2011/08/11/directwrite-text-rendering-in-firefox-6/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684257</commentid>
    <comment_count>7</comment_count>
      <attachid>407628</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-31 14:29:05 -0700</bug_when>
    <thetext>Created attachment 407628
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684265</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-31 14:52:32 -0700</bug_when>
    <thetext>I found some minor issues.

Because WinCairo is using Uniscribe for shaping, I need to use
DirectWrite GDI compatible mode at the moment. Unfortunately,
DirectWrite GDI compatible mode looks jaggier than GDI. Even
though GDI is rendering text with subpixel antialiasing both
vertically and horizontally, DirectWrite GDI compatible mode
seems to do it only horizontally.

Uniscribe doesn&apos;t combine some emoji sequences.
https://getemoji.com/

Both issues are related to Uniscribe. WinCairo should use
DirectWrite or HarfBuzz DirectWrite backend for shaping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684327</commentid>
    <comment_count>9</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-31 18:03:08 -0700</bug_when>
    <thetext>Screenshots: https://ibb.co/album/dsHY4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684328</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-31 18:04:32 -0700</bug_when>
    <thetext>Oh, wrong URL!

Screenshots: https://ibb.co/album/dsHY4y</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858668</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-04-05 18:21:57 -0700</bug_when>
    <thetext>Cairo 1.17.6 added DWrite support.
https://lists.cairographics.org/archives/cairo/2022-March/029398.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859589</commentid>
    <comment_count>12</comment_count>
      <attachid>457016</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-04-07 21:57:44 -0700</bug_when>
    <thetext>Created attachment 457016
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859592</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-04-07 22:01:17 -0700</bug_when>
    <thetext>Some ref tests failures.

  css2.1/20110323/text-indent-intrinsic-001.htm [ ImageOnlyFailure ]
  css2.1/20110323/text-indent-intrinsic-002.htm [ ImageOnlyFailure ]
  css2.1/20110323/text-indent-intrinsic-003.htm [ ImageOnlyFailure ]
  css2.1/20110323/text-indent-intrinsic-004.htm [ ImageOnlyFailure ]
  css3/bdi-element.html [ ImageOnlyFailure ]
  css3/flexbox/csswg/ttwf-reftest-flex-wrap-reverse.html [ ImageOnlyFailure ]
  css3/flexbox/csswg/ttwf-reftest-flex-wrap.html [ ImageOnlyFailure ]
  fast/css/absolute-inline-alignment-2.html [ ImageOnlyFailure ]
  fast/css/absolute-inline-alignment.html [ ImageOnlyFailure ]
  fast/css/negative-text-indent-in-inline-block.html [ ImageOnlyFailure ]
  fast/text/arabic-zwj-and-zwnj.html [ ImageOnlyFailure ]
  fast/text/complex-initial-advance.html [ ImageOnlyFailure ]
  fast/text/default-ignorable.html [ ImageOnlyFailure ]
  fast/text/embed-at-end-of-pre-wrap-line-simple-lines.html [ ImageOnlyFailure ]
  fast/text/fitzpatrick-combination.html [ ImageOnlyFailure ]
  fast/text/isolate-ignore.html [ ImageOnlyFailure ]
  fast/text/ja-sans-serif.html [ ImageOnlyFailure ]
  fast/text/otsvg-spacing.html [ ImageOnlyFailure ]
  fast/text/simple-line-layout-leading-whitespace-with-soft-hard-linebreak.html [ ImageOnlyFailure ]
  fast/text/soft-hyphen-min-preferred-width.html [ ImageOnlyFailure ]
  fast/text/softHyphen.html [ ImageOnlyFailure ]
  fast/text/text-combine-rendering.html [ ImageOnlyFailure ]
  fast/text/text-underline-first-line-decoration.html [ ImageOnlyFailure ]
  fast/text/text-underline-position-under.html [ ImageOnlyFailure ]
  fast/text/undefined-glyph-with-ligature.html [ ImageOnlyFailure ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869605</commentid>
    <comment_count>14</comment_count>
      <attachid>459487</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-05-17 00:47:55 -0700</bug_when>
    <thetext>Created attachment 459487
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870234</commentid>
    <comment_count>15</comment_count>
      <attachid>459562</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-05-18 18:42:56 -0700</bug_when>
    <thetext>Created attachment 459562
small-font-test.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870590</commentid>
    <comment_count>16</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-05-19 18:27:25 -0700</bug_when>
    <thetext>DWrite: Outermost edges of embedded bitmap font glyphs aren&apos;t drawn (#569) · Issues · cairo / cairo · GitLab
https://gitlab.freedesktop.org/cairo/cairo/-/issues/569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871028</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-05-22 13:45:47 -0700</bug_when>
    <thetext>DWrite: It looks jaggy (#567) · Issues · cairo / cairo · GitLab
https://gitlab.freedesktop.org/cairo/cairo/-/issues/567</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926493</commentid>
    <comment_count>18</comment_count>
      <attachid>464549</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-01-18 17:32:22 -0800</bug_when>
    <thetext>Created attachment 464549
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1932554</commentid>
    <comment_count>19</comment_count>
      <attachid>464937</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-02-09 22:50:19 -0800</bug_when>
    <thetext>Created attachment 464937
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1936618</commentid>
    <comment_count>20</comment_count>
      <attachid>465156</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-02-24 12:20:19 -0800</bug_when>
    <thetext>Created attachment 465156
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1944129</commentid>
    <comment_count>21</comment_count>
      <attachid>465605</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-03-27 00:06:30 -0700</bug_when>
    <thetext>Created attachment 465605
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945467</commentid>
    <comment_count>22</comment_count>
      <attachid>465690</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-03-30 13:51:10 -0700</bug_when>
    <thetext>Created attachment 465690
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1950678</commentid>
    <comment_count>23</comment_count>
      <attachid>466056</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-04-23 18:48:19 -0700</bug_when>
    <thetext>Created attachment 466056
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984533</commentid>
    <comment_count>24</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-10-11 23:02:34 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/18985</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984692</commentid>
    <comment_count>25</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-10-12 13:16:03 -0700</bug_when>
    <thetext>Committed 269270@main (0f066948ca64): &lt;https://commits.webkit.org/269270@main&gt;

Reviewed commits have been landed. Closing PR #18985 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984695</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-10-12 13:17:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/116878771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984712</commentid>
    <comment_count>27</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-10-12 13:59:57 -0700</bug_when>
    <thetext>Re-opening for pull request https://github.com/WebKit/WebKit/pull/19018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984714</commentid>
    <comment_count>28</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-10-12 14:03:04 -0700</bug_when>
    <thetext>Committed 269275@main (6d7089f0d592): &lt;https://commits.webkit.org/269275@main&gt;

Reviewed commits have been landed. Closing PR #19018 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406156</attachid>
            <date>2020-08-07 00:21:58 -0700</date>
            <delta_ts>2020-08-17 20:00:06 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>dwrite.patch</filename>
            <type>text/plain</type>
            <size>4920</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IDVkOGM3ZGU5ZDMwLi41ZmZl
ZjFhOTA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC00NCw2ICs0
NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgY29tY3RsMzIKICAgICBj
cnlwdDMyCiAgICAgZGVsYXlpbXAKKyAgICBkd3JpdGUKICAgICBkeHZhMgogICAgIGV2cgogICAg
IGlwaGxwYXBpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCmluZGV4IGExZGI1MmVl
MWM2Li4wYWNjNzBmMDUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKQEAg
LTM0LDEyICszNCw1NyBAQAogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KIAorI2lmZGVmIENB
SVJPX0hBU19EV1JJVEVfRk9OVAorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkhXbmRE
Qy5oIgorI2luY2x1ZGUgPGR3cml0ZV8xLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBEaXJlY3RXcml0ZSB7CisKK0lEV3JpdGVGYWN0b3J5KiBmYWN0b3J5KCkKK3sKKyAgICBz
dGF0aWMgSURXcml0ZUZhY3RvcnkqIGRpcmVjdFdyaXRlRmFjdG9yeSA9IG51bGxwdHI7CisgICAg
aWYgKCFkaXJlY3RXcml0ZUZhY3RvcnkpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IERXcml0ZUNy
ZWF0ZUZhY3RvcnkoRFdSSVRFX0ZBQ1RPUllfVFlQRV9TSEFSRUQsIF9fdXVpZG9mKGRpcmVjdFdy
aXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmRpcmVjdFdyaXRlRmFj
dG9yeSkpOworICAgICAgICBkaXJlY3RXcml0ZUZhY3RvcnktPkFkZFJlZigpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0
V3JpdGVGYWN0b3J5OworfQorCitDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBjcmVhdGVGb250RmFj
ZUZyb21IRk9OVChIRk9OVCBmb250KQoreworICAgIENPTVB0cjxJRFdyaXRlR2RpSW50ZXJvcD4g
Z2RpSW50ZXJvcDsKKyAgICBmYWN0b3J5KCktPkdldEdkaUludGVyb3AoJmdkaUludGVyb3ApOwor
CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gZHdGYWNlOworICAgIEhXbmREQyBoZGMoMCk7
CisgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgZm9udCk7CisgICAgSFJF
U1VMVCBociA9IGdkaUludGVyb3AtPkNyZWF0ZUZvbnRGYWNlRnJvbUhkYyhoZGMsICZkd0ZhY2Up
OworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBTZWxl
Y3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICByZXR1cm4gZHdGYWNlOworfQorCit9IC8vIG5h
bWVzcGFjZSBEaXJlY3RXcml0ZQorfQorCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxv
YXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKQogeworI2lmZGVmIENBSVJPX0hBU19E
V1JJVEVfRk9OVAorICAgIGF1dG8gZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZUZvbnRGYWNl
RnJvbUhGT05UKGZvbnQpOworICAgIEFTU0VSVChkd0ZvbnQpOworICAgIGNhaXJvX2ZvbnRfZmFj
ZV90KiBmb250RmFjZSA9IGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl9kd3JpdGVf
Zm9udGZhY2UobnVsbHB0ciwgZHdGb250LmdldCgpKTsKKyNlbHNlCiAgICAgY2Fpcm9fZm9udF9m
YWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQo
Zm9udCk7CisjZW5kaWYKIAogICAgIGNhaXJvX21hdHJpeF90IHNpemVNYXRyaXgsIGN0bTsKICAg
ICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJv
V2luLmNwcAppbmRleCA1YmUzNWJmNmI3Mi4uNGNmNjk0ODllYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFDYWlyb1dpbi5jcHAKQEAgLTYzLDkgKzYzLDkgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQo
KQogICAgIFNhdmVEQyhkYyk7CiAKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250
ID0gbV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpOwotICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNz
TXVsdGlwbGllciA9IGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRyaWNzX2ZhY3Rvcihz
Y2FsZWRGb250KSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBjb25zdCBkb3VibGUgbWV0
cmljc011bHRpcGxpZXIgPSAxLjAgLyAzMjsKIAotICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250
X3NlbGVjdF9mb250KHNjYWxlZEZvbnQsIGRjKTsKKyAgICBhdXRvIG9sZEZvbnQgPSBTZWxlY3RP
YmplY3QoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwogCiAgICAgLy8gRklYTUU6IE5lZWRz
IHRvIHRha2UgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgaW50byBhY2NvdW50CiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4NgpAQCAtODcsNyAr
ODcsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgZmxvYXQgeEhlaWdodCA9IC1l
eHRlbnRzLnlfYmVhcmluZzsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0
KTsKLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7Cisg
ICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKIAogICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwog
ICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwpAQCAtMTAyLDE0ICsxMDIsMTMgQEAgRmxv
YXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAK
ICAgICBIV25kREMgZGMoMCk7CiAgICAgU2F2ZURDKGRjKTsKLSAgICBhdXRvIHNjYWxlZEZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCk7Ci0gICAgY2Fpcm9fd2luMzJfc2NhbGVkX2Zv
bnRfc2VsZWN0X2ZvbnQoc2NhbGVkRm9udCwgZGMpOworICAgIGF1dG8gb2xkRm9udCA9IFNlbGVj
dE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7CiAKICAgICBHTFlQSE1FVFJJQ1Mg
Z2RpTWV0cmljczsKICAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgeyAwLCAxIH0s
IHsgMCwgMCB9LCB7IDAsIDAgfSwgeyAwLCAxIH0gfTsKICAgICBHZXRHbHlwaE91dGxpbmUoZGMs
IGdseXBoLCBHR09fTUVUUklDUyB8IEdHT19HTFlQSF9JTkRFWCwgJmdkaU1ldHJpY3MsIDAsIDAs
ICZpZGVudGl0eSk7CiAKLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2Nh
bGVkRm9udCk7CisgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKICAgICBSZXN0b3JlREMo
ZGMsIC0xKTsKICAgICByZXR1cm4gRmxvYXRSZWN0KGdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2lu
LngsIC1nZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi55LAogICAgICAgICBnZGlNZXRyaWNzLmdt
QmxhY2tCb3hYICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZ
KTsKQEAgLTEyNiwxNyArMTI1LDE3IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBIV25kREMgZGMoMCk7CiAgICAgU2F2ZURDKGRjKTsK
IAotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5z
Y2FsZWRGb250KCk7Ci0gICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2ZvbnQoc2Nh
bGVkRm9udCwgZGMpOworICAgIGF1dG8gb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9wbGF0
Zm9ybURhdGEuaGZvbnQoKSk7CiAKICAgICBpbnQgd2lkdGg7CiAgICAgR2V0Q2hhcldpZHRoSShk
YywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7CiAKLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9k
b25lX2ZvbnQoc2NhbGVkRm9udCk7CisgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKIAog
ICAgIFJlc3RvcmVEQyhkYywgLTEpOwogCi0gICAgY29uc3QgZG91YmxlIG1ldHJpY3NNdWx0aXBs
aWVyID0gY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfZ2V0X21ldHJpY3NfZmFjdG9yKHNjYWxlZEZv
bnQpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNj
YWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCk7CisgICAgY29uc3QgZG91Ymxl
IG1ldHJpY3NNdWx0aXBsaWVyID0gMS4wIC8gMzI7CiAgICAgcmV0dXJuIHdpZHRoICogbWV0cmlj
c011bHRpcGxpZXI7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406157</attachid>
            <date>2020-08-07 00:25:49 -0700</date>
            <delta_ts>2020-08-17 19:59:25 -0700</delta_ts>
            <desc>Patch for Cairo 1.16</desc>
            <filename>0002-DirectWrite.patch</filename>
            <type>text/plain</type>
            <size>76389</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">Y29tbWl0IDkzMjg4ZDc4MmRhZmY1M2JlNjY0ZGU0NDkyNDU2N2VjODVkNmEyYzYKQXV0aG9yOiBG
dWppaSBIaXJvbm9yaSA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CkRhdGU6ICAgVGh1IEF1ZyA2
IDE2OjI0OjIwIDIwMjAgKzA5MDAKCiAgICBNb3ppbGxhJ3MgRGlyZWN0V3JpdGUgcGF0Y2gKCmRp
ZmYgLS1naXQgYS9idWlsZC9NYWtlZmlsZS53aW4zMi5jb21tb24gYi9idWlsZC9NYWtlZmlsZS53
aW4zMi5jb21tb24KaW5kZXggN2Q3ZTk3MzVmLi4wYzY5Yzg0YWUgMTAwNjQ0Ci0tLSBhL2J1aWxk
L01ha2VmaWxlLndpbjMyLmNvbW1vbgorKysgYi9idWlsZC9NYWtlZmlsZS53aW4zMi5jb21tb24K
QEAgLTI5LDcgKzI5LDcgQEAgZW5kaWYKIFBJWE1BTl9DRkxBR1MgOj0gLUkkKFBJWE1BTl9QQVRI
KS9waXhtYW4vCiBQSVhNQU5fTElCUyA6PSAkKFBJWE1BTl9QQVRIKS9waXhtYW4vJChDRkcpL3Bp
eG1hbi0xLmxpYgogCi1DQUlST19MSUJTID0gIGdkaTMyLmxpYiBtc2ltZzMyLmxpYiB1c2VyMzIu
bGliCitDQUlST19MSUJTID0gIGdkaTMyLmxpYiBtc2ltZzMyLmxpYiB1c2VyMzIubGliIGFkdmFw
aTMyLmxpYiBvbGUzMi5saWIKIAogaWZlcSAoJChDQUlST19IQVNfUE5HX0ZVTkNUSU9OUyksMSkK
IGlmZXEgKCQoTElCUE5HX1BBVEgpLCkKQEAgLTYyLDcgKzYyLDEyIEBAIENBSVJPX0FSRkxBR1Mg
PSAkKERFRkFVTFRfQVJGTEFHUykgJChMREZMQUdTKQogCiAjIFNvbWUgZ2VuZXJpYyBydWxlcwog
Ci0kKENGRykvJS5vYmo6ICUuYyAkKHRvcF9zcmNkaXIpL3NyYy9jYWlyby1mZWF0dXJlcy5oCisK
KyQoQ0ZHKS8lLmMub2JqOiAlLmMgJCh0b3Bfc3JjZGlyKS9zcmMvY2Fpcm8tZmVhdHVyZXMuaAor
CUBta2RpciAtcCAkKENGRykvYGRpcm5hbWUgJDxgCisJQCQoQ0MpICQoQ0FJUk9fQ0ZMQUdTKSAt
YyAtRm8iJEAiICQ8CisKKyQoQ0ZHKS8lLmNwcC5vYmo6ICUuY3BwICQodG9wX3NyY2Rpcikvc3Jj
L2NhaXJvLWZlYXR1cmVzLmgKIAlAbWtkaXIgLXAgJChDRkcpL2BkaXJuYW1lICQ8YAogCUAkKEND
KSAkKENBSVJPX0NGTEFHUykgLWMgLUZvIiRAIiAkPAogCmRpZmYgLS1naXQgYS9idWlsZC9NYWtl
ZmlsZS53aW4zMi5mZWF0dXJlcyBiL2J1aWxkL01ha2VmaWxlLndpbjMyLmZlYXR1cmVzCmluZGV4
IGIxNWM0NDg4Zi4uMDUyZjFhZGFkIDEwMDY0NAotLS0gYS9idWlsZC9NYWtlZmlsZS53aW4zMi5m
ZWF0dXJlcworKysgYi9idWlsZC9NYWtlZmlsZS53aW4zMi5mZWF0dXJlcwpAQCAtMTEsNiArMTEs
NyBAQCBDQUlST19IQVNfUVVBUlRaX0ZPTlQ9MAogQ0FJUk9fSEFTX1FVQVJUWl9JTUFHRV9TVVJG
QUNFPTAKIENBSVJPX0hBU19XSU4zMl9TVVJGQUNFPTEKIENBSVJPX0hBU19XSU4zMl9GT05UPTEK
K0NBSVJPX0hBU19EV1JJVEVfRk9OVD0xCiBDQUlST19IQVNfT1MyX1NVUkZBQ0U9MAogQ0FJUk9f
SEFTX0JFT1NfU1VSRkFDRT0wCiBDQUlST19IQVNfRFJNX1NVUkZBQ0U9MApkaWZmIC0tZ2l0IGEv
YnVpbGQvTWFrZWZpbGUud2luMzIuZmVhdHVyZXMtaCBiL2J1aWxkL01ha2VmaWxlLndpbjMyLmZl
YXR1cmVzLWgKaW5kZXggNTc1OWI0OGEzLi5iODVmOTM4ZGIgMTAwNjQ0Ci0tLSBhL2J1aWxkL01h
a2VmaWxlLndpbjMyLmZlYXR1cmVzLWgKKysrIGIvYnVpbGQvTWFrZWZpbGUud2luMzIuZmVhdHVy
ZXMtaApAQCAtMzgsNiArMzgsOSBAQCBlbmRpZgogaWZlcSAoJChDQUlST19IQVNfV0lOMzJfRk9O
VCksMSkKIAlAZWNobyAiI2RlZmluZSBDQUlST19IQVNfV0lOMzJfRk9OVCAxIiA+PiAkKHRvcF9z
cmNkaXIpL3NyYy9jYWlyby1mZWF0dXJlcy5oCiBlbmRpZgoraWZlcSAoJChDQUlST19IQVNfRFdS
SVRFX0ZPTlQpLDEpCisJQGVjaG8gIiNkZWZpbmUgQ0FJUk9fSEFTX0RXUklURV9GT05UIDEiID4+
ICQodG9wX3NyY2Rpcikvc3JjL2NhaXJvLWZlYXR1cmVzLmgKK2VuZGlmCiBpZmVxICgkKENBSVJP
X0hBU19PUzJfU1VSRkFDRSksMSkKIAlAZWNobyAiI2RlZmluZSBDQUlST19IQVNfT1MyX1NVUkZB
Q0UgMSIgPj4gJCh0b3Bfc3JjZGlyKS9zcmMvY2Fpcm8tZmVhdHVyZXMuaAogZW5kaWYKZGlmZiAt
LWdpdCBhL3NyYy9NYWtlZmlsZS5zb3VyY2VzIGIvc3JjL01ha2VmaWxlLnNvdXJjZXMKaW5kZXgg
MDk2YTNiY2ZhLi40OWQ2ZWUwNjkgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5zb3VyY2VzCisr
KyBiL3NyYy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0zNzMsNiArMzczLDcgQEAgY2Fpcm9fd2luMzJf
c291cmNlcyA9IFwKIAkkKE5VTEwpCiBjYWlyb193aW4zMl9mb250X3NvdXJjZXMgPSBcCiAJd2lu
MzIvY2Fpcm8td2luMzItZm9udC5jIFwKKwl3aW4zMi9jYWlyby1kd3JpdGUtZm9udC5jcHAgXAog
CSQoTlVMTCkKIAogY2Fpcm9fb3MyX2hlYWRlcnMgPSBjYWlyby1vczIuaApkaWZmIC0tZ2l0IGEv
c3JjL01ha2VmaWxlLndpbjMyIGIvc3JjL01ha2VmaWxlLndpbjMyCmluZGV4IDg2NDc5MWYzNy4u
ZTc1YjIyZDAyIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUud2luMzIKKysrIGIvc3JjL01ha2Vm
aWxlLndpbjMyCkBAIC02LDcgKzYsNyBAQCBTT1VSQ0VTID0gJChlbmFibGVkX2NhaXJvX3NvdXJj
ZXMpCiAKIFNUQVRJQ19TT1VSQ0VTID0gY2Fpcm8tc3lzdGVtLmMKIAotT0JKRUNUUyA9ICQocGF0
c3Vic3QgJS5jLCAkKENGRykvJS5vYmosICQoU09VUkNFUykpCitPQkpFQ1RTID0gJChwYXRzdWJz
dCAlLmNwcCwgJChDRkcpLyUuY3BwLm9iaiwgJChwYXRzdWJzdCAlLmMsICQoQ0ZHKS8lLmMub2Jq
LCAkKFNPVVJDRVMpKSkKIE9CSkVDVFNfU1RBVElDID0gJChwYXRzdWJzdCAlY2Fpcm8tc3lzdGVt
Lm9iaiwgJWNhaXJvLXN5c3RlbS1zdGF0aWMub2JqLCAkKE9CSkVDVFMpKQogCiBzdGF0aWM6IGlu
Zm9ybSAkKENGRykvY2Fpcm8tc3RhdGljLmxpYgpkaWZmIC0tZ2l0IGEvc3JjL2NhaXJvLXdpZGVp
bnQtdHlwZS1wcml2YXRlLmggYi9zcmMvY2Fpcm8td2lkZWludC10eXBlLXByaXZhdGUuaAppbmRl
eCA4NGEzY2JhYjAuLjU1OWQ0MzhkZiAxMDA2NDQKLS0tIGEvc3JjL2NhaXJvLXdpZGVpbnQtdHlw
ZS1wcml2YXRlLmgKKysrIGIvc3JjL2NhaXJvLXdpZGVpbnQtdHlwZS1wcml2YXRlLmgKQEAgLTUw
LDYgKzUwLDcgQEAKICNlbGlmIEhBVkVfU1lTX0lOVF9UWVBFU19ICiAjIGluY2x1ZGUgPHN5cy9p
bnRfdHlwZXMuaD4KICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjaWYgIWRlZmluZWQoX19jcGx1
c3BsdXMpCiAgIHR5cGVkZWYgX19pbnQ4IGludDhfdDsKICAgdHlwZWRlZiB1bnNpZ25lZCBfX2lu
dDggdWludDhfdDsKICAgdHlwZWRlZiBfX2ludDE2IGludDE2X3Q7CkBAIC01OCw2ICs1OSw3IEBA
CiAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJfdDsKICAgdHlwZWRlZiBfX2ludDY0
IGludDY0X3Q7CiAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKKyNlbmRpZgog
IyBpZm5kZWYgSEFWRV9VSU5UNjRfVAogIyAgZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQogIyBlbmRp
ZgpkaWZmIC0tZ2l0IGEvc3JjL2NhaXJvLXdpbjMyLXJlZnB0ci5oIGIvc3JjL2NhaXJvLXdpbjMy
LXJlZnB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMGJhZjhlZTdi
Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NhaXJvLXdpbjMyLXJlZnB0ci5oCkBAIC0wLDAgKzEs
MTc4IEBACisvKiAtKi0gTW9kZTogYzsgdGFiLXdpZHRoOiA4OyBjLWJhc2ljLW9mZnNldDogNDsg
aW5kZW50LXRhYnMtbW9kZTogdDsgLSotICovCisvKiBDYWlybyAtIGEgdmVjdG9yIGdyYXBoaWNz
IGxpYnJhcnkgd2l0aCBkaXNwbGF5IGFuZCBwcmludCBvdXRwdXQKKyAqCisgKiBDb3B5cmlnaHQg
qSAyMDEwIE1vemlsbGEgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCBlaXRo
ZXIgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uCisgKiAodGhlICJMR1BMIikgb3IsIGF0IHlvdXIgb3B0aW9uLCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1vemlsbGEKKyAqIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIk1Q
TCIpLiBJZiB5b3UgZG8gbm90IGFsdGVyIHRoaXMKKyAqIG5vdGljZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlcgorICogdGhlIE1QTCBv
ciB0aGUgTEdQTC4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBMR1BMIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5CisgKiBpbiB0aGUgZmlsZSBDT1BZSU5HLUxH
UEwtMi4xOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3
IFVTQQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTVBMIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5CisgKiBpbiB0aGUgZmlsZSBDT1BZSU5HLU1QTC0xLjEKKyAqCisg
KiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1
YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9NUEwvCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZCisgKiBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMR1BMIG9yIHRoZSBNUEwgZm9yCisgKiB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMuCisgKgor
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIGNhaXJvIGdyYXBoaWNzIGxpYnJhcnkuCisgKgor
ICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3pp
bGxhIEZvdW5kYXRpb24KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCUJhcyBTY2hvdXRlbiA8
YnNjaG91dGVuQG1vemlsbGEuY29tPgorICovCisjaWZuZGVmIENBSVJPX1dJTjMyX1JFRlBUUl9I
CisjZGVmaW5lIENBSVJPX1dJTjMyX1JFRlBUUl9ICisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIFRlbXBvcmFyeVJlZjsKKworLyoqCisgKiBSZWZQdHIgcG9pbnRzIHRvIGEgcmVmY291bnRl
ZCB0aGluZyB0aGF0IGhhcyBBZGRSZWYgYW5kIFJlbGVhc2UKKyAqIG1ldGhvZHMgdG8gaW5jcmVh
c2UvZGVjcmVhc2UgdGhlIHJlZmNvdW50LCByZXNwZWN0aXZlbHkuICBBZnRlciBhCisgKiBSZWZQ
dHI8VD4gaXMgYXNzaWduZWQgYSBUKiwgdGhlIFQqIGNhbiBiZSB1c2VkIHRocm91Z2ggdGhlIFJl
ZlB0cgorICogYXMgaWYgaXQgd2VyZSBhIFQqLgorICoKKyAqIEEgUmVmUHRyIGNhbiBmb3JnZXQg
aXRzIHVuZGVybHlpbmcgVCosIHdoaWNoIHJlc3VsdHMgaW4gdGhlIFQqCisgKiBiZWluZyB3cmFw
cGVkIGluIGEgdGVtcG9yYXJ5IG9iamVjdCB1bnRpbCB0aGUgVCogaXMgZWl0aGVyCisgKiByZS1h
ZG9wdGVkIGZyb20gb3IgcmVsZWFzZWQgYnkgdGhlIHRlbXBvcmFyeS4KKyAqLwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIFJlZlB0cgoreworICAgIC8vIFRvIGFsbG93IHRoZW0gdG8gdXNl
IHVucmVmKCkKKyAgICBmcmllbmQgY2xhc3MgVGVtcG9yYXJ5UmVmPFQ+OworCisgICAgc3RydWN0
IGRvbnRSZWYge307CisKK3B1YmxpYzoKKyAgICBSZWZQdHIoKSA6IHB0cigwKSB7IH0KKyAgICBS
ZWZQdHIoY29uc3QgUmVmUHRyJiBvKSA6IHB0cihyZWYoby5wdHIpKSB7fQorICAgIFJlZlB0cihj
b25zdCBUZW1wb3JhcnlSZWY8VD4mIG8pIDogcHRyKG8uZHJvcCgpKSB7fQorICAgIFJlZlB0cihU
KiB0KSA6IHB0cihyZWYodCkpIHt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIFJl
ZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDogcHRyKHJlZihvLmdldCgpKSkge30KKworICAgIH5S
ZWZQdHIoKSB7IHVucmVmKHB0cik7IH0KKworICAgIFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFJl
ZlB0ciYgbykgeworICAgICAgICBhc3NpZ24ocmVmKG8ucHRyKSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisgICAgUmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgVGVtcG9yYXJ5UmVmPFQ+
JiBvKSB7CisgICAgICAgIGFzc2lnbihvLmRyb3AoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgUmVmUHRyJiBvcGVyYXRvcj0oVCogdCkgeworICAgICAgICBhc3NpZ24ocmVm
KHQpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgUmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgUmVmUHRyPFU+JiBvKSB7CisgICAg
ICAgIGFzc2lnbihyZWYoby5nZXQoKSkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
CisgICAgVGVtcG9yYXJ5UmVmPFQ+IGZvcmdldCgpIHsKKyAgICAgICAgVCogdG1wID0gcHRyOwor
ICAgICAgICBwdHIgPSAwOworICAgICAgICByZXR1cm4gVGVtcG9yYXJ5UmVmPFQ+KHRtcCwgZG9u
dFJlZigpKTsKKyAgICB9CisKKyAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBwdHI7IH0KKyAg
ICBvcGVyYXRvciBUKigpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQorICAgIFQqIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBwdHI7IH0KKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biAqcHRyOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBvcGVyYXRvciBUZW1wb3Jh
cnlSZWY8VT4oKSB7IHJldHVybiBUZW1wb3JhcnlSZWY8VT4ocHRyKTsgfQorCisgICAgLyoqIAor
ICAgICAqIFdBUk5JTkcgZm9yIGVhc2Ugb2YgdXNlLCBwYXNzaW5nIGEgcmVmZXJlbmNlIHdpbGwg
cmVsZWFzZS9jbGVhciBvdXQgcHRyIQorICAgICAqIFdlIG51bGwgb3V0IHRoZSBwdHIgYmVmb3Jl
IHJldHVybmluZyBpdHMgYWRkcmVzcyBzbyBwZW9wbGUgcGFzc2luZyBieXJlZgorICAgICAqIGFz
IGlucHV0IHdpbGwgbW9zdCBsaWtlbHkgZ2V0IGZ1bmN0aW9ucyByZXR1cm5pbmcgZXJyb3JzIHJh
dGhlciB0aGFuIGFjY2Vzc2luZworICAgICAqIGZyZWVkIG1lbW9yeS4gRnVydGhlciBtb3JlIGFj
Y2Vzc2luZyBpdCBhZnRlciB0aGlzIHBvaW50IGlmIGl0IGhhc24ndAorICAgICAqIGJlZW4gc2V0
IHdpbGwgcHJvZHVjZSBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4KKyAgICAgKi8KKyAgICBU
Kiogb3BlcmF0b3ImKCkKKyAgICB7CisgICAgICAgaWYgKHB0cikgeworICAgICAgICAgICBwdHIt
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgcHRyID0gTlVMTDsKKyAgICAgICB9CisgICAgICAgcmV0
dXJuICZwdHI7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFQqIHQpIHsKKyAg
ICAgICAgdW5yZWYocHRyKTsKKyAgICAgICAgcHRyID0gdDsKKyAgICB9CisKKyAgICBUKiBwdHI7
CisKKyAgICBzdGF0aWMgaW5saW5lIFQqIHJlZihUKiB0KSB7CisgICAgICAgIGlmICh0KSB7Cisg
ICAgICAgICAgICB0LT5BZGRSZWYoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWYoVCogdCkgeworICAgICAgICBpZiAo
dCkgeworICAgICAgICAgICAgdC0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfTsKKwor
LyoqCisgKiBUZW1wb3JhcnlSZWY8VD4gcmVwcmVzZW50cyBhbiBvYmplY3QgdGhhdCBob2xkcyBh
IHRlbXBvcmFyeQorICogcmVmZXJlbmNlIHRvIGEgVC4gIFRlbXBvcmFyeVJlZiBvYmplY3RzIGNh
bid0IGJlIG1hbnVhbGx5IHJlZidkIG9yCisgKiB1bnJlZidkIChiZWluZyB0ZW1wb3Jhcmllcywg
bm90IGx2YWx1ZXMpLCBzbyBjYW4gb25seSByZWxpbnF1aXNoCisgKiByZWZlcmVuY2VzIHRvIG90
aGVyIG9iamVjdHMsIG9yIHVucmVmIG9uIGRlc3RydWN0aW9uLgorICovCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgVGVtcG9yYXJ5UmVmCit7CisgICAgLy8gVG8gYWxsb3cgaXQgdG8gY29u
c3RydWN0IFRlbXBvcmFyeVJlZiBmcm9tIGEgYmFyZSBUKgorICAgIGZyaWVuZCBjbGFzcyBSZWZQ
dHI8VD47CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJlZlB0cjxUPjo6ZG9udFJlZiBkb250UmVm
OworCitwdWJsaWM6CisgICAgVGVtcG9yYXJ5UmVmKFQqIHQpIDogcHRyKFJlZlB0cjxUPjo6cmVm
KHQpKSB7fQorICAgIFRlbXBvcmFyeVJlZihjb25zdCBUZW1wb3JhcnlSZWYmIG8pIDogcHRyKG8u
ZHJvcCgpKSB7fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBUZW1wb3JhcnlSZWYo
Y29uc3QgVGVtcG9yYXJ5UmVmPFU+JiBvKSA6IHB0cihvLmRyb3AoKSkge30KKworICAgIH5UZW1w
b3JhcnlSZWYoKSB7IFJlZlB0cjxUPjo6dW5yZWYocHRyKTsgfQorCisgICAgVCogZHJvcCgpIGNv
bnN0IHsKKyAgICAgICAgVCogdG1wID0gcHRyOworICAgICAgICBwdHIgPSAwOworICAgICAgICBy
ZXR1cm4gdG1wOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUZW1wb3JhcnlSZWYoVCogdCwgY29u
c3QgZG9udFJlZiYpIDogcHRyKHQpIHt9CisKKyAgICBtdXRhYmxlIFQqIHB0cjsKKworICAgIFRl
bXBvcmFyeVJlZigpOworICAgIFRlbXBvcmFyeVJlZiYgb3BlcmF0b3I9KGNvbnN0IFRlbXBvcmFy
eVJlZiYpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY2Fpcm8td2luMzIuaCBiL3Ny
Yy9jYWlyby13aW4zMi5oCmluZGV4IGRiNGNhYzY5Zi4uMzI5OTUxYjFjIDEwMDY0NAotLS0gYS9z
cmMvY2Fpcm8td2luMzIuaAorKysgYi9zcmMvY2Fpcm8td2luMzIuaApAQCAtMTA3LDYgKzEwNywz
NSBAQCBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9nZXRfZGV2aWNlX3RvX2xvZ2ljYWwgKGNhaXJv
X3NjYWxlZF9mb250X3QgKnNjYWxlZF9mb250LAogCiAjZW5kaWYgLyogQ0FJUk9fSEFTX1dJTjMy
X0ZPTlQgKi8KIAorI2lmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorCisvKgorICogV2luMzIgRGly
ZWN0V3JpdGUgZm9udCBzdXBwb3J0CisgKi8KK2NhaXJvX3B1YmxpYyBjYWlyb19mb250X2ZhY2Vf
dCAqCitjYWlyb19kd3JpdGVfZm9udF9mYWNlX2NyZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNlKHZv
aWQgKmR3cml0ZV9mb250LCB2b2lkICpkd3JpdGVfZm9udF9mYWNlKTsKKwordm9pZAorY2Fpcm9f
ZHdyaXRlX3NjYWxlZF9mb250X2FsbG93X21hbnVhbF9zaG93X2dseXBocyhjYWlyb19zY2FsZWRf
Zm9udF90ICpkd3JpdGVfc2NhbGVkX2ZvbnQsIGNhaXJvX2Jvb2xfdCBhbGxvd2VkKTsKKwordm9p
ZAorY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3NldF9mb3JjZV9HRElfY2xhc3NpYyhjYWlyb19z
Y2FsZWRfZm9udF90ICpkd3JpdGVfc2NhbGVkX2ZvbnQsIGNhaXJvX2Jvb2xfdCBmb3JjZSk7CisK
K2NhaXJvX2Jvb2xfdAorY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2dldF9mb3JjZV9HRElfY2xh
c3NpYyhjYWlyb19zY2FsZWRfZm9udF90ICpkd3JpdGVfc2NhbGVkX2ZvbnQpOworCit2b2lkCitj
YWlyb19kd3JpdGVfc2V0X2NsZWFydHlwZV9wYXJhbXMoRkxPQVQgZ2FtbWEsIEZMT0FUIGNvbnRy
YXN0LCBGTE9BVCBsZXZlbCwgaW50IGdlb21ldHJ5LCBpbnQgbW9kZSk7CisKK2ludAorY2Fpcm9f
ZHdyaXRlX2dldF9jbGVhcnR5cGVfcmVuZGVyaW5nX21vZGUoKTsKKworI2VuZGlmIC8qIENBSVJP
X0hBU19EV1JJVEVfRk9OVCAqLworCitzdHJ1Y3QgSURpcmVjdDNEU3VyZmFjZTk7CitjYWlyb19w
dWJsaWMgY2Fpcm9fc3VyZmFjZV90ICoKK2NhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlX3dpdGhf
ZDNkc3VyZmFjZTkgKHN0cnVjdCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7CisKIENBSVJP
X0VORF9ERUNMUwogCiAjZWxzZSAgLyogQ0FJUk9fSEFTX1dJTjMyX1NVUkZBQ0UgKi8KZGlmZiAt
LWdpdCBhL3NyYy9jYWlyby5oIGIvc3JjL2NhaXJvLmgKaW5kZXggMzQ5MmJkYzZiLi5kMDhhZTY3
N2UgMTAwNjQ0Ci0tLSBhL3NyYy9jYWlyby5oCisrKyBiL3NyYy9jYWlyby5oCkBAIC0xNTczLDYg
KzE1NzMsNyBAQCB0eXBlZGVmIGVudW0gX2NhaXJvX2ZvbnRfdHlwZSB7CiAgICAgQ0FJUk9fRk9O
VF9UWVBFX1RPWSwKICAgICBDQUlST19GT05UX1RZUEVfRlQsCiAgICAgQ0FJUk9fRk9OVF9UWVBF
X1dJTjMyLAorICAgIENBSVJPX0ZPTlRfVFlQRV9EV1JJVEUsCiAgICAgQ0FJUk9fRk9OVF9UWVBF
X1FVQVJUWiwKICAgICBDQUlST19GT05UX1RZUEVfVVNFUgogfSBjYWlyb19mb250X3R5cGVfdDsK
ZGlmZiAtLWdpdCBhL3NyYy9jYWlyb2ludC5oIGIvc3JjL2NhaXJvaW50LmgKaW5kZXggY2ZhZTE4
Y2Y5Li5mNTY1NDExMWQgMTAwNjQ0Ci0tLSBhL3NyYy9jYWlyb2ludC5oCisrKyBiL3NyYy9jYWly
b2ludC5oCkBAIC02NjEsNiArNjYxLDEyIEBAIGV4dGVybiBjb25zdCBjYWlyb19wcml2YXRlIHN0
cnVjdCBfY2Fpcm9fZm9udF9mYWNlX2JhY2tlbmQgX2NhaXJvX3dpbjMyX2ZvbnRfZmFjCiAKICNl
bmRpZgogCisjaWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisKK2V4dGVybiBjb25zdCBjYWlyb19w
cml2YXRlIHN0cnVjdCBfY2Fpcm9fZm9udF9mYWNlX2JhY2tlbmQgX2NhaXJvX2R3cml0ZV9mb250
X2ZhY2VfYmFja2VuZDsKKworI2VuZGlmCisKICNpZiBDQUlST19IQVNfUVVBUlRaX0ZPTlQKIAog
ZXh0ZXJuIGNvbnN0IGNhaXJvX3ByaXZhdGUgc3RydWN0IF9jYWlyb19mb250X2ZhY2VfYmFja2Vu
ZCBfY2Fpcm9fcXVhcnR6X2ZvbnRfZmFjZV9iYWNrZW5kOwpAQCAtNjkzLDcgKzY5OSwxMiBAQCBz
dHJ1Y3QgX2NhaXJvX3N1cmZhY2VfYXR0cmlidXRlcyB7CiAjZGVmaW5lIENBSVJPX0ZUX0ZPTlRf
RkFNSUxZX0RFRkFVTFQgICAgICIiCiAjZGVmaW5lIENBSVJPX1VTRVJfRk9OVF9GQU1JTFlfREVG
QVVMVCAgICAgIkBjYWlybzoiCiAKLSNpZiAgIENBSVJPX0hBU19XSU4zMl9GT05UCisjaWYgICBD
QUlST19IQVNfRFdSSVRFX0ZPTlQKKworI2RlZmluZSBDQUlST19GT05UX0ZBTUlMWV9ERUZBVUxU
IENBSVJPX1dJTjMyX0ZPTlRfRkFNSUxZX0RFRkFVTFQKKyNkZWZpbmUgQ0FJUk9fRk9OVF9GQUNF
X0JBQ0tFTkRfREVGQVVMVCAmX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfYmFja2VuZAorCisjZWxp
ZiBDQUlST19IQVNfV0lOMzJfRk9OVAogCiAjZGVmaW5lIENBSVJPX0ZPTlRfRkFNSUxZX0RFRkFV
TFQgQ0FJUk9fV0lOMzJfRk9OVF9GQU1JTFlfREVGQVVMVAogI2RlZmluZSBDQUlST19GT05UX0ZB
Q0VfQkFDS0VORF9ERUZBVUxUICZfY2Fpcm9fd2luMzJfZm9udF9mYWNlX2JhY2tlbmQKQEAgLTE5
MTAsNyArMTkyMSw3IEBAIGNhaXJvX3ByaXZhdGUgaW50CiBfY2Fpcm9fdWNzNF90b191dGYxNiAo
dWludDMyX3QgICAgdW5pY29kZSwKIAkJICAgICAgdWludDE2X3QgICAqdXRmMTYpOwogCi0jaWYg
Q0FJUk9fSEFTX1dJTjMyX0ZPTlQgfHwgQ0FJUk9fSEFTX1FVQVJUWl9GT05UIHx8IENBSVJPX0hB
U19QREZfT1BFUkFUT1JTCisjaWYgQ0FJUk9fSEFTX1dJTjMyX0ZPTlQgfHwgQ0FJUk9fSEFTX0RX
UklURV9GT05UIHx8IENBSVJPX0hBU19RVUFSVFpfRk9OVCB8fCBDQUlST19IQVNfUERGX09QRVJB
VE9SUwogIyBkZWZpbmUgQ0FJUk9fSEFTX1VURjhfVE9fVVRGMTYgMQogI2VuZGlmCiAjaWYgQ0FJ
Uk9fSEFTX1VURjhfVE9fVVRGMTYKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9jYWlyby1kd3JpdGUt
Zm9udC5jcHAgYi9zcmMvd2luMzIvY2Fpcm8tZHdyaXRlLWZvbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uYjM1NjU5ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj
L3dpbjMyL2NhaXJvLWR3cml0ZS1mb250LmNwcApAQCAtMCwwICsxLDE0ODEgQEAKKy8qIC0qLSBN
b2RlOiBjOyB0YWItd2lkdGg6IDg7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2Rl
OiB0OyAtKi0gKi8KKy8qIENhaXJvIC0gYSB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSB3aXRoIGRp
c3BsYXkgYW5kIHByaW50IG91dHB1dAorICoKKyAqIENvcHlyaWdodCCpIDIwMTAgTW96aWxsYSBG
b3VuZGF0aW9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IGVpdGhlciB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAy
LjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqICh0aGUg
IkxHUEwiKSBvciwgYXQgeW91ciBvcHRpb24sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxs
YQorICogUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTVBMIikuIElmIHlvdSBkbyBu
b3QgYWx0ZXIgdGhpcworICogbm90aWNlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyCisgKiB0aGUgTVBMIG9yIHRoZSBMR1BMLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExHUEwgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnkKKyAqIGluIHRoZSBmaWxlIENPUFlJTkctTEdQTC0yLjE7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNUEwgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnkKKyAqIGluIHRoZSBmaWxlIENPUFlJTkctTVBMLTEuMQorICoKKyAqIFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKKyAq
IFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4KKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8K
KyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
IFdJVEhPVVQgV0FSUkFOVFkKKyAqIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExHUEwgb3IgdGhlIE1QTCBmb3IKKyAqIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucy4KKyAqCisgKiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyB0aGUgY2Fpcm8gZ3JhcGhpY3MgbGlicmFyeS4KKyAqCisgKiBUaGUgSW5pdGlhbCBE
ZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE1vemlsbGEgRm91bmRhdGlvbgor
ICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoJQmFzIFNjaG91dGVuIDxic2Nob3V0ZW5AbW96aWxs
YS5jb20+CisgKi8KKworI2luY2x1ZGUgImNhaXJvaW50LmgiCisKKyNpbmNsdWRlICJjYWlyby13
aW4zMi1wcml2YXRlLmgiCisjaW5jbHVkZSAiY2Fpcm8taW1hZ2Utc3VyZmFjZS1wcml2YXRlLmgi
CisjaW5jbHVkZSAiY2Fpcm8tY2xpcC1wcml2YXRlLmgiCisjaW5jbHVkZSAiY2Fpcm8td2luMzIt
cmVmcHRyLmgiCisjaW5jbHVkZSAiY2Fpcm8tcGF0dGVybi1wcml2YXRlLmgiCisKKyNpbmNsdWRl
ICJjYWlyby1kd3JpdGUtcHJpdmF0ZS5oIgorI2luY2x1ZGUgImNhaXJvLXRydWV0eXBlLXN1YnNl
dC1wcml2YXRlLmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2lmbmRlZiBDTEVBUlRZUEVfUVVB
TElUWQorI2RlZmluZSBDTEVBUlRZUEVfUVVBTElUWSA1CisjZW5kaWYKKwordHlwZWRlZiBIUkVT
VUxUIChXSU5BUEkqRDJEMUNyZWF0ZUZhY3RvcnlGdW5jKSgKKyAgICBEMkQxX0ZBQ1RPUllfVFlQ
RSBmYWN0b3J5VHlwZSwKKyAgICBSRUZJSUQgaWlkLAorICAgIENPTlNUIEQyRDFfRkFDVE9SWV9P
UFRJT05TICpwRmFjdG9yeU9wdGlvbnMsCisgICAgdm9pZCAqKmZhY3RvcnkKKyk7CisKKyNkZWZp
bmUgQ0FJUk9fSU5UX1NUQVRVU19TVUNDRVNTIChjYWlyb19pbnRfc3RhdHVzX3QpQ0FJUk9fU1RB
VFVTX1NVQ0NFU1MKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMKK2NhaXJvX2ludF9zdGF0dXNf
dAorX2R3cml0ZV9kcmF3X2dseXBoc190b19nZGlfc3VyZmFjZV9kMmQoY2Fpcm9fd2luMzJfc3Vy
ZmFjZV90ICpzdXJmYWNlLAorCQkJCSAgICAgICBEV1JJVEVfTUFUUklYICp0cmFuc2Zvcm0sCisJ
CQkJICAgICAgIERXUklURV9HTFlQSF9SVU4gKnJ1biwKKwkJCQkgICAgICAgQ09MT1JSRUYgY29s
b3IsCisJCQkJICAgICAgIGNvbnN0IFJFQ1QgJmFyZWEpOworCitjYWlyb19pbnRfc3RhdHVzX3QK
K19kd3JpdGVfZHJhd19nbHlwaHNfdG9fZ2RpX3N1cmZhY2VfZ2RpKGNhaXJvX3dpbjMyX3N1cmZh
Y2VfdCAqc3VyZmFjZSwKKwkJCQkgICAgICAgRFdSSVRFX01BVFJJWCAqdHJhbnNmb3JtLAorCQkJ
CSAgICAgICBEV1JJVEVfR0xZUEhfUlVOICpydW4sCisJCQkJICAgICAgIENPTE9SUkVGIGNvbG9y
LAorCQkJCSAgICAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsCisJ
CQkJICAgICAgIGNvbnN0IFJFQ1QgJmFyZWEpOworCitjbGFzcyBEMkRGYWN0b3J5Cit7CitwdWJs
aWM6CisgICAgc3RhdGljIElEMkQxRmFjdG9yeSAqSW5zdGFuY2UoKQorICAgIHsKKwlpZiAoIW1G
YWN0b3J5SW5zdGFuY2UpIHsKKwkgICAgRDJEMUNyZWF0ZUZhY3RvcnlGdW5jIGNyZWF0ZUQyREZh
Y3RvcnkgPSAoRDJEMUNyZWF0ZUZhY3RvcnlGdW5jKQorCQlHZXRQcm9jQWRkcmVzcyhMb2FkTGli
cmFyeVcoTCJkMmQxLmRsbCIpLCAiRDJEMUNyZWF0ZUZhY3RvcnkiKTsKKwkgICAgaWYgKGNyZWF0
ZUQyREZhY3RvcnkpIHsKKwkJRDJEMV9GQUNUT1JZX09QVElPTlMgb3B0aW9uczsKKwkJb3B0aW9u
cy5kZWJ1Z0xldmVsID0gRDJEMV9ERUJVR19MRVZFTF9OT05FOworCQljcmVhdGVEMkRGYWN0b3J5
KEQyRDFfRkFDVE9SWV9UWVBFX1NJTkdMRV9USFJFQURFRCwKKwkJCQkgX191dWlkb2YoSUQyRDFG
YWN0b3J5KSwKKwkJCQkgJm9wdGlvbnMsCisJCQkJICh2b2lkKiopJm1GYWN0b3J5SW5zdGFuY2Up
OworCSAgICB9CisJfQorCXJldHVybiBtRmFjdG9yeUluc3RhbmNlOworICAgIH0KKworICAgIHN0
YXRpYyBJRDJEMURDUmVuZGVyVGFyZ2V0ICpSZW5kZXJUYXJnZXQoKQorICAgIHsKKwlpZiAoIW1S
ZW5kZXJUYXJnZXQpIHsKKwkgICAgaWYgKCFJbnN0YW5jZSgpKSB7CisJCXJldHVybiBOVUxMOwor
CSAgICB9CisJICAgIC8vIENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQuCisJICAgIEQyRDFfUkVO
REVSX1RBUkdFVF9QUk9QRVJUSUVTIHByb3BzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGll
cygKKwkJRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKKwkJRDJEMTo6UGl4ZWxGb3Jt
YXQoCisJCSAgICBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwKKwkJICAgIEQyRDFfQUxQSEFf
TU9ERV9QUkVNVUxUSVBMSUVEKSwKKwkJMCwKKwkJMCwKKwkJRDJEMV9SRU5ERVJfVEFSR0VUX1VT
QUdFX05PTkUsCisJCUQyRDFfRkVBVFVSRV9MRVZFTF9ERUZBVUxUCisJCSk7CisKKwkgICAgSW5z
dGFuY2UoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnByb3BzLCAmbVJlbmRlclRhcmdldCk7CisJ
fQorCXJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
SUQyRDFGYWN0b3J5ICptRmFjdG9yeUluc3RhbmNlOworICAgIHN0YXRpYyBJRDJEMURDUmVuZGVy
VGFyZ2V0ICptUmVuZGVyVGFyZ2V0OworfTsKKworSURXcml0ZUZhY3RvcnkgKkRXcml0ZUZhY3Rv
cnk6Om1GYWN0b3J5SW5zdGFuY2UgPSBOVUxMOworSURXcml0ZUZvbnRDb2xsZWN0aW9uICpEV3Jp
dGVGYWN0b3J5OjptU3lzdGVtQ29sbGVjdGlvbiA9IE5VTEw7CitJRFdyaXRlUmVuZGVyaW5nUGFy
YW1zICpEV3JpdGVGYWN0b3J5OjptRGVmYXVsdFJlbmRlcmluZ1BhcmFtcyA9IE5VTEw7CitJRFdy
aXRlUmVuZGVyaW5nUGFyYW1zICpEV3JpdGVGYWN0b3J5OjptQ3VzdG9tQ2xlYXJUeXBlUmVuZGVy
aW5nUGFyYW1zID0gTlVMTDsKK0lEV3JpdGVSZW5kZXJpbmdQYXJhbXMgKkRXcml0ZUZhY3Rvcnk6
Om1Gb3JjZUdESUNsYXNzaWNSZW5kZXJpbmdQYXJhbXMgPSBOVUxMOworRkxPQVQgRFdyaXRlRmFj
dG9yeTo6bUdhbW1hID0gLTEuMDsKK0ZMT0FUIERXcml0ZUZhY3Rvcnk6Om1FbmhhbmNlZENvbnRy
YXN0ID0gLTEuMDsKK0ZMT0FUIERXcml0ZUZhY3Rvcnk6Om1DbGVhclR5cGVMZXZlbCA9IC0xLjA7
CitpbnQgRFdyaXRlRmFjdG9yeTo6bVBpeGVsR2VvbWV0cnkgPSAtMTsKK2ludCBEV3JpdGVGYWN0
b3J5OjptUmVuZGVyaW5nTW9kZSA9IC0xOworCitJRDJEMUZhY3RvcnkgKkQyREZhY3Rvcnk6Om1G
YWN0b3J5SW5zdGFuY2UgPSBOVUxMOworSUQyRDFEQ1JlbmRlclRhcmdldCAqRDJERmFjdG9yeTo6
bVJlbmRlclRhcmdldCA9IE5VTEw7CisKKy8qIEZ1bmN0aW9ucyBjYWlyb19mb250X2ZhY2VfYmFj
a2VuZF90ICovCitzdGF0aWMgY2Fpcm9fc3RhdHVzX3QKK19jYWlyb19kd3JpdGVfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfdG95IChjYWlyb190b3lfZm9udF9mYWNlX3QgICAqdG95X2ZhY2UsCisJCQkJ
CWNhaXJvX2ZvbnRfZmFjZV90ICAgICAgKipmb250X2ZhY2UpOworc3RhdGljIGNhaXJvX2Jvb2xf
dAorX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfZGVzdHJveSAodm9pZCAqZm9udF9mYWNlKTsKKwor
c3RhdGljIGNhaXJvX3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9zY2FsZWRfZm9u
dF9jcmVhdGUgKHZvaWQJCQkqYWJzdHJhY3RfZmFjZSwKKwkJCQkJICAgIGNvbnN0IGNhaXJvX21h
dHJpeF90CSpmb250X21hdHJpeCwKKwkJCQkJICAgIGNvbnN0IGNhaXJvX21hdHJpeF90CSpjdG0s
CisJCQkJCSAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCAqb3B0aW9ucywKKwkJCQkJICAg
IGNhaXJvX3NjYWxlZF9mb250X3QgKipmb250KTsKKworY29uc3QgY2Fpcm9fZm9udF9mYWNlX2Jh
Y2tlbmRfdCBfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9iYWNrZW5kID0geworICAgIENBSVJPX0ZP
TlRfVFlQRV9EV1JJVEUsCisgICAgX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl90
b3ksCisgICAgX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfZGVzdHJveSwKKyAgICBfY2Fpcm9fZHdy
aXRlX2ZvbnRfZmFjZV9zY2FsZWRfZm9udF9jcmVhdGUKK307CisKKy8qIEZ1bmN0aW9ucyBjYWly
b19zY2FsZWRfZm9udF9iYWNrZW5kX3QgKi8KKwordm9pZCBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9m
b250X2Zpbmkodm9pZCAqc2NhbGVkX2ZvbnQpOworCitzdGF0aWMgY2Fpcm9fd2FybiBjYWlyb19p
bnRfc3RhdHVzX3QKK19jYWlyb19kd3JpdGVfc2NhbGVkX2dseXBoX2luaXQodm9pZAkJCSAgICAg
KnNjYWxlZF9mb250LAorCQkJCWNhaXJvX3NjYWxlZF9nbHlwaF90CSAgICAgKnNjYWxlZF9nbHlw
aCwKKwkJCQljYWlyb19zY2FsZWRfZ2x5cGhfaW5mb190ICAgIGluZm8pOworCitjYWlyb193YXJu
IGNhaXJvX2ludF9zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9zY2FsZWRfc2hvd19nbHlwaHModm9p
ZAkJCSpzY2FsZWRfZm9udCwKKwkJCQkgY2Fpcm9fb3BlcmF0b3JfdAkgb3AsCisJCQkJIGNvbnN0
IGNhaXJvX3BhdHRlcm5fdAkqcGF0dGVybiwKKwkJCQkgY2Fpcm9fc3VyZmFjZV90CSpzdXJmYWNl
LAorCQkJCSBpbnQJCQkgc291cmNlX3gsCisJCQkJIGludAkJCSBzb3VyY2VfeSwKKwkJCQkgaW50
CQkJIGRlc3RfeCwKKwkJCQkgaW50CQkJIGRlc3RfeSwKKwkJCQkgdW5zaWduZWQgaW50CQkgd2lk
dGgsCisJCQkJIHVuc2lnbmVkIGludAkJIGhlaWdodCwKKwkJCQkgY2Fpcm9fZ2x5cGhfdAkJKmds
eXBocywKKwkJCQkgaW50CQkJIG51bV9nbHlwaHMsCisJCQkJIGNhaXJvX3JlZ2lvbl90CQkqY2xp
cF9yZWdpb24sCisJCQkJIGludAkJCSpyZW1haW5pbmdfZ2x5cGhzKTsKKworY2Fpcm9faW50X3N0
YXR1c190CitfY2Fpcm9fZHdyaXRlX2xvYWRfdHJ1ZXR5cGVfdGFibGUodm9pZAkJICAgICAgICpz
Y2FsZWRfZm9udCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgICAgICAgICB0YWcsCisJCQkJICBsb25n
ICAgICAgICAgICAgICAgICAgb2Zmc2V0LAorCQkJCSAgdW5zaWduZWQgY2hhciAgICAgICAgKmJ1
ZmZlciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgICAgICAgICpsZW5ndGgpOworCit1bnNpZ25lZCBs
b25nCitfY2Fpcm9fZHdyaXRlX3VjczRfdG9faW5kZXgodm9pZAkJCSAgICAgKnNjYWxlZF9mb250
LAorCQkJICAgIHVpbnQzMl90CQkJdWNzNCk7CisKK2NvbnN0IGNhaXJvX3NjYWxlZF9mb250X2Jh
Y2tlbmRfdCBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2JhY2tlbmQgPSB7CisgICAgQ0FJUk9f
Rk9OVF9UWVBFX0RXUklURSwKKyAgICBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2ZpbmksCisg
ICAgX2NhaXJvX2R3cml0ZV9zY2FsZWRfZ2x5cGhfaW5pdCwKKyAgICBOVUxMLAorICAgIF9jYWly
b19kd3JpdGVfdWNzNF90b19pbmRleCwKKyAgICBfY2Fpcm9fZHdyaXRlX2xvYWRfdHJ1ZXR5cGVf
dGFibGUsCisgICAgTlVMTCwKK307CisKKy8qIEhlbHBlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAq
LworCisvKioKKyAqIEdldCBhIEQyRCBtYXRyaXggZnJvbSBhIGNhaXJvIG1hdHJpeC4gTm90ZSB0
aGF0IEQyRCB1c2VzIHJvdyB2ZWN0b3JzIHdoZXJlIGNhaXJvCisgKiB1c2VzIGNvbHVtbiB2ZWN0
b3JzLiBIZW5jZSB0aGUgdHJhbnNwb3NpdGlvbi4KKyAqCisgKiBccGFyYW0gQ2Fpcm8gbWF0cml4
CisgKiBccmV0dXJuIEQyRCBtYXRyaXgKKyAqLworc3RhdGljIEQyRDE6Ok1hdHJpeDN4MkYKK19j
YWlyb19kMmRfbWF0cml4X2Zyb21fbWF0cml4KGNvbnN0IGNhaXJvX21hdHJpeF90ICptYXRyaXgp
Cit7CisgICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4MkYoKEZMT0FUKW1hdHJpeC0+eHgsCisJCQkg
ICAgKEZMT0FUKW1hdHJpeC0+eXgsCisJCQkgICAgKEZMT0FUKW1hdHJpeC0+eHksCisJCQkgICAg
KEZMT0FUKW1hdHJpeC0+eXksCisJCQkgICAgKEZMT0FUKW1hdHJpeC0+eDAsCisJCQkgICAgKEZM
T0FUKW1hdHJpeC0+eTApOworfQorCisKKy8qKgorICogR2V0IGEgRGlyZWN0V3JpdGUgbWF0cml4
IGZyb20gYSBjYWlybyBtYXRyaXguIE5vdGUgdGhhdCBEaXJlY3RXcml0ZSB1c2VzIHJvdworICog
dmVjdG9ycyB3aGVyZSBjYWlybyB1c2VzIGNvbHVtbiB2ZWN0b3JzLiBIZW5jZSB0aGUgdHJhbnNw
b3NpdGlvbi4KKyAqCisgKiBccGFyYW0gQ2Fpcm8gbWF0cml4CisgKiBccmV0dXJuIERpcmVjdFdy
aXRlIG1hdHJpeAorICovCitEV1JJVEVfTUFUUklYCitfY2Fpcm9fZHdyaXRlX21hdHJpeF9mcm9t
X21hdHJpeChjb25zdCBjYWlyb19tYXRyaXhfdCAqbWF0cml4KQoreworICAgIERXUklURV9NQVRS
SVggZHdtYXQ7CisgICAgZHdtYXQubTExID0gKEZMT0FUKW1hdHJpeC0+eHg7CisgICAgZHdtYXQu
bTEyID0gKEZMT0FUKW1hdHJpeC0+eXg7CisgICAgZHdtYXQubTIxID0gKEZMT0FUKW1hdHJpeC0+
eHk7CisgICAgZHdtYXQubTIyID0gKEZMT0FUKW1hdHJpeC0+eXk7CisgICAgZHdtYXQuZHggPSAo
RkxPQVQpbWF0cml4LT54MDsKKyAgICBkd21hdC5keSA9IChGTE9BVCltYXRyaXgtPnkwOworICAg
IHJldHVybiBkd21hdDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2Fpcm9fZHdyaXRl
X3NjYWxlZF9nbHlwaF9pbml0ICovCitjYWlyb19pbnRfc3RhdHVzX3QgCitfY2Fpcm9fZHdyaXRl
X3NjYWxlZF9mb250X2luaXRfZ2x5cGhfbWV0cmljcyAKKyAgICAoY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X3QgKnNjYWxlZF9mb250LCBjYWlyb19zY2FsZWRfZ2x5cGhfdCAqc2NhbGVkX2dseXBo
KTsKKworY2Fpcm9faW50X3N0YXR1c190IAorX2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9pbml0
X2dseXBoX3N1cmZhY2UKKyAgICAoY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKnNjYWxlZF9m
b250LCBjYWlyb19zY2FsZWRfZ2x5cGhfdCAqc2NhbGVkX2dseXBoKTsKKworY2Fpcm9faW50X3N0
YXR1c190IAorX2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9pbml0X2dseXBoX3BhdGgKKyAgICAo
Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKnNjYWxlZF9mb250LCBjYWlyb19zY2FsZWRfZ2x5
cGhfdCAqc2NhbGVkX2dseXBoKTsKKworLyogaW1wbGVtZW50IHRoZSBmb250IGJhY2tlbmQgaW50
ZXJmYWNlICovCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9mb250X2Zh
Y2VfY3JlYXRlX2Zvcl90b3kgKGNhaXJvX3RveV9mb250X2ZhY2VfdCAgICp0b3lfZmFjZSwKKwkJ
CQkJY2Fpcm9fZm9udF9mYWNlX3QgICAgICAqKmZvbnRfZmFjZSkKK3sKKyAgICBXQ0hBUiAqZmFj
ZV9uYW1lOworICAgIGludCBmYWNlX25hbWVfbGVuOworCisgICAgaWYgKCFEV3JpdGVGYWN0b3J5
OjpJbnN0YW5jZSgpKSB7CisJcmV0dXJuIChjYWlyb19zdGF0dXNfdClDQUlST19JTlRfU1RBVFVT
X1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIGZhY2VfbmFtZV9sZW4gPSBNdWx0aUJ5dGVUb1dp
ZGVDaGFyKENQX1VURjgsIDAsIHRveV9mYWNlLT5mYW1pbHksIC0xLCBOVUxMLCAwKTsKKyAgICBm
YWNlX25hbWUgPSBuZXcgV0NIQVJbZmFjZV9uYW1lX2xlbl07CisgICAgTXVsdGlCeXRlVG9XaWRl
Q2hhcihDUF9VVEY4LCAwLCB0b3lfZmFjZS0+ZmFtaWx5LCAtMSwgZmFjZV9uYW1lLCBmYWNlX25h
bWVfbGVuKTsKKworICAgIElEV3JpdGVGb250RmFtaWx5ICpmYW1pbHkgPSBEV3JpdGVGYWN0b3J5
OjpGaW5kU3lzdGVtRm9udEZhbWlseShmYWNlX25hbWUpOworICAgIGRlbGV0ZSBmYWNlX25hbWU7
CisgICAgaWYgKCFmYW1pbHkpIHsKKwkqZm9udF9mYWNlID0gKGNhaXJvX2ZvbnRfZmFjZV90Kikm
X2NhaXJvX2ZvbnRfZmFjZV9uaWw7CisJcmV0dXJuIENBSVJPX1NUQVRVU19GT05UX1RZUEVfTUlT
TUFUQ0g7CisgICAgfQorCisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUIHdlaWdodDsKKyAgICBzd2l0
Y2ggKHRveV9mYWNlLT53ZWlnaHQpIHsKKyAgICBjYXNlIENBSVJPX0ZPTlRfV0VJR0hUX0JPTEQ6
CisJd2VpZ2h0ID0gRFdSSVRFX0ZPTlRfV0VJR0hUX0JPTEQ7CisJYnJlYWs7CisgICAgY2FzZSBD
QUlST19GT05UX1dFSUdIVF9OT1JNQUw6CisgICAgZGVmYXVsdDoKKwl3ZWlnaHQgPSBEV1JJVEVf
Rk9OVF9XRUlHSFRfTk9STUFMOworCWJyZWFrOworICAgIH0KKworICAgIERXUklURV9GT05UX1NU
WUxFIHN0eWxlOworICAgIHN3aXRjaCAodG95X2ZhY2UtPnNsYW50KSB7CisgICAgY2FzZSBDQUlS
T19GT05UX1NMQU5UX0lUQUxJQzoKKwlzdHlsZSA9IERXUklURV9GT05UX1NUWUxFX0lUQUxJQzsK
KwlicmVhazsKKyAgICBjYXNlIENBSVJPX0ZPTlRfU0xBTlRfT0JMSVFVRToKKwlzdHlsZSA9IERX
UklURV9GT05UX1NUWUxFX09CTElRVUU7CisJYnJlYWs7CisgICAgY2FzZSBDQUlST19GT05UX1NM
QU5UX05PUk1BTDoKKyAgICBkZWZhdWx0OgorCXN0eWxlID0gRFdSSVRFX0ZPTlRfU1RZTEVfTk9S
TUFMOworCWJyZWFrOworICAgIH0KKworICAgIElEV3JpdGVGb250KiBkd2ZvbnQ7CisgICAgSURX
cml0ZUZvbnRGYWNlKiBkd2ZhY2U7CisgICAgSFJFU1VMVCBociA9IGZhbWlseS0+R2V0Rmlyc3RN
YXRjaGluZ0ZvbnQod2VpZ2h0LCBEV1JJVEVfRk9OVF9TVFJFVENIX05PUk1BTCwgc3R5bGUsICZk
d2ZvbnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorCXJldHVybiBDQUlST19TVEFUVVNfRk9OVF9U
WVBFX01JU01BVENIOworCisgICAgaHIgPSBkd2ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZkd2ZhY2Up
OworICAgIGlmIChGQUlMRUQoaHIpKQorCXJldHVybiBDQUlST19TVEFUVVNfRk9OVF9UWVBFX01J
U01BVENIOworCisgICAgLy8gQ2Fubm90IHVzZSBDKysgc3R5bGUgbmV3IHNpbmNlIGNhaXJvIGRl
YWxsb2NhdGVzIHRoaXMuCisgICAgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90KiBmYWNlID0gKGNh
aXJvX2R3cml0ZV9mb250X2ZhY2VfdCopIG1hbGxvYyhzaXplb2YoY2Fpcm9fZHdyaXRlX2ZvbnRf
ZmFjZV90KSk7CisgICAgKmZvbnRfZmFjZSA9IChjYWlyb19mb250X2ZhY2VfdCopZmFjZTsKKyAg
ICBmYWNlLT5mb250ID0gZHdmb250OworICAgIGZhY2UtPmR3cml0ZWZhY2UgPSBkd2ZhY2U7Cisg
ICAgX2NhaXJvX2ZvbnRfZmFjZV9pbml0ICgmKCooX2NhaXJvX2R3cml0ZV9mb250X2ZhY2UqKilm
b250X2ZhY2UpLT5iYXNlLCAmX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfYmFja2VuZCk7CisgICAg
cmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgY2Fpcm9fYm9vbF90Citf
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9kZXN0cm95ICh2b2lkICpmb250X2ZhY2UpCit7CisgICAg
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90ICpkd3JpdGVfZm9udF9mYWNlID0gc3RhdGljX2Nhc3Q8
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90Kj4oZm9udF9mYWNlKTsKKyAgICBpZiAoZHdyaXRlX2Zv
bnRfZmFjZS0+ZHdyaXRlZmFjZSkKKwlkd3JpdGVfZm9udF9mYWNlLT5kd3JpdGVmYWNlLT5SZWxl
YXNlKCk7CisgICAgaWYgKGR3cml0ZV9mb250X2ZhY2UtPmZvbnQpCisJZHdyaXRlX2ZvbnRfZmFj
ZS0+Zm9udC0+UmVsZWFzZSgpOworICAgIHJldHVybiBUUlVFOworfQorCisKK3N0YXRpYyBpbmxp
bmUgdW5zaWduZWQgc2hvcnQKK3JlYWRfc2hvcnQoY29uc3QgY2hhciAqYnVmKQoreworICAgIHJl
dHVybiBiZTE2X3RvX2NwdSgqKHVuc2lnbmVkIHNob3J0KilidWYpOworfQorCit2b2lkCitfY2Fp
cm9fZHdyaXRlX2dseXBoX3J1bl9mcm9tX2dseXBocyhjYWlyb19nbHlwaF90ICpnbHlwaHMsCisJ
CQkJICAgIGludCBudW1fZ2x5cGhzLAorCQkJCSAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRf
dCAqc2NhbGVkX2ZvbnQsCisJCQkJICAgIEF1dG9EV3JpdGVHbHlwaFJ1biAqcnVuLAorCQkJCSAg
ICBjYWlyb19ib29sX3QgKnRyYW5zZm9ybWVkKQoreworICAgIHJ1bi0+YWxsb2NhdGUobnVtX2ds
eXBocyk7CisKKyAgICBVSU5UMTYgKmluZGljZXMgPSBjb25zdF9jYXN0PFVJTlQxNio+KHJ1bi0+
Z2x5cGhJbmRpY2VzKTsKKyAgICBGTE9BVCAqYWR2YW5jZXMgPSBjb25zdF9jYXN0PEZMT0FUKj4o
cnVuLT5nbHlwaEFkdmFuY2VzKTsKKyAgICBEV1JJVEVfR0xZUEhfT0ZGU0VUICpvZmZzZXRzID0g
Y29uc3RfY2FzdDxEV1JJVEVfR0xZUEhfT0ZGU0VUKj4ocnVuLT5nbHlwaE9mZnNldHMpOworCisg
ICAgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90ICpkd3JpdGVmZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90Kj4oc2NhbGVkX2ZvbnQtPmJhc2UuZm9udF9mYWNlKTsK
KworICAgIHJ1bi0+YmlkaUxldmVsID0gMDsKKyAgICBydW4tPmZvbnRGYWNlID0gZHdyaXRlZmYt
PmR3cml0ZWZhY2U7CisgICAgcnVuLT5nbHlwaENvdW50ID0gbnVtX2dseXBoczsKKyAgICBydW4t
PmlzU2lkZXdheXMgPSBGQUxTRTsKKworICAgIGlmIChzY2FsZWRfZm9udC0+bWF0Lnh5ID09IDAg
JiYgc2NhbGVkX2ZvbnQtPm1hdC55eCA9PSAwICYmCisJc2NhbGVkX2ZvbnQtPm1hdC54eCA9PSBz
Y2FsZWRfZm9udC0+YmFzZS5mb250X21hdHJpeC54eCAmJiAKKwlzY2FsZWRfZm9udC0+bWF0Lnl5
ID09IHNjYWxlZF9mb250LT5iYXNlLmZvbnRfbWF0cml4Lnl5KSB7CisJLy8gRmFzdCByb3V0ZSwg
ZG9uJ3QgYWN0dWFsbHkgdXNlIGEgdHJhbnNmb3JtIGJ1dCBqdXN0CisJLy8gc2V0IHRoZSBjb3Jy
ZWN0IGZvbnQgc2l6ZS4KKwkqdHJhbnNmb3JtZWQgPSAwOworCisJcnVuLT5mb250RW1TaXplID0g
KEZMT0FUKXNjYWxlZF9mb250LT5iYXNlLmZvbnRfbWF0cml4Lnl5OworCisJZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspIHsKKwkgICAgaW5kaWNlc1tpXSA9IChXT1JEKSBnbHlw
aHNbaV0uaW5kZXg7CisKKwkgICAgb2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IC0oRkxPQVQp
KGdseXBoc1tpXS55KTsKKwkgICAgb2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gKEZMT0FUKShn
bHlwaHNbaV0ueCk7CisJICAgIGFkdmFuY2VzW2ldID0gMC4wOworCX0KKyAgICB9IGVsc2Ugewor
CSp0cmFuc2Zvcm1lZCA9IDE7CisgICAgICAgIC8vIFRyYW5zZm9ybWluZyBwb3NpdGlvbnMgYnkg
dGhlIGludmVyc2UgbWF0cml4LCB0aGVuIGJ5IHRoZSBvcmlnaW5hbAorICAgICAgICAvLyBtYXRy
aXggbGF0ZXIgbWF5IGludHJvZHVjZSBzbWFsbCBlcnJvcnMsIGVzcGVjaWFsbHkgYmVjYXVzZSB0
aGUKKyAgICAgICAgLy8gRDJEIG1hdHJpeCBpcyBzaW5nbGUtcHJlY2lzaW9uIHdoZXJlYXMgdGhl
IGNhaXJvIG9uZSBpcyBkb3VibGUuCisgICAgICAgIC8vIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4g
Z2x5cGggcG9zaXRpb25zIHdlcmUgb3JpZ2luYWxseSBhdCBleGFjdGx5CisgICAgICAgIC8vIGhh
bGYtcGl4ZWwgbG9jYXRpb25zLCB3aGljaCBldmVudHVhbGx5IHJvdW5kIHRvIHdob2xlIHBpeGVs
cyBmb3IKKyAgICAgICAgLy8gR0RJIHJlbmRlcmluZyAtIHRoZSBlcnJvcnMgaW50cm9kdWNlZCBo
ZXJlIGNhdXNlIHRoZW0gdG8gcm91bmQgaW4KKyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBkaXJl
Y3Rpb25zLCBpbnN0ZWFkIG9mIGFsbCByb3VuZGluZyBpbiBhIGNvbnNpc3RlbnQKKyAgICAgICAg
Ly8gd2F5LCBsZWFkaW5nIHRvIHBvb3IgZ2x5cGggc3BhY2luZyAoYnVnIDY3NTM4MykuCisgICAg
ICAgIC8vIFRvIG1pdGlnYXRlIHRoaXMsIG51ZGdlIHRoZSBwb3NpdGlvbnMgYnkgYSB0aW55IGFt
b3VudCB0byB0cnkgYW5kCisgICAgICAgIC8vIGVuc3VyZSB0aGF0IGFmdGVyIHRoZSB0d28gdHJh
bnNmb3JtcywgdGhleSdsbCBzdGlsbCByb3VuZCBpbiBhCisgICAgICAgIC8vIGNvbnNpc3RlbnQg
ZGlyZWN0aW9uLgorICAgICAgICBjb25zdCBkb3VibGUgRVBTSUxPTiA9IDAuMDAwMTsKKwlmb3Ig
KGludCBpID0gMDsgaSA8IG51bV9nbHlwaHM7IGkrKykgeworCSAgICBpbmRpY2VzW2ldID0gKFdP
UkQpIGdseXBoc1tpXS5pbmRleDsKKwkgICAgZG91YmxlIHggPSBnbHlwaHNbaV0ueCArIEVQU0lM
T047CisJICAgIGRvdWJsZSB5ID0gZ2x5cGhzW2ldLnk7CisJICAgIGNhaXJvX21hdHJpeF90cmFu
c2Zvcm1fcG9pbnQoJnNjYWxlZF9mb250LT5tYXRfaW52ZXJzZSwgJngsICZ5KTsKKwkgICAgLy8g
U2luY2Ugd2Ugd2lsbCBtdWx0aXBseSBieSBvdXIgY3RtIG1hdHJpeCBsYXRlciBmb3Igcm90YXRp
b24gZWZmZWN0cworCSAgICAvLyBhbmQgc3VjaCwgYWRqdXN0IHBvc2l0aW9ucyBieSB0aGUgaW52
ZXJzZSBtYXRyaXggbm93LiBZLWF4aXMgaXMKKwkgICAgLy8gaW52ZXJ0ZWQhIFRoZXJlZm9yIHRo
ZSBvZmZzZXQgaXMgLXkuCisJICAgIG9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSAtKEZMT0FU
KXk7CisJICAgIG9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IChGTE9BVCl4OworCSAgICBhZHZh
bmNlc1tpXSA9IDAuMDsKKwl9CisJLy8gVGhlIGZvbnQgbWF0cml4IHRha2VzIGNhcmUgb2YgdGhl
IHNjYWxpbmcgaWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSwKKwkvLyBlbVNpemUgc2hvdWxkIGJlIDEu
CisJcnVuLT5mb250RW1TaXplID0gMS4wZjsKKyAgICB9Cit9CisKKyNkZWZpbmUgR0FTUF9UQUcg
MHg3MDczNjE2NworI2RlZmluZSBHQVNQX0RPR1JBWSAweDIKKworc3RhdGljIGNhaXJvX2Jvb2xf
dAorZG9fZ3JheXNjYWxlKElEV3JpdGVGb250RmFjZSAqZHdmYWNlLCB1bnNpZ25lZCBpbnQgcHBl
bSkKK3sKKyAgICB2b2lkICp0YWJsZUNvbnRleHQ7CisgICAgY2hhciAqdGFibGVEYXRhOworICAg
IFVJTlQzMiB0YWJsZVNpemU7CisgICAgQk9PTCBleGlzdHM7CisgICAgZHdmYWNlLT5UcnlHZXRG
b250VGFibGUoR0FTUF9UQUcsIChjb25zdCB2b2lkKiopJnRhYmxlRGF0YSwgJnRhYmxlU2l6ZSwg
JnRhYmxlQ29udGV4dCwgJmV4aXN0cyk7CisKKyAgICBpZiAoZXhpc3RzKSB7CisJaWYgKHRhYmxl
U2l6ZSA8IDQpIHsKKwkgICAgZHdmYWNlLT5SZWxlYXNlRm9udFRhYmxlKHRhYmxlQ29udGV4dCk7
CisJICAgIHJldHVybiB0cnVlOworCX0KKwlzdHJ1Y3QgZ2FzcFJhbmdlIHsKKwkgICAgdW5zaWdu
ZWQgc2hvcnQgbWF4UFBFTTsgLy8gU3RvcmVkIGJpZy1lbmRpYW4KKwkgICAgdW5zaWduZWQgc2hv
cnQgYmVoYXZpb3I7IC8vIFN0b3JlZCBiaWctZW5kaWFuCisJfTsKKwl1bnNpZ25lZCBzaG9ydCBu
dW1SYW5nZXMgPSByZWFkX3Nob3J0KHRhYmxlRGF0YSArIDIpOworCWlmICh0YWJsZVNpemUgPCAo
VUlOVCk0ICsgbnVtUmFuZ2VzICogNCkgeworCSAgICBkd2ZhY2UtPlJlbGVhc2VGb250VGFibGUo
dGFibGVDb250ZXh0KTsKKwkgICAgcmV0dXJuIHRydWU7CisJfQorCWdhc3BSYW5nZSAqcmFuZ2Vz
ID0gKGdhc3BSYW5nZSAqKSh0YWJsZURhdGEgKyA0KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG51
bVJhbmdlczsgaSsrKSB7CisJICAgIGlmIChiZTE2X3RvX2NwdShyYW5nZXNbaV0ubWF4UFBFTSkg
PiBwcGVtKSB7CisJCWlmICghKGJlMTZfdG9fY3B1KHJhbmdlc1tpXS5iZWhhdmlvcikgJiBHQVNQ
X0RPR1JBWSkpIHsKKwkJICAgIGR3ZmFjZS0+UmVsZWFzZUZvbnRUYWJsZSh0YWJsZUNvbnRleHQp
OworCQkgICAgcmV0dXJuIGZhbHNlOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorCWR3ZmFj
ZS0+UmVsZWFzZUZvbnRUYWJsZSh0YWJsZUNvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIGNhaXJvX3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9z
Y2FsZWRfZm9udF9jcmVhdGUgKHZvaWQJCQkqYWJzdHJhY3RfZmFjZSwKKwkJCQkJICAgIGNvbnN0
IGNhaXJvX21hdHJpeF90CSpmb250X21hdHJpeCwKKwkJCQkJICAgIGNvbnN0IGNhaXJvX21hdHJp
eF90CSpjdG0sCisJCQkJCSAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCAgKm9wdGlvbnMs
CisJCQkJCSAgICBjYWlyb19zY2FsZWRfZm9udF90ICoqZm9udCkKK3sKKyAgICBjYWlyb19kd3Jp
dGVfZm9udF9mYWNlX3QgKmZvbnRfZmFjZSA9IHN0YXRpY19jYXN0PGNhaXJvX2R3cml0ZV9mb250
X2ZhY2VfdCo+KGFic3RyYWN0X2ZhY2UpOworCisgICAgLy8gTXVzdCBkbyBtYWxsb2MgYW5kIG5v
dCBDKysgbmV3LCBzaW5jZSBDYWlybyBmcmVlcyB0aGlzLgorICAgIGNhaXJvX2R3cml0ZV9zY2Fs
ZWRfZm9udF90ICpkd3JpdGVGb250ID0gKGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90KiltYWxs
b2Moc2l6ZW9mKGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90KSk7CisgICAgKmZvbnQgPSByZWlu
dGVycHJldF9jYXN0PGNhaXJvX3NjYWxlZF9mb250X3QqPihkd3JpdGVGb250KTsKKyAgICBfY2Fp
cm9fc2NhbGVkX2ZvbnRfaW5pdCgmZHdyaXRlRm9udC0+YmFzZSwgJmZvbnRfZmFjZS0+YmFzZSwg
Zm9udF9tYXRyaXgsIGN0bSwgb3B0aW9ucywgJl9jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfYmFj
a2VuZCk7CisKKyAgICBjYWlyb19mb250X2V4dGVudHNfdCBleHRlbnRzOworCisgICAgRFdSSVRF
X0ZPTlRfTUVUUklDUyBtZXRyaWNzOworICAgIGZvbnRfZmFjZS0+ZHdyaXRlZmFjZS0+R2V0TWV0
cmljcygmbWV0cmljcyk7CisKKyAgICBleHRlbnRzLmFzY2VudCA9IChGTE9BVCltZXRyaWNzLmFz
Y2VudCAvIG1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbTsKKyAgICBleHRlbnRzLmRlc2NlbnQgPSAo
RkxPQVQpbWV0cmljcy5kZXNjZW50IC8gbWV0cmljcy5kZXNpZ25Vbml0c1BlckVtOworICAgIGV4
dGVudHMuaGVpZ2h0ID0gKEZMT0FUKShtZXRyaWNzLmFzY2VudCArIG1ldHJpY3MuZGVzY2VudCAr
IG1ldHJpY3MubGluZUdhcCkgLyBtZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07CisgICAgZXh0ZW50
cy5tYXhfeF9hZHZhbmNlID0gMTQuMDsKKyAgICBleHRlbnRzLm1heF95X2FkdmFuY2UgPSAwLjA7
CisKKyAgICBkd3JpdGVGb250LT5tYXQgPSBkd3JpdGVGb250LT5iYXNlLmN0bTsKKyAgICBjYWly
b19tYXRyaXhfbXVsdGlwbHkoJmR3cml0ZUZvbnQtPm1hdCwgJmR3cml0ZUZvbnQtPm1hdCwgZm9u
dF9tYXRyaXgpOworICAgIGR3cml0ZUZvbnQtPm1hdF9pbnZlcnNlID0gZHdyaXRlRm9udC0+bWF0
OworICAgIGNhaXJvX21hdHJpeF9pbnZlcnQgKCZkd3JpdGVGb250LT5tYXRfaW52ZXJzZSk7CisK
KyAgICBjYWlyb19hbnRpYWxpYXNfdCBkZWZhdWx0X3F1YWxpdHkgPSBDQUlST19BTlRJQUxJQVNf
U1VCUElYRUw7CisKKyAgICBkd3JpdGVGb250LT5tZWFzdXJpbmdfbW9kZSA9IERXUklURV9NRUFT
VVJJTkdfTU9ERV9OQVRVUkFMOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGRldGVjdHMg
dGhlIHN5c3RlbSBxdWFsaXR5IGF0IHNjYWxlZF9mb250IGNyZWF0aW9uIHRpbWUsCisgICAgLy8g
dGhpcyBtZWFucyB0aGF0IGlmIGNsZWFydHlwZSBzZXR0aW5ncyBhcmUgY2hhbmdlZCBidXQgdGhl
IHNjYWxlZF9mb250cworICAgIC8vIGFyZSByZS11c2VkLCB0aGV5IG1pZ2h0IG5vdCBhZGhlcmUg
dG8gdGhlIG5ldyBzeXN0ZW0gc2V0dGluZyB1bnRpbCByZS0KKyAgICAvLyBjcmVhdGlvbi4KKyAg
ICBzd2l0Y2ggKF9jYWlyb193aW4zMl9nZXRfc3lzdGVtX3RleHRfcXVhbGl0eSgpKSB7CisJY2Fz
ZSBDTEVBUlRZUEVfUVVBTElUWToKKwkgICAgZGVmYXVsdF9xdWFsaXR5ID0gQ0FJUk9fQU5USUFM
SUFTX1NVQlBJWEVMOworCSAgICBicmVhazsKKwljYXNlIEFOVElBTElBU0VEX1FVQUxJVFk6CisJ
ICAgIGRlZmF1bHRfcXVhbGl0eSA9IENBSVJPX0FOVElBTElBU19HUkFZOworCSAgICBkd3JpdGVG
b250LT5tZWFzdXJpbmdfbW9kZSA9IERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfQ0xBU1NJQzsK
KwkgICAgYnJlYWs7CisJY2FzZSBERUZBVUxUX1FVQUxJVFk6CisJICAgIC8vIF9jYWlyb193aW4z
Ml9nZXRfc3lzdGVtX3RleHRfcXVhbGl0eSgpIHNlZW1zIHRvIHRoaW5rIGFsaWFzZWQgaXMgZGVm
YXVsdCEKKwkgICAgZGVmYXVsdF9xdWFsaXR5ID0gQ0FJUk9fQU5USUFMSUFTX05PTkU7CisJICAg
IGR3cml0ZUZvbnQtPm1lYXN1cmluZ19tb2RlID0gRFdSSVRFX01FQVNVUklOR19NT0RFX0dESV9D
TEFTU0lDOworCSAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoZGVmYXVsdF9xdWFsaXR5ID09
IENBSVJPX0FOVElBTElBU19HUkFZKSB7CisJaWYgKCFkb19ncmF5c2NhbGUoZm9udF9mYWNlLT5k
d3JpdGVmYWNlLCAodW5zaWduZWQgaW50KV9jYWlyb19yb3VuZChmb250X21hdHJpeC0+eXkpKSkg
eworCSAgICBkZWZhdWx0X3F1YWxpdHkgPSBDQUlST19BTlRJQUxJQVNfTk9ORTsKKwl9CisgICAg
fQorCisgICAgaWYgKG9wdGlvbnMtPmFudGlhbGlhcyA9PSBDQUlST19BTlRJQUxJQVNfREVGQVVM
VCkgeworCWR3cml0ZUZvbnQtPmFudGlhbGlhc19tb2RlID0gZGVmYXVsdF9xdWFsaXR5OworICAg
IH0gZWxzZSB7CisJZHdyaXRlRm9udC0+YW50aWFsaWFzX21vZGUgPSBvcHRpb25zLT5hbnRpYWxp
YXM7CisgICAgfQorCisgICAgZHdyaXRlRm9udC0+bWFudWFsX3Nob3dfZ2x5cGhzX2FsbG93ZWQg
PSBUUlVFOworICAgIGR3cml0ZUZvbnQtPnJlbmRlcmluZ19tb2RlID0KKyAgICAgICAgZGVmYXVs
dF9xdWFsaXR5ID09IENBSVJPX0FOVElBTElBU19TVUJQSVhFTCA/CisgICAgICAgICAgICBjYWly
b19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6VEVYVF9SRU5ERVJJTkdfTk9STUFMIDogY2Fpcm9fZHdy
aXRlX3NjYWxlZF9mb250X3Q6OlRFWFRfUkVOREVSSU5HX05PX0NMRUFSVFlQRTsKKworICAgIHJl
dHVybiBfY2Fpcm9fc2NhbGVkX2ZvbnRfc2V0X21ldHJpY3MgKCpmb250LCAmZXh0ZW50cyk7Cit9
CisKKy8qIEltcGxlbWVudGF0aW9uIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9iYWNrZW5kX3Qg
Ki8KK3ZvaWQKK19jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfZmluaSh2b2lkICpzY2FsZWRfZm9u
dCkKK3sKK30KKworc3RhdGljIGNhaXJvX2ludF9zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9zY2Fs
ZWRfZ2x5cGhfaW5pdCh2b2lkCQkJICAgICAqc2NhbGVkX2ZvbnQsCisJCQkJY2Fpcm9fc2NhbGVk
X2dseXBoX3QJICAgICAqc2NhbGVkX2dseXBoLAorCQkJCWNhaXJvX3NjYWxlZF9nbHlwaF9pbmZv
X3QgICAgaW5mbykKK3sKKyAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2R3
cml0ZV9mb250ID0gc3RhdGljX2Nhc3Q8Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QqPihzY2Fs
ZWRfZm9udCk7CisgICAgY2Fpcm9faW50X3N0YXR1c190IHN0YXR1czsKKworICAgIGlmICgoaW5m
byAmIENBSVJPX1NDQUxFRF9HTFlQSF9JTkZPX01FVFJJQ1MpICE9IDApIHsKKwlzdGF0dXMgPSBf
Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2luaXRfZ2x5cGhfbWV0cmljcyAoc2NhbGVkX2R3cml0
ZV9mb250LCBzY2FsZWRfZ2x5cGgpOworCWlmIChzdGF0dXMpCisJICAgIHJldHVybiBzdGF0dXM7
CisgICAgfQorCisgICAgaWYgKGluZm8gJiBDQUlST19TQ0FMRURfR0xZUEhfSU5GT19TVVJGQUNF
KSB7CisJc3RhdHVzID0gX2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9pbml0X2dseXBoX3N1cmZh
Y2UgKHNjYWxlZF9kd3JpdGVfZm9udCwgc2NhbGVkX2dseXBoKTsKKwlpZiAoc3RhdHVzKQorCSAg
ICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmICgoaW5mbyAmIENBSVJPX1NDQUxFRF9H
TFlQSF9JTkZPX1BBVEgpICE9IDApIHsKKwlzdGF0dXMgPSBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9m
b250X2luaXRfZ2x5cGhfcGF0aCAoc2NhbGVkX2R3cml0ZV9mb250LCBzY2FsZWRfZ2x5cGgpOwor
CWlmIChzdGF0dXMpCisJICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIENB
SVJPX0lOVF9TVEFUVVNfU1VDQ0VTUzsKK30KKwordW5zaWduZWQgbG9uZworX2NhaXJvX2R3cml0
ZV91Y3M0X3RvX2luZGV4KHZvaWQJCQkgICAgICpzY2FsZWRfZm9udCwKKwkJCSAgICB1aW50MzJf
dAkJICAgICAgdWNzNCkKK3sKKyAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqZHdyaXRl
c2YgPSBzdGF0aWNfY2FzdDxjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCo+KHNjYWxlZF9mb250
KTsKKyAgICBjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QgKmZhY2UgPSByZWludGVycHJldF9jYXN0
PGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfdCo+KGR3cml0ZXNmLT5iYXNlLmZvbnRfZmFjZSk7CisK
KyAgICBVSU5UMTYgaW5kZXg7CisgICAgZmFjZS0+ZHdyaXRlZmFjZS0+R2V0R2x5cGhJbmRpY2Vz
QSgmdWNzNCwgMSwgJmluZGV4KTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKKy8qIGNhaXJvX2R3
cml0ZV9zY2FsZWRfZ2x5cGhfaW5pdCBoZWxwZXIgZnVuY3Rpb24gYm9kaWVzICovCitjYWlyb19p
bnRfc3RhdHVzX3QgCitfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2luaXRfZ2x5cGhfbWV0cmlj
cyhjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsIAorCQkJCQkgICAgIGNh
aXJvX3NjYWxlZF9nbHlwaF90ICpzY2FsZWRfZ2x5cGgpCit7CisgICAgVUlOVDE2IGNoYXJJbmRl
eCA9IChVSU5UMTYpX2NhaXJvX3NjYWxlZF9nbHlwaF9pbmRleCAoc2NhbGVkX2dseXBoKTsKKyAg
ICBjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QgKmZvbnRfZmFjZSA9IChjYWlyb19kd3JpdGVfZm9u
dF9mYWNlX3QqKXNjYWxlZF9mb250LT5iYXNlLmZvbnRfZmFjZTsKKyAgICBjYWlyb190ZXh0X2V4
dGVudHNfdCBleHRlbnRzOworCisgICAgRFdSSVRFX0dMWVBIX01FVFJJQ1MgbWV0cmljczsKKyAg
ICBEV1JJVEVfRk9OVF9NRVRSSUNTIGZvbnRNZXRyaWNzOworICAgIGZvbnRfZmFjZS0+ZHdyaXRl
ZmFjZS0+R2V0TWV0cmljcygmZm9udE1ldHJpY3MpOworICAgIEhSRVNVTFQgaHIgPSBmb250X2Zh
Y2UtPmR3cml0ZWZhY2UtPkdldERlc2lnbkdseXBoTWV0cmljcygmY2hhckluZGV4LCAxLCAmbWV0
cmljcyk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKwlyZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19V
TlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBUcmVhdCBzd2FwX3h5LgorICAgIGV4
dGVudHMud2lkdGggPSAoRkxPQVQpKG1ldHJpY3MuYWR2YW5jZVdpZHRoIC0gbWV0cmljcy5sZWZ0
U2lkZUJlYXJpbmcgLSBtZXRyaWNzLnJpZ2h0U2lkZUJlYXJpbmcpIC8KKwlmb250TWV0cmljcy5k
ZXNpZ25Vbml0c1BlckVtOworICAgIGV4dGVudHMuaGVpZ2h0ID0gKEZMT0FUKShtZXRyaWNzLmFk
dmFuY2VIZWlnaHQgLSBtZXRyaWNzLnRvcFNpZGVCZWFyaW5nIC0gbWV0cmljcy5ib3R0b21TaWRl
QmVhcmluZykgLworCWZvbnRNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07CisgICAgZXh0ZW50cy54
X2FkdmFuY2UgPSAoRkxPQVQpbWV0cmljcy5hZHZhbmNlV2lkdGggLyBmb250TWV0cmljcy5kZXNp
Z25Vbml0c1BlckVtOworICAgIGV4dGVudHMueF9iZWFyaW5nID0gKEZMT0FUKW1ldHJpY3MubGVm
dFNpZGVCZWFyaW5nIC8gZm9udE1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbTsKKyAgICBleHRlbnRz
LnlfYWR2YW5jZSA9IDAuMDsKKyAgICBleHRlbnRzLnlfYmVhcmluZyA9IChGTE9BVCkobWV0cmlj
cy50b3BTaWRlQmVhcmluZyAtIG1ldHJpY3MudmVydGljYWxPcmlnaW5ZKSAvCisJZm9udE1ldHJp
Y3MuZGVzaWduVW5pdHNQZXJFbTsKKworICAgIC8vIFdlIHBhZCB0aGUgZXh0ZW50cyBoZXJlIGJl
Y2F1c2UgR2V0RGVzaWduR2x5cGhNZXRyaWNzIHJldHVybnMgImlkZWFsIiBtZXRyaWNzCisgICAg
Ly8gZm9yIHRoZSBnbHlwaCBvdXRsaW5lLCB3aXRob3V0IGFjY291bnRpbmcgZm9yIGhpbnRpbmcv
Z3JpZGZpdHRpbmcvYW50aWFsaWFzaW5nLAorICAgIC8vIGFuZCB0aGVyZWZvcmUgaXQgZG9lcyBu
b3QgYWx3YXlzIGNvdmVyIGFsbCBwaXhlbHMgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIHRvdWNoZWQu
CisgICAgaWYgKHNjYWxlZF9mb250LT5iYXNlLm9wdGlvbnMuYW50aWFsaWFzICE9IENBSVJPX0FO
VElBTElBU19OT05FICYmCisJZXh0ZW50cy53aWR0aCA+IDAgJiYgZXh0ZW50cy5oZWlnaHQgPiAw
KSB7CisJZXh0ZW50cy53aWR0aCArPSBzY2FsZWRfZm9udC0+bWF0X2ludmVyc2UueHggKiAyOwor
CWV4dGVudHMueF9iZWFyaW5nIC09IHNjYWxlZF9mb250LT5tYXRfaW52ZXJzZS54eDsKKyAgICB9
CisKKyAgICBfY2Fpcm9fc2NhbGVkX2dseXBoX3NldF9tZXRyaWNzIChzY2FsZWRfZ2x5cGgsCisJ
CQkJICAgICAmc2NhbGVkX2ZvbnQtPmJhc2UsCisJCQkJICAgICAmZXh0ZW50cyk7CisgICAgcmV0
dXJuIENBSVJPX0lOVF9TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBTdGFjay1iYXNlZCBo
ZWxwZXIgaW1wbGVtZW50aW5nIElEV3JpdGVHZW9tZXRyeVNpbmsuCisgKiBVc2VkIHRvIGRldGVy
bWluZSB0aGUgcGF0aCBvZiB0aGUgZ2x5cGhzLgorICovCisKK2NsYXNzIEdlb21ldHJ5UmVjb3Jk
ZXIgOiBwdWJsaWMgSURXcml0ZUdlb21ldHJ5U2luaworeworcHVibGljOgorICAgIEdlb21ldHJ5
UmVjb3JkZXIoY2Fpcm9fcGF0aF9maXhlZF90ICphQ2Fpcm9QYXRoKSAKKwk6IG1DYWlyb1BhdGgo
YUNhaXJvUGF0aCkge30KKworICAgIC8vIElVbmtub3duIGludGVyZmFjZQorICAgIElGQUNFTUVU
SE9EKFF1ZXJ5SW50ZXJmYWNlKShJSUQgY29uc3QmIGlpZCwgT1VUIHZvaWQqKiBwcE9iamVjdCkK
KyAgICB7CisJaWYgKGlpZCAhPSBfX3V1aWRvZihJRFdyaXRlR2VvbWV0cnlTaW5rKSkKKwkgICAg
cmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisKKwkqcHBPYmplY3QgPSBzdGF0aWNfY2FzdDxJRFdyaXRl
R2VvbWV0cnlTaW5rKj4odGhpcyk7CisKKwlyZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBJRkFD
RU1FVEhPRF8oVUxPTkcsIEFkZFJlZikoKQorICAgIHsKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAg
ICBJRkFDRU1FVEhPRF8oVUxPTkcsIFJlbGVhc2UpKCkKKyAgICB7CisJcmV0dXJuIDE7CisgICAg
fQorCisgICAgSUZBQ0VNRVRIT0RJTVBfKHZvaWQpIFNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RF
IGZpbGxNb2RlKQorICAgIHsKKwlyZXR1cm47CisgICAgfQorCisgICAgU1RETUVUSE9ESU1QIENs
b3NlKCkKKyAgICB7CisJcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgSUZBQ0VNRVRIT0RJTVBf
KHZvaWQpIFNldFNlZ21lbnRGbGFncyhEMkQxX1BBVEhfU0VHTUVOVCB2ZXJ0ZXhGbGFncykKKyAg
ICB7CisJcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBjYWlyb19maXhlZF90IEdldEZpeGVkWChj
b25zdCBEMkQxX1BPSU5UXzJGICZwb2ludCkKKyAgICB7CisjaWZkZWYgX01fSVg4NgorCXVuc2ln
bmVkIGludCBjb250cm9sX3dvcmQ7CisJX2NvbnRyb2xmcF9zKCZjb250cm9sX3dvcmQsIF9DV19E
RUZBVUxULCBNQ1dfUEMpOworI2VuZGlmCisJcmV0dXJuIF9jYWlyb19maXhlZF9mcm9tX2RvdWJs
ZShwb2ludC54KTsKKyAgICB9CisKKyAgICBjYWlyb19maXhlZF90IEdldEZpeGVkWShjb25zdCBE
MkQxX1BPSU5UXzJGICZwb2ludCkKKyAgICB7CisjaWZkZWYgX01fSVg4NgorCXVuc2lnbmVkIGlu
dCBjb250cm9sX3dvcmQ7CisJX2NvbnRyb2xmcF9zKCZjb250cm9sX3dvcmQsIF9DV19ERUZBVUxU
LCBNQ1dfUEMpOworI2VuZGlmCisJcmV0dXJuIF9jYWlyb19maXhlZF9mcm9tX2RvdWJsZShwb2lu
dC55KTsKKyAgICB9CisKKyAgICBJRkFDRU1FVEhPRElNUF8odm9pZCkgQmVnaW5GaWd1cmUoCisJ
RDJEMV9QT0lOVF8yRiBzdGFydFBvaW50LCAKKwlEMkQxX0ZJR1VSRV9CRUdJTiBmaWd1cmVCZWdp
bikgCisgICAgeworCW1TdGFydFBvaW50ID0gc3RhcnRQb2ludDsKKwljYWlyb19zdGF0dXNfdCBz
dGF0dXMgPSBfY2Fpcm9fcGF0aF9maXhlZF9tb3ZlX3RvKG1DYWlyb1BhdGgsIAorCQkJCQkJCSAg
R2V0Rml4ZWRYKHN0YXJ0UG9pbnQpLAorCQkJCQkJCSAgR2V0Rml4ZWRZKHN0YXJ0UG9pbnQpKTsK
KyAgICB9CisKKyAgICBJRkFDRU1FVEhPRElNUF8odm9pZCkgRW5kRmlndXJlKCAgICAKKwlEMkQx
X0ZJR1VSRV9FTkQgZmlndXJlRW5kKSAKKyAgICB7CisJaWYgKGZpZ3VyZUVuZCA9PSBEMkQxX0ZJ
R1VSRV9FTkRfQ0xPU0VEKSB7CisJICAgIGNhaXJvX3N0YXR1c190IHN0YXR1cyA9IF9jYWlyb19w
YXRoX2ZpeGVkX2xpbmVfdG8obUNhaXJvUGF0aCwKKwkJCQkJCQkgICAgICBHZXRGaXhlZFgobVN0
YXJ0UG9pbnQpLCAKKwkJCQkJCQkgICAgICBHZXRGaXhlZFkobVN0YXJ0UG9pbnQpKTsKKwl9Cisg
ICAgfQorCisgICAgSUZBQ0VNRVRIT0RJTVBfKHZvaWQpIEFkZEJlemllcnMoCisJY29uc3QgRDJE
MV9CRVpJRVJfU0VHTUVOVCAqYmV6aWVycywKKwlVSU5UIGJlemllcnNDb3VudCkKKyAgICB7CisJ
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBiZXppZXJzQ291bnQ7IGkrKykgeworCSAgICBj
YWlyb19zdGF0dXNfdCBzdGF0dXMgPSBfY2Fpcm9fcGF0aF9maXhlZF9jdXJ2ZV90byhtQ2Fpcm9Q
YXRoLAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFgoYmV6aWVyc1tpXS5wb2ludDEpLAorCQkJCQkJ
CSAgICAgICBHZXRGaXhlZFkoYmV6aWVyc1tpXS5wb2ludDEpLAorCQkJCQkJCSAgICAgICBHZXRG
aXhlZFgoYmV6aWVyc1tpXS5wb2ludDIpLAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFkoYmV6aWVy
c1tpXS5wb2ludDIpLAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFgoYmV6aWVyc1tpXS5wb2ludDMp
LAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFkoYmV6aWVyc1tpXS5wb2ludDMpKTsKKwl9CQorICAg
IH0KKworICAgIElGQUNFTUVUSE9ESU1QXyh2b2lkKSBBZGRMaW5lcygKKwljb25zdCBEMkQxX1BP
SU5UXzJGICpwb2ludHMsCisJVUlOVCBwb2ludHNDb3VudCkKKyAgICB7CisJZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwb2ludHNDb3VudDsgaSsrKSB7CisJICAgIGNhaXJvX3N0YXR1c190
IHN0YXR1cyA9IF9jYWlyb19wYXRoX2ZpeGVkX2xpbmVfdG8obUNhaXJvUGF0aCwgCisJCUdldEZp
eGVkWChwb2ludHNbaV0pLCAKKwkJR2V0Rml4ZWRZKHBvaW50c1tpXSkpOworCX0KKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY2Fpcm9fcGF0aF9maXhlZF90ICptQ2Fpcm9QYXRoOworICAgIEQyRDFf
UE9JTlRfMkYgbVN0YXJ0UG9pbnQ7Cit9OworCitjYWlyb19pbnRfc3RhdHVzX3QgCitfY2Fpcm9f
ZHdyaXRlX3NjYWxlZF9mb250X2luaXRfZ2x5cGhfcGF0aChjYWlyb19kd3JpdGVfc2NhbGVkX2Zv
bnRfdCAqc2NhbGVkX2ZvbnQsIAorCQkJCQkgIGNhaXJvX3NjYWxlZF9nbHlwaF90ICpzY2FsZWRf
Z2x5cGgpCit7CisgICAgY2Fpcm9fcGF0aF9maXhlZF90ICpwYXRoOworICAgIHBhdGggPSBfY2Fp
cm9fcGF0aF9maXhlZF9jcmVhdGUoKTsKKyAgICBHZW9tZXRyeVJlY29yZGVyIHJlY29yZGVyKHBh
dGgpOworCisgICAgRFdSSVRFX0dMWVBIX09GRlNFVCBvZmZzZXQ7CisgICAgb2Zmc2V0LmFkdmFu
Y2VPZmZzZXQgPSAwOworICAgIG9mZnNldC5hc2NlbmRlck9mZnNldCA9IDA7CisgICAgVUlOVDE2
IGdseXBoSWQgPSAoVUlOVDE2KV9jYWlyb19zY2FsZWRfZ2x5cGhfaW5kZXgoc2NhbGVkX2dseXBo
KTsKKyAgICBGTE9BVCBhZHZhbmNlID0gMC4wOworICAgIGNhaXJvX2R3cml0ZV9mb250X2ZhY2Vf
dCAqZHdyaXRlZmYgPSAoY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90KilzY2FsZWRfZm9udC0+YmFz
ZS5mb250X2ZhY2U7CisgICAgZHdyaXRlZmYtPmR3cml0ZWZhY2UtPkdldEdseXBoUnVuT3V0bGlu
ZSgoRkxPQVQpc2NhbGVkX2ZvbnQtPmJhc2UuZm9udF9tYXRyaXgueXksCisJCQkJCSAgICAgJmds
eXBoSWQsCisJCQkJCSAgICAgJmFkdmFuY2UsCisJCQkJCSAgICAgJm9mZnNldCwKKwkJCQkJICAg
ICAxLAorCQkJCQkgICAgIEZBTFNFLAorCQkJCQkgICAgIEZBTFNFLAorCQkJCQkgICAgICZyZWNv
cmRlcik7CisgICAgX2NhaXJvX3BhdGhfZml4ZWRfY2xvc2VfcGF0aChwYXRoKTsKKworICAgIC8q
IE5vdyBhcHBseSBvdXIgdHJhbnNmb3JtYXRpb24gdG8gdGhlIGRyYXduIHBhdGguICovCisgICAg
X2NhaXJvX3BhdGhfZml4ZWRfdHJhbnNmb3JtKHBhdGgsICZzY2FsZWRfZm9udC0+YmFzZS5jdG0p
OworICAgIAorICAgIF9jYWlyb19zY2FsZWRfZ2x5cGhfc2V0X3BhdGggKHNjYWxlZF9nbHlwaCwK
KwkJCQkgICZzY2FsZWRfZm9udC0+YmFzZSwKKwkJCQkgIHBhdGgpOworICAgIHJldHVybiBDQUlS
T19JTlRfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBhbHNvIHN0b2xl
biBmcm9tIGNhaXJvLXdpbjMyLWZvbnQuYyAqLworCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90ICoK
K19jb21wdXRlX21hc2sgKGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSwKKwkgICAgICAgaW50IHF1
YWxpdHkpCit7CisgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV90ICpnbHlwaDsKKyAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX3QgKm1hc2s7CisgICAgaW50IGksIGo7CisKKyAgICBnbHlwaCA9IChjYWly
b19pbWFnZV9zdXJmYWNlX3QgKiljYWlyb19zdXJmYWNlX21hcF90b19pbWFnZSAoc3VyZmFjZSwg
TlVMTCk7CisgICAgaWYgKHVubGlrZWx5IChnbHlwaC0+YmFzZS5zdGF0dXMpKQorCXJldHVybiAm
Z2x5cGgtPmJhc2U7CisKKyAgICBpZiAocXVhbGl0eSA9PSBDTEVBUlRZUEVfUVVBTElUWSkgewor
CS8qIER1cGxpY2F0ZSB0aGUgZ3JlZW4gY2hhbm5lbCBvZiBhIDQtY2hhbm5lbCBtYXNrIGludG8g
dGhlCisJICogYWxwaGEgY2hhbm5lbCwgdGhlbiBpbnZlcnQgdGhlIHdob2xlIG1hc2suCisJICov
CisJbWFzayA9IChjYWlyb19pbWFnZV9zdXJmYWNlX3QgKikKKwkgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUgKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisJCQkJCWdseXBoLT53aWR0aCwgZ2x5
cGgtPmhlaWdodCk7CisJaWYgKGxpa2VseSAobWFzay0+YmFzZS5zdGF0dXMgPT0gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1MpKSB7CisJICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaC0+aGVpZ2h0OyBpKysp
IHsKKwkJdWludDMyX3QgKnAgPSAodWludDMyX3QgKikgKGdseXBoLT5kYXRhICsgaSAqIGdseXBo
LT5zdHJpZGUpOworCQl1aW50MzJfdCAqcSA9ICh1aW50MzJfdCAqKSAobWFzay0+ZGF0YSArIGkg
KiBtYXNrLT5zdHJpZGUpOworCisJCWZvciAoaiA9IDA7IGogPCBnbHlwaC0+d2lkdGg7IGorKykg
eworCQkgICAgKnErKyA9IDB4ZmZmZmZmZmYgXiAoKnAgfCAoKCpwICYgMHgwMDAwZmYwMCkgPDwg
MTYpKTsKKwkJICAgIHArKzsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJLyogQ29t
cHV0ZSBhbiBhbHBoYS1tYXNrIGZyb20gYSB1c2luZyB0aGUgZ3JlZW4gY2hhbm5lbCBvZiBhCisJ
ICogKHByZXN1bWVkIG1vbm9jaHJvbWUpIFJHQjI0IGltYWdlLgorCSAqLworCW1hc2sgPSAoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV90ICopCisJICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlIChD
QUlST19GT1JNQVRfQTgsCisJCQkJCWdseXBoLT53aWR0aCwgZ2x5cGgtPmhlaWdodCk7CisJaWYg
KGxpa2VseSAobWFzay0+YmFzZS5zdGF0dXMgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpKSB7CisJ
ICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaC0+aGVpZ2h0OyBpKyspIHsKKwkJdWludDMyX3QgKnAg
PSAodWludDMyX3QgKikgKGdseXBoLT5kYXRhICsgaSAqIGdseXBoLT5zdHJpZGUpOworCQl1aW50
OF90ICpxID0gKHVpbnQ4X3QgKikgKG1hc2stPmRhdGEgKyBpICogbWFzay0+c3RyaWRlKTsKKwor
CQlmb3IgKGogPSAwOyBqIDwgZ2x5cGgtPndpZHRoOyBqKyspCisJCSAgICAqcSsrID0gMjU1IC0g
KCgqcCsrICYgMHgwMDAwZmYwMCkgPj4gOCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgY2Fp
cm9fc3VyZmFjZV91bm1hcF9pbWFnZSAoc3VyZmFjZSwgJmdseXBoLT5iYXNlKTsKKyAgICByZXR1
cm4gJm1hc2stPmJhc2U7Cit9CisKK2NhaXJvX2ludF9zdGF0dXNfdCAKK19jYWlyb19kd3JpdGVf
c2NhbGVkX2ZvbnRfaW5pdF9nbHlwaF9zdXJmYWNlKGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90
ICpzY2FsZWRfZm9udCwgCisJCQkJCSAgICAgY2Fpcm9fc2NhbGVkX2dseXBoX3QJKnNjYWxlZF9n
bHlwaCkKK3sKKyAgICBjYWlyb19pbnRfc3RhdHVzX3Qgc3RhdHVzOworICAgIGNhaXJvX2dseXBo
X3QgZ2x5cGg7CisgICAgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOworICAgIGNhaXJvX3QgKmNy
OworICAgIGNhaXJvX3N1cmZhY2VfdCAqaW1hZ2U7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7Cisg
ICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOworCisgICAgeDEgPSBfY2Fpcm9fZml4ZWRfaW50ZWdl
cl9mbG9vciAoc2NhbGVkX2dseXBoLT5iYm94LnAxLngpOworICAgIHkxID0gX2NhaXJvX2ZpeGVk
X2ludGVnZXJfZmxvb3IgKHNjYWxlZF9nbHlwaC0+YmJveC5wMS55KTsKKyAgICB4MiA9IF9jYWly
b19maXhlZF9pbnRlZ2VyX2NlaWwgKHNjYWxlZF9nbHlwaC0+YmJveC5wMi54KTsKKyAgICB5MiA9
IF9jYWlyb19maXhlZF9pbnRlZ2VyX2NlaWwgKHNjYWxlZF9nbHlwaC0+YmJveC5wMi55KTsKKyAg
ICB3aWR0aCA9IChpbnQpKHgyIC0geDEpOworICAgIGhlaWdodCA9IChpbnQpKHkyIC0geTEpOwor
CisgICAgZ2x5cGguaW5kZXggPSBfY2Fpcm9fc2NhbGVkX2dseXBoX2luZGV4IChzY2FsZWRfZ2x5
cGgpOworICAgIGdseXBoLnggPSAteDE7CisgICAgZ2x5cGgueSA9IC15MTsKKworICAgIERXUklU
RV9HTFlQSF9SVU4gcnVuOworICAgIEZMT0FUIGFkdmFuY2UgPSAwOworICAgIFVJTlQxNiBpbmRl
eCA9IChVSU5UMTYpZ2x5cGguaW5kZXg7CisgICAgRFdSSVRFX0dMWVBIX09GRlNFVCBvZmZzZXQ7
CisgICAgZG91YmxlIHggPSBnbHlwaC54OworICAgIGRvdWJsZSB5ID0gZ2x5cGgueTsKKyAgICBS
RUNUIGFyZWE7CisgICAgRFdSSVRFX01BVFJJWCBtYXRyaXg7CisKKyAgICBzdXJmYWNlID0gY2Fp
cm9fd2luMzJfc3VyZmFjZV9jcmVhdGVfd2l0aF9kaWIgKENBSVJPX0ZPUk1BVF9SR0IyNCwKKwkJ
CQkJCSAgIHdpZHRoLCBoZWlnaHQpOworCisgICAgc3RhdHVzID0gKGNhaXJvX2ludF9zdGF0dXNf
dClfY2Fpcm9fc3VyZmFjZV9wYWludCAoc3VyZmFjZSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFLAor
CQkJCQkJICAgICAgICZfY2Fpcm9fcGF0dGVybl93aGl0ZS5iYXNlLCBOVUxMKTsKKyAgICBpZiAo
c3RhdHVzKQorCWdvdG8gRkFJTDsKKworICAgIC8qKgorICAgICAqIFdlIHRyYW5zZm9ybSBieSB0
aGUgaW52ZXJzZSB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBUaGlzIHdpbGwgcHV0IG91ciBnbHlwaAor
ICAgICAqIGxvY2F0aW9ucyBpbiB0aGUgc3BhY2UgaW4gd2hpY2ggd2UgZHJhdy4gV2hpY2ggaXMg
bGF0ZXIgdHJhbnNmb3JtZWQgYnkKKyAgICAgKiB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRo
YXQgd2UgdXNlLiBUaGlzIHdpbGwgdHJhbnNmb3JtIHRoZQorICAgICAqIGdseXBoIHBvc2l0aW9u
cyBiYWNrIHRvIHdoZXJlIHRoZXkgd2VyZSBiZWZvcmUgd2hlbiBkcmF3aW5nLCBidXQgdGhlCisg
ICAgICogZ2x5cGggc2hhcGVzIHdpbGwgYmUgdHJhbnNmb3JtZWQgYnkgdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeC4KKyAgICAgKi8KKyAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZz
Y2FsZWRfZm9udC0+bWF0X2ludmVyc2UsICZ4LCAmeSk7CisgICAgb2Zmc2V0LmFkdmFuY2VPZmZz
ZXQgPSAoRkxPQVQpeDsKKyAgICAvKiogWS1heGlzIGlzIGludmVydGVkICovCisgICAgb2Zmc2V0
LmFzY2VuZGVyT2Zmc2V0ID0gLShGTE9BVCl5OworCisgICAgYXJlYS50b3AgPSAwOworICAgIGFy
ZWEuYm90dG9tID0gaGVpZ2h0OworICAgIGFyZWEubGVmdCA9IDA7CisgICAgYXJlYS5yaWdodCA9
IHdpZHRoOworCisgICAgcnVuLmdseXBoQ291bnQgPSAxOworICAgIHJ1bi5nbHlwaEFkdmFuY2Vz
ID0gJmFkdmFuY2U7CisgICAgcnVuLmZvbnRGYWNlID0gKChjYWlyb19kd3JpdGVfZm9udF9mYWNl
X3QqKXNjYWxlZF9mb250LT5iYXNlLmZvbnRfZmFjZSktPmR3cml0ZWZhY2U7CisgICAgcnVuLmZv
bnRFbVNpemUgPSAxLjBmOworICAgIHJ1bi5iaWRpTGV2ZWwgPSAwOworICAgIHJ1bi5nbHlwaElu
ZGljZXMgPSAmaW5kZXg7CisgICAgcnVuLmlzU2lkZXdheXMgPSBGQUxTRTsKKyAgICBydW4uZ2x5
cGhPZmZzZXRzID0gJm9mZnNldDsKKworICAgIG1hdHJpeCA9IF9jYWlyb19kd3JpdGVfbWF0cml4
X2Zyb21fbWF0cml4KCZzY2FsZWRfZm9udC0+bWF0KTsKKworICAgIHN0YXR1cyA9IF9kd3JpdGVf
ZHJhd19nbHlwaHNfdG9fZ2RpX3N1cmZhY2VfZ2RpICh0b193aW4zMl9zdXJmYWNlIChzdXJmYWNl
KSwgJm1hdHJpeCwgJnJ1biwKKyAgICAgICAgICAgIFJHQigwLDAsMCksIHNjYWxlZF9mb250LCBh
cmVhKTsKKyAgICBpZiAoc3RhdHVzKQorCWdvdG8gRkFJTDsKKworCisgICAgaW1hZ2UgPSBfY29t
cHV0ZV9tYXNrIChzdXJmYWNlLCBDTEVBUlRZUEVfUVVBTElUWSk7CisgICAgc3RhdHVzID0gKGNh
aXJvX2ludF9zdGF0dXNfdClpbWFnZS0+c3RhdHVzOworICAgIGlmIChzdGF0dXMpCisJZ290byBG
QUlMOworCisgICAgY2Fpcm9fc3VyZmFjZV9zZXRfZGV2aWNlX29mZnNldCAoaW1hZ2UsIC14MSwg
LXkxKTsKKyAgICBfY2Fpcm9fc2NhbGVkX2dseXBoX3NldF9zdXJmYWNlIChzY2FsZWRfZ2x5cGgs
CisJCQkJICAgICAmc2NhbGVkX2ZvbnQtPmJhc2UsCisJCQkJICAgICAoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV90ICopIGltYWdlKTsKKworICBGQUlMOgorICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSAo
c3VyZmFjZSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjYWlyb19pbnRfc3RhdHVzX3QK
K19jYWlyb19kd3JpdGVfbG9hZF90cnVldHlwZV90YWJsZSh2b2lkICAgICAgICAgICAgICAgICAq
c2NhbGVkX2ZvbnQsCisJCQkJICB1bnNpZ25lZCBsb25nICAgICAgICAgdGFnLAorCQkJCSAgbG9u
ZyAgICAgICAgICAgICAgICAgIG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgICAgICAgICpi
dWZmZXIsCisJCQkJICB1bnNpZ25lZCBsb25nICAgICAgICAqbGVuZ3RoKQoreworICAgIGNhaXJv
X2R3cml0ZV9zY2FsZWRfZm9udF90ICpkd3JpdGVzZiA9IHN0YXRpY19jYXN0PGNhaXJvX2R3cml0
ZV9zY2FsZWRfZm9udF90Kj4oc2NhbGVkX2ZvbnQpOworICAgIGNhaXJvX2R3cml0ZV9mb250X2Zh
Y2VfdCAqZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90Kj4o
ZHdyaXRlc2YtPmJhc2UuZm9udF9mYWNlKTsKKworICAgIGNvbnN0IHZvaWQgKmRhdGE7CisgICAg
VUlOVDMyIHNpemU7CisgICAgdm9pZCAqdGFibGVDb250ZXh0OworICAgIEJPT0wgZXhpc3RzOwor
ICAgIGZhY2UtPmR3cml0ZWZhY2UtPlRyeUdldEZvbnRUYWJsZShiZTMyX3RvX2NwdSAodGFnKSwK
KwkJCQkgICAgICAmZGF0YSwKKwkJCQkgICAgICAmc2l6ZSwKKwkJCQkgICAgICAmdGFibGVDb250
ZXh0LAorCQkJCSAgICAgICZleGlzdHMpOworCisgICAgaWYgKCFleGlzdHMpIHsKKwlyZXR1cm4g
Q0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyICYm
ICpsZW5ndGggJiYgKFVJTlQzMilvZmZzZXQgPCBzaXplKSB7CisgICAgICAgIHNpemUgPSBNSU4o
c2l6ZSAtIChVSU5UMzIpb2Zmc2V0LCAqbGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
KGNvbnN0IGNoYXIqKWRhdGEgKyBvZmZzZXQsIHNpemUpOworICAgIH0KKyAgICAqbGVuZ3RoID0g
c2l6ZTsKKworICAgIGlmICh0YWJsZUNvbnRleHQpIHsKKwlmYWNlLT5kd3JpdGVmYWNlLT5SZWxl
YXNlRm9udFRhYmxlKHRhYmxlQ29udGV4dCk7CisgICAgfQorICAgIHJldHVybiAoY2Fpcm9faW50
X3N0YXR1c190KUNBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCisvLyBXSU4zMiBIZWxwZXIgRnVu
Y3Rpb25zCitjYWlyb19mb250X2ZhY2VfdCoKK2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRl
X2Zvcl9kd3JpdGVfZm9udGZhY2Uodm9pZCogZHdyaXRlX2ZvbnQsIHZvaWQqIGR3cml0ZV9mb250
X2ZhY2UpCit7CisgICAgSURXcml0ZUZvbnQgKmR3cml0ZWZvbnQgPSBzdGF0aWNfY2FzdDxJRFdy
aXRlRm9udCo+KGR3cml0ZV9mb250KTsKKyAgICBJRFdyaXRlRm9udEZhY2UgKmR3cml0ZWZhY2Ug
PSBzdGF0aWNfY2FzdDxJRFdyaXRlRm9udEZhY2UqPihkd3JpdGVfZm9udF9mYWNlKTsKKyAgICBj
YWlyb19kd3JpdGVfZm9udF9mYWNlX3QgKmZhY2UgPSBuZXcgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFj
ZV90OworICAgIGNhaXJvX2ZvbnRfZmFjZV90ICpmb250X2ZhY2U7CisKKyAgICBkd3JpdGVmYWNl
LT5BZGRSZWYoKTsKKyAgICAKKyAgICBmYWNlLT5kd3JpdGVmYWNlID0gZHdyaXRlZmFjZTsKKyAg
ICBmYWNlLT5mb250ID0gTlVMTDsKKworICAgIGZvbnRfZmFjZSA9IChjYWlyb19mb250X2ZhY2Vf
dCopZmFjZTsKKyAgICAKKyAgICBfY2Fpcm9fZm9udF9mYWNlX2luaXQgKCYoKGNhaXJvX2R3cml0
ZV9mb250X2ZhY2VfdCopZm9udF9mYWNlKS0+YmFzZSwgJl9jYWlyb19kd3JpdGVfZm9udF9mYWNl
X2JhY2tlbmQpOworCisgICAgcmV0dXJuIGZvbnRfZmFjZTsKK30KKwordm9pZAorY2Fpcm9fZHdy
aXRlX3NjYWxlZF9mb250X2FsbG93X21hbnVhbF9zaG93X2dseXBocyhjYWlyb19zY2FsZWRfZm9u
dF90ICpkd3JpdGVfc2NhbGVkX2ZvbnQsIGNhaXJvX2Jvb2xfdCBhbGxvd2VkKQoreworICAgIGNh
aXJvX2R3cml0ZV9zY2FsZWRfZm9udF90ICpmb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19k
d3JpdGVfc2NhbGVkX2ZvbnRfdCo+KGR3cml0ZV9zY2FsZWRfZm9udCk7CisgICAgZm9udC0+bWFu
dWFsX3Nob3dfZ2x5cGhzX2FsbG93ZWQgPSBhbGxvd2VkOworfQorCit2b2lkCitjYWlyb19kd3Jp
dGVfc2NhbGVkX2ZvbnRfc2V0X2ZvcmNlX0dESV9jbGFzc2ljKGNhaXJvX3NjYWxlZF9mb250X3Qg
KmR3cml0ZV9zY2FsZWRfZm9udCwgY2Fpcm9fYm9vbF90IGZvcmNlKQoreworICAgIGNhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF90ICpmb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19kd3JpdGVf
c2NhbGVkX2ZvbnRfdCo+KGR3cml0ZV9zY2FsZWRfZm9udCk7CisgICAgaWYgKGZvcmNlICYmIGZv
bnQtPnJlbmRlcmluZ19tb2RlID09IGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JF
TkRFUklOR19OT1JNQUwpIHsKKyAgICAgICAgZm9udC0+cmVuZGVyaW5nX21vZGUgPSBjYWlyb19k
d3JpdGVfc2NhbGVkX2ZvbnRfdDo6VEVYVF9SRU5ERVJJTkdfR0RJX0NMQVNTSUM7CisgICAgfSBl
bHNlIGlmICghZm9yY2UgJiYgZm9udC0+cmVuZGVyaW5nX21vZGUgPT0gY2Fpcm9fZHdyaXRlX3Nj
YWxlZF9mb250X3Q6OlRFWFRfUkVOREVSSU5HX0dESV9DTEFTU0lDKSB7CisgICAgICAgIGZvbnQt
PnJlbmRlcmluZ19tb2RlID0gY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3Q6OlRFWFRfUkVOREVS
SU5HX05PUk1BTDsKKyAgICB9Cit9CisKK2NhaXJvX2Jvb2xfdAorY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X2dldF9mb3JjZV9HRElfY2xhc3NpYyhjYWlyb19zY2FsZWRfZm9udF90ICpkd3JpdGVf
c2NhbGVkX2ZvbnQpCit7CisgICAgY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKmZvbnQgPSBy
ZWludGVycHJldF9jYXN0PGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90Kj4oZHdyaXRlX3NjYWxl
ZF9mb250KTsKKyAgICByZXR1cm4gZm9udC0+cmVuZGVyaW5nX21vZGUgPT0gY2Fpcm9fZHdyaXRl
X3NjYWxlZF9mb250X3Q6OlRFWFRfUkVOREVSSU5HX0dESV9DTEFTU0lDOworfQorCit2b2lkCitj
YWlyb19kd3JpdGVfc2V0X2NsZWFydHlwZV9wYXJhbXMoRkxPQVQgZ2FtbWEsIEZMT0FUIGNvbnRy
YXN0LCBGTE9BVCBsZXZlbCwKKwkJCQkgIGludCBnZW9tZXRyeSwgaW50IG1vZGUpCit7CisgICAg
RFdyaXRlRmFjdG9yeTo6U2V0UmVuZGVyaW5nUGFyYW1zKGdhbW1hLCBjb250cmFzdCwgbGV2ZWws
IGdlb21ldHJ5LCBtb2RlKTsKK30KKworaW50CitjYWlyb19kd3JpdGVfZ2V0X2NsZWFydHlwZV9y
ZW5kZXJpbmdfbW9kZSgpCit7CisgICAgcmV0dXJuIERXcml0ZUZhY3Rvcnk6OkdldENsZWFyVHlw
ZVJlbmRlcmluZ01vZGUoKTsKK30KKworY2Fpcm9faW50X3N0YXR1c190CitfZHdyaXRlX2RyYXdf
Z2x5cGhzX3RvX2dkaV9zdXJmYWNlX2dkaShjYWlyb193aW4zMl9zdXJmYWNlX3QgKnN1cmZhY2Us
CisJCQkJICAgICAgIERXUklURV9NQVRSSVggKnRyYW5zZm9ybSwKKwkJCQkgICAgICAgRFdSSVRF
X0dMWVBIX1JVTiAqcnVuLAorCQkJCSAgICAgICBDT0xPUlJFRiBjb2xvciwKKwkJCQkgICAgICAg
Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKnNjYWxlZF9mb250LAorCQkJCSAgICAgICBjb25z
dCBSRUNUICZhcmVhKQoreworICAgIElEV3JpdGVHZGlJbnRlcm9wICpnZGlJbnRlcm9wOworICAg
IERXcml0ZUZhY3Rvcnk6Okluc3RhbmNlKCktPkdldEdkaUludGVyb3AoJmdkaUludGVyb3ApOwor
ICAgIElEV3JpdGVCaXRtYXBSZW5kZXJUYXJnZXQgKnJ0OworICAgIEhSRVNVTFQgcnY7CisKKyAg
ICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6VGV4dFJlbmRlcmluZ1N0YXRlIHJlbmRlcmlu
Z1N0YXRlID0KKyAgICAgIHNjYWxlZF9mb250LT5yZW5kZXJpbmdfbW9kZTsKKworICAgIHJ2ID0g
Z2RpSW50ZXJvcC0+Q3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KHN1cmZhY2UtPmRjLAorCQkJCQkg
ICAgICBhcmVhLnJpZ2h0IC0gYXJlYS5sZWZ0LAorCQkJCQkgICAgICBhcmVhLmJvdHRvbSAtIGFy
ZWEudG9wLAorCQkJCQkgICAgICAmcnQpOworCisgICAgaWYgKEZBSUxFRChydikpIHsKKwlpZiAo
cnYgPT0gRV9PVVRPRk1FTU9SWSkgeworCSAgICByZXR1cm4gKGNhaXJvX2ludF9zdGF0dXNfdClD
QUlST19TVEFUVVNfTk9fTUVNT1JZOworCX0gZWxzZSB7CisJICAgIHJldHVybiBDQUlST19JTlRf
U1RBVFVTX1VOU1VQUE9SVEVEOworCX0KKyAgICB9CisKKyNpZiAwICAgIAorICAgIGlmICgocmVu
ZGVyaW5nU3RhdGUgPT0gY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3Q6OlRFWFRfUkVOREVSSU5H
X05PUk1BTCB8fAorICAgICAgICAgcmVuZGVyaW5nU3RhdGUgPT0gY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X3Q6OlRFWFRfUkVOREVSSU5HX0dESV9DTEFTU0lDKSAmJgorICAgICAgICAhc3VyZmFj
ZS0+YmFzZS5wZXJtaXRfc3VicGl4ZWxfYW50aWFsaWFzaW5nKSB7CisgICAgICByZW5kZXJpbmdT
dGF0ZSA9IGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRFUklOR19OT19DTEVB
UlRZUEU7CisgICAgICBJRFdyaXRlQml0bWFwUmVuZGVyVGFyZ2V0MSogcnQxOworICAgICAgcnYg
PSBydC0+UXVlcnlJbnRlcmZhY2UoJnJ0MSk7CisgICAgICAKKyAgICAgIGlmIChTVUNDRUVERUQo
cnYpICYmIHJ0MSkgeworICAgICAgICBydDEtPlNldFRleHRBbnRpYWxpYXNNb2RlKERXUklURV9U
RVhUX0FOVElBTElBU19NT0RFX0dSQVlTQ0FMRSk7CisgICAgICAgIHJ0MS0+UmVsZWFzZSgpOwor
ICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyAqcGFy
YW1zID0KKyAgICAgICAgRFdyaXRlRmFjdG9yeTo6UmVuZGVyaW5nUGFyYW1zKHJlbmRlcmluZ1N0
YXRlKTsKKworICAgIC8qKgorICAgICAqIFdlIHNldCB0aGUgbnVtYmVyIG9mIHBpeGVscyBwZXIg
RElQIHRvIDEuMC4gVGhpcyBpcyBiZWNhdXNlIHdlIGFsd2F5cyB3YW50CisgICAgICogdG8gZHJh
dyBpbiBkZXZpY2UgcGl4ZWxzLCBhbmQgbm90IGRldmljZSBpbmRlcGVuZGVudCBwaXhlbHMuIE9u
IGhpZ2ggRFBJCisgICAgICogc3lzdGVtcyB0aGlzIHZhbHVlIHdpbGwgYmUgaGlnaGVyIHRoYW4g
MS4wIGFuZCBhdXRvbWF0aWNhbGx5IHVwc2NhbGUKKyAgICAgKiBmb250cywgd2UgZG9uJ3Qgd2Fu
dCB0aGlzIHNpbmNlIHdlIGRvIG91ciBvd24gdXBzY2FsaW5nIGZvciB2YXJpb3VzIHJlYXNvbnMu
CisgICAgICovCisgICAgcnQtPlNldFBpeGVsc1BlckRpcCgxLjApOworCisgICAgaWYgKHRyYW5z
Zm9ybSkgeworCXJ0LT5TZXRDdXJyZW50VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgfQorICAg
IEJpdEJsdChydC0+R2V0TWVtb3J5REMoKSwKKwkgICAwLCAwLAorCSAgIGFyZWEucmlnaHQgLSBh
cmVhLmxlZnQsIGFyZWEuYm90dG9tIC0gYXJlYS50b3AsCisJICAgc3VyZmFjZS0+ZGMsCisJICAg
YXJlYS5sZWZ0LCBhcmVhLnRvcCwgCisJICAgU1JDQ09QWSB8IE5PTUlSUk9SQklUTUFQKTsKKyAg
ICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyZU1vZGU7IAorICAgIHN3aXRjaCAocmVuZGVy
aW5nU3RhdGUpIHsKKyAgICBjYXNlIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JF
TkRFUklOR19HRElfQ0xBU1NJQzoKKyAgICBjYXNlIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90
OjpURVhUX1JFTkRFUklOR19OT19DTEVBUlRZUEU6CisgICAgICAgIG1lYXN1cmVNb2RlID0gRFdS
SVRFX01FQVNVUklOR19NT0RFX0dESV9DTEFTU0lDOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBtZWFzdXJlTW9kZSA9IERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFM
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgSFJFU1VMVCBociA9IHJ0LT5EcmF3R2x5cGhS
dW4oMCwgMCwgbWVhc3VyZU1vZGUsIHJ1biwgcGFyYW1zLCBjb2xvcik7CisgICAgQml0Qmx0KHN1
cmZhY2UtPmRjLAorCSAgIGFyZWEubGVmdCwgYXJlYS50b3AsCisJICAgYXJlYS5yaWdodCAtIGFy
ZWEubGVmdCwgYXJlYS5ib3R0b20gLSBhcmVhLnRvcCwKKwkgICBydC0+R2V0TWVtb3J5REMoKSwK
KwkgICAwLCAwLCAKKwkgICBTUkNDT1BZIHwgTk9NSVJST1JCSVRNQVApOworICAgIHBhcmFtcy0+
UmVsZWFzZSgpOworICAgIHJ0LT5SZWxlYXNlKCk7CisgICAgZ2RpSW50ZXJvcC0+UmVsZWFzZSgp
OworICAgIHJldHVybiBDQUlST19JTlRfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2NhaXJvX2ludF9z
dGF0dXNfdAorX2R3cml0ZV9kcmF3X2dseXBoc190b19nZGlfc3VyZmFjZV9kMmQoY2Fpcm9fd2lu
MzJfc3VyZmFjZV90ICpzdXJmYWNlLAorCQkJCSAgICAgICBEV1JJVEVfTUFUUklYICp0cmFuc2Zv
cm0sCisJCQkJICAgICAgIERXUklURV9HTFlQSF9SVU4gKnJ1biwKKwkJCQkgICAgICAgQ09MT1JS
RUYgY29sb3IsCisJCQkJICAgICAgIGNvbnN0IFJFQ1QgJmFyZWEpCit7CisgICAgSFJFU1VMVCBy
djsKKworICAgIElEMkQxRENSZW5kZXJUYXJnZXQgKnJ0ID0gRDJERmFjdG9yeTo6UmVuZGVyVGFy
Z2V0KCk7CisKKyAgICAvLyBYWFggZG9uJ3Qgd2UgbmVlZCB0byBzZXQgUmVuZGVyaW5nUGFyYW1z
IG9uIHRoaXMgUmVuZGVyVGFyZ2V0PworCisgICAgcnYgPSBydC0+QmluZERDKHN1cmZhY2UtPmRj
LCAmYXJlYSk7CisKKyAgICBwcmludGYoIlJlbmRlcmluZyB0byBzdXJmYWNlOiAlcFxuIiwgc3Vy
ZmFjZS0+ZGMpOworCisgICAgaWYgKEZBSUxFRChydikpIHsKKwlydC0+UmVsZWFzZSgpOworCXJl
dHVybiBDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIEQyRCB1
c2VzIDB4MDBSUkdHQkIgbm90IDB4MDBCQkdHUlIgbGlrZSBDT0xPUlJFRi4KKyAgICBjb2xvciA9
IChjb2xvciAmIDB4RkYpIDw8IDE2IHwKKwkoY29sb3IgJiAweEZGMDApIHwKKwkoY29sb3IgJiAw
eEZGMDAwMCkgPj4gMTY7CisgICAgSUQyRDFTb2xpZENvbG9yQnJ1c2ggKmJydXNoOworICAgIHJ2
ID0gcnQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChEMkQxOjpDb2xvckYoY29sb3IsIDEuMCksICZi
cnVzaCk7CisKKyAgICBpZiAoRkFJTEVEKHJ2KSkgeworCXJ0LT5SZWxlYXNlKCk7CisJcmV0dXJu
IENBSVJPX0lOVF9TVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgaWYgKHRyYW5zZm9y
bSkgeworCXJ0LT5TZXRUcmFuc2Zvcm0oRDJEMTo6TWF0cml4M3gyRih0cmFuc2Zvcm0tPm0xMSwK
KwkJCQkJICB0cmFuc2Zvcm0tPm0xMiwKKwkJCQkJICB0cmFuc2Zvcm0tPm0yMSwKKwkJCQkJICB0
cmFuc2Zvcm0tPm0yMiwKKwkJCQkJICB0cmFuc2Zvcm0tPmR4LAorCQkJCQkgIHRyYW5zZm9ybS0+
ZHkpKTsKKyAgICB9CisgICAgcnQtPkJlZ2luRHJhdygpOworICAgIHJ0LT5EcmF3R2x5cGhSdW4o
RDJEMTo6UG9pbnQyRigwLCAwKSwgcnVuLCBicnVzaCk7CisgICAgcnQtPkVuZERyYXcoKTsKKyAg
ICBpZiAodHJhbnNmb3JtKSB7CisJcnQtPlNldFRyYW5zZm9ybShEMkQxOjpNYXRyaXgzeDJGOjpJ
ZGVudGl0eSgpKTsKKyAgICB9CisgICAgYnJ1c2gtPlJlbGVhc2UoKTsKKyAgICBpZiAoRkFJTEVE
KHJ2KSkgeworCXJldHVybiBDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKwor
ICAgIHJldHVybiBDQUlST19JTlRfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qIFN1cmZhY2UgaGVs
cGVyIGZ1bmN0aW9uICovCitjYWlyb19pbnRfc3RhdHVzX3QKK19jYWlyb19kd3JpdGVfc2hvd19n
bHlwaHNfb25fc3VyZmFjZSh2b2lkCQkJKnN1cmZhY2UsCisJCQkJICAgIGNhaXJvX29wZXJhdG9y
X3QJIG9wLAorCQkJCSAgICBjb25zdCBjYWlyb19wYXR0ZXJuX3QJKnNvdXJjZSwKKwkJCQkgICAg
Y2Fpcm9fZ2x5cGhfdAkJKmdseXBocywKKwkJCQkgICAgaW50CQkJIG51bV9nbHlwaHMsCisJCQkJ
ICAgIGNhaXJvX3NjYWxlZF9mb250X3QJKnNjYWxlZF9mb250KQoreworICAgIC8vIFRPRE86IENo
ZWNrIGZvbnQgJiBzdXJmYWNlIGZvciB0eXBlcy4KKyAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2Zv
bnRfdCAqZHdyaXRlc2YgPSByZWludGVycHJldF9jYXN0PGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9u
dF90Kj4oc2NhbGVkX2ZvbnQpOworICAgIGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfdCAqZHdyaXRl
ZmYgPSByZWludGVycHJldF9jYXN0PGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfdCo+KHNjYWxlZF9m
b250LT5mb250X2ZhY2UpOworICAgIGNhaXJvX3dpbjMyX3N1cmZhY2VfdCAqZHN0ID0gcmVpbnRl
cnByZXRfY2FzdDxjYWlyb193aW4zMl9zdXJmYWNlX3QqPihzdXJmYWNlKTsKKyAgICBjYWlyb19p
bnRfc3RhdHVzX3Qgc3RhdHVzOworICAgIC8qIFdlIGNhbiBvbmx5IGhhbmRsZSBkd3JpdGUgZm9u
dHMgKi8KKyAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X3R5cGUgKHNjYWxlZF9mb250KSAh
PSBDQUlST19GT05UX1RZUEVfRFdSSVRFKQorCXJldHVybiBDQUlST19JTlRfU1RBVFVTX1VOU1VQ
UE9SVEVEOworCisgICAgLyogV2UgY2FuIG9ubHkgaGFuZGxlIG9wYXF1ZSBzb2xpZCBjb2xvciBz
b3VyY2VzICovCisgICAgaWYgKCFfY2Fpcm9fcGF0dGVybl9pc19vcGFxdWVfc29saWQoc291cmNl
KSkKKwlyZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKworICAgIC8qIFdlIGNh
biBvbmx5IGhhbmRsZSBvcGVyYXRvciBTT1VSQ0Ugb3IgT1ZFUiB3aXRoIHRoZSBkZXN0aW5hdGlv
bgorICAgICAqIGhhdmluZyBubyBhbHBoYSAqLworICAgIGlmIChvcCAhPSBDQUlST19PUEVSQVRP
Ul9TT1VSQ0UgJiYgb3AgIT0gQ0FJUk9fT1BFUkFUT1JfT1ZFUikKKwlyZXR1cm4gQ0FJUk9fSU5U
X1NUQVRVU19VTlNVUFBPUlRFRDsKKworICAgIC8qIEl0IGlzIHZpdGFsIHRoYXQgZHggdmFsdWVz
IGZvciBkeHlfYnVmIGFyZSBjYWxjdWxhdGVkIGZyb20gdGhlIGRlbHRhIG9mCisgICAgICogX2xv
Z2ljYWxfIHggY29vcmRpbmF0ZXMgKG5vdCB1c2VyIHggY29vcmRpbmF0ZXMpIG9yIGVsc2UgdGhl
IHN1bSBvZiBhbGwKKyAgICAgKiBwcmV2aW91cyBkeCB2YWx1ZXMgbWF5IHN0YXJ0IHRvIGRpdmVy
Z2UgZnJvbSB0aGUgY3VycmVudCBnbHlwaCdzIHgKKyAgICAgKiBjb29yZGluYXRlIGR1ZSB0byBh
Y2N1bXVsYXRlZCByb3VuZGluZyBlcnJvci4gQXMgYSByZXN1bHQgc3RyaW5ncyBjb3VsZAorICAg
ICAqIGJlIHBhaW50ZWQgc2hvcnRlciBvciBsb25nZXIgdGhhbiBleHBlY3RlZC4gKi8KKworICAg
IEF1dG9EV3JpdGVHbHlwaFJ1biBydW47CisgICAgcnVuLmFsbG9jYXRlKG51bV9nbHlwaHMpOwor
CisgICAgVUlOVDE2ICppbmRpY2VzID0gY29uc3RfY2FzdDxVSU5UMTYqPihydW4uZ2x5cGhJbmRp
Y2VzKTsKKyAgICBGTE9BVCAqYWR2YW5jZXMgPSBjb25zdF9jYXN0PEZMT0FUKj4ocnVuLmdseXBo
QWR2YW5jZXMpOworICAgIERXUklURV9HTFlQSF9PRkZTRVQgKm9mZnNldHMgPSBjb25zdF9jYXN0
PERXUklURV9HTFlQSF9PRkZTRVQqPihydW4uZ2x5cGhPZmZzZXRzKTsKKworICAgIEJPT0wgdHJh
bnNmb3JtID0gRkFMU0U7CisgICAgLyogTmVlZGVkIHRvIGNhbGN1bGF0ZSBib3VuZGluZyBib3gg
Zm9yIGVmZmljaWVudCBibGl0dGluZyAqLworICAgIElOVDMyIHNtYWxsZXN0WCA9IElOVF9NQVg7
CisgICAgSU5UMzIgbGFyZ2VzdFggPSAwOworICAgIElOVDMyIHNtYWxsZXN0WSA9IElOVF9NQVg7
CisgICAgSU5UMzIgbGFyZ2VzdFkgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2ds
eXBoczsgaSsrKSB7CisJaWYgKGdseXBoc1tpXS54IDwgc21hbGxlc3RYKSB7CisJICAgIHNtYWxs
ZXN0WCA9IChJTlQzMilnbHlwaHNbaV0ueDsKKwl9CisJaWYgKGdseXBoc1tpXS54ID4gbGFyZ2Vz
dFgpIHsKKwkgICAgbGFyZ2VzdFggPSAoSU5UMzIpZ2x5cGhzW2ldLng7CisJfQorCWlmIChnbHlw
aHNbaV0ueSA8IHNtYWxsZXN0WSkgeworCSAgICBzbWFsbGVzdFkgPSAoSU5UMzIpZ2x5cGhzW2ld
Lnk7CisJfQorCWlmIChnbHlwaHNbaV0ueSA+IGxhcmdlc3RZKSB7CisJICAgIGxhcmdlc3RZID0g
KElOVDMyKWdseXBoc1tpXS55OworCX0KKyAgICB9CisgICAgLyoqCisgICAgICogSGVyZSB3ZSB0
cnkgdG8gZ2V0IGEgcm91Z2ggZXN0aW1hdGUgb2YgdGhlIGFyZWEgdGhhdCB0aGlzIGdseXBoIHJ1
biB3aWxsCisgICAgICogY292ZXIgb24gdGhlIHN1cmZhY2UuIFNpbmNlIHdlIHVzZSBHREkgaW50
ZXJvcCB0byBkcmF3IHdlIHdpbGwgYmUgY29weWluZworICAgICAqIGRhdGEgYXJvdW5kIHRoZSBz
aXplIG9mIHRoZSBhcmVhIG9mIHRoZSBzdXJmYWNlIHRoYXQgd2UgbWFwLiBXZSB3aWxsIHdhbnQK
KyAgICAgKiB0byBtYXAgYW4gYXJlYSBhcyBzbWFsbCBhcyBwb3NzaWJsZSB0byBwcmV2ZW50IGxh
cmdlIHN1cmZhY2VzIHRvIGJlCisgICAgICogY29waWVkIGFyb3VuZC4gV2UgdGFrZSB0aGUgWC9Z
LXNpemUgb2YgdGhlIGZvbnQgYXMgbWFyZ2luIG9uIHRoZSBsZWZ0L3RvcAorICAgICAqIHR3aWNl
IHRoZSBYL1ktc2l6ZSBvZiB0aGUgZm9udCBhcyBtYXJnaW4gb24gdGhlIHJpZ2h0L2JvdHRvbS4K
KyAgICAgKiBUaGlzIHNob3VsZCBhbHdheXMgY292ZXIgdGhlIGVudGlyZSBhcmVhIHdoZXJlIHRo
ZSBnbHlwaHMgYXJlLgorICAgICAqLworICAgIFJFQ1QgZm9udEFyZWE7CisgICAgZm9udEFyZWEu
bGVmdCA9IChJTlQzMikoc21hbGxlc3RYIC0gc2NhbGVkX2ZvbnQtPmZvbnRfbWF0cml4Lnh4KTsK
KyAgICBmb250QXJlYS5yaWdodCA9IChJTlQzMikobGFyZ2VzdFggKyBzY2FsZWRfZm9udC0+Zm9u
dF9tYXRyaXgueHggKiAyKTsKKyAgICBmb250QXJlYS50b3AgPSAoSU5UMzIpKHNtYWxsZXN0WSAt
IHNjYWxlZF9mb250LT5mb250X21hdHJpeC55eSk7CisgICAgZm9udEFyZWEuYm90dG9tID0gKElO
VDMyKShsYXJnZXN0WSArIHNjYWxlZF9mb250LT5mb250X21hdHJpeC55eSAqIDIpOworICAgIGlm
IChmb250QXJlYS5sZWZ0IDwgMCkKKwlmb250QXJlYS5sZWZ0ID0gMDsKKyAgICBpZiAoZm9udEFy
ZWEudG9wIDwgMCkKKwlmb250QXJlYS50b3AgPSAwOworICAgIGlmIChmb250QXJlYS5ib3R0b20g
PiBkc3QtPmV4dGVudHMuaGVpZ2h0KSB7CisJZm9udEFyZWEuYm90dG9tID0gZHN0LT5leHRlbnRz
LmhlaWdodDsKKyAgICB9CisgICAgaWYgKGZvbnRBcmVhLnJpZ2h0ID4gZHN0LT5leHRlbnRzLndp
ZHRoKSB7CisJZm9udEFyZWEucmlnaHQgPSBkc3QtPmV4dGVudHMud2lkdGg7CisgICAgfQorICAg
IGlmIChmb250QXJlYS5yaWdodCA8PSBmb250QXJlYS5sZWZ0IHx8CisJZm9udEFyZWEuYm90dG9t
IDw9IGZvbnRBcmVhLnRvcCkgeworCXJldHVybiBDQUlST19JTlRfU1RBVFVTX1NVQ0NFU1M7Cisg
ICAgfQorICAgIGlmIChmb250QXJlYS5yaWdodCA+IGRzdC0+ZXh0ZW50cy53aWR0aCkgeworCWZv
bnRBcmVhLnJpZ2h0ID0gZHN0LT5leHRlbnRzLndpZHRoOworICAgIH0KKyAgICBpZiAoZm9udEFy
ZWEuYm90dG9tID4gZHN0LT5leHRlbnRzLmhlaWdodCkgeworCWZvbnRBcmVhLmJvdHRvbSA9IGRz
dC0+ZXh0ZW50cy5oZWlnaHQ7CisgICAgfQorCisgICAgcnVuLmJpZGlMZXZlbCA9IDA7CisgICAg
cnVuLmZvbnRGYWNlID0gZHdyaXRlZmYtPmR3cml0ZWZhY2U7CisgICAgcnVuLmlzU2lkZXdheXMg
PSBGQUxTRTsKKyAgICBpZiAoZHdyaXRlc2YtPm1hdC54eSA9PSAwICYmIGR3cml0ZXNmLT5tYXQu
eXggPT0gMCAmJgorCWR3cml0ZXNmLT5tYXQueHggPT0gc2NhbGVkX2ZvbnQtPmZvbnRfbWF0cml4
Lnh4ICYmIAorCWR3cml0ZXNmLT5tYXQueXkgPT0gc2NhbGVkX2ZvbnQtPmZvbnRfbWF0cml4Lnl5
KSB7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9nbHlwaHM7IGkrKykgeworCSAgICBpbmRp
Y2VzW2ldID0gKFdPUkQpIGdseXBoc1tpXS5pbmRleDsKKwkgICAgLy8gU2luY2Ugd2Ugd2lsbCBt
dWx0aXBseSBieSBvdXIgY3RtIG1hdHJpeCBsYXRlciBmb3Igcm90YXRpb24gZWZmZWN0cworCSAg
ICAvLyBhbmQgc3VjaCwgYWRqdXN0IHBvc2l0aW9ucyBieSB0aGUgaW52ZXJzZSBtYXRyaXggbm93
LgorCSAgICBvZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gKEZMT0FUKShmb250QXJlYS50b3Ag
LSBnbHlwaHNbaV0ueSk7CisJICAgIG9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IChGTE9BVCko
Z2x5cGhzW2ldLnggLSBmb250QXJlYS5sZWZ0KTsKKwkgICAgYWR2YW5jZXNbaV0gPSAwLjA7CisJ
fQorCXJ1bi5mb250RW1TaXplID0gKEZMT0FUKXNjYWxlZF9mb250LT5mb250X21hdHJpeC55eTsK
KyAgICB9IGVsc2UgeworCXRyYW5zZm9ybSA9IFRSVUU7CisgICAgICAgIC8vIFNlZSBjb21tZW50
IGFib3V0IEVQU0lMT04gaW4gX2NhaXJvX2R3cml0ZV9nbHlwaF9ydW5fZnJvbV9nbHlwaHMKKyAg
ICAgICAgY29uc3QgZG91YmxlIEVQU0lMT04gPSAwLjAwMDE7CisJZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1fZ2x5cGhzOyBpKyspIHsKKwkgICAgaW5kaWNlc1tpXSA9IChXT1JEKSBnbHlwaHNbaV0u
aW5kZXg7CisJICAgIGRvdWJsZSB4ID0gZ2x5cGhzW2ldLnggLSBmb250QXJlYS5sZWZ0ICsgRVBT
SUxPTjsKKwkgICAgZG91YmxlIHkgPSBnbHlwaHNbaV0ueSAtIGZvbnRBcmVhLnRvcDsKKwkgICAg
Y2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmZHdyaXRlc2YtPm1hdF9pbnZlcnNlLCAmeCwg
JnkpOworCSAgICAvKioKKwkgICAgICogU2luY2Ugd2Ugd2lsbCBtdWx0aXBseSBieSBvdXIgY3Rt
IG1hdHJpeCBsYXRlciBmb3Igcm90YXRpb24gZWZmZWN0cworCSAgICAgKiBhbmQgc3VjaCwgYWRq
dXN0IHBvc2l0aW9ucyBieSB0aGUgaW52ZXJzZSBtYXRyaXggbm93LiBUaGUgWS1heGlzCisJICAg
ICAqIGlzIGludmVydGVkIHNvIHRoZSBvZmZzZXQgYmVjb21lcyBuZWdhdGl2ZS4KKwkgICAgICov
CisJICAgIG9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSAtKEZMT0FUKXk7CisJICAgIG9mZnNl
dHNbaV0uYWR2YW5jZU9mZnNldCA9IChGTE9BVCl4OworCSAgICBhZHZhbmNlc1tpXSA9IDAuMDsK
Kwl9CisJcnVuLmZvbnRFbVNpemUgPSAxLjBmOworICAgIH0KKyAgICAKKyAgICBjYWlyb19zb2xp
ZF9wYXR0ZXJuX3QgKnNvbGlkX3BhdHRlcm4gPSAoY2Fpcm9fc29saWRfcGF0dGVybl90ICopc291
cmNlOworICAgIENPTE9SUkVGIGNvbG9yID0gUkdCKCgoaW50KXNvbGlkX3BhdHRlcm4tPmNvbG9y
LnJlZF9zaG9ydCkgPj4gOCwKKwkJKChpbnQpc29saWRfcGF0dGVybi0+Y29sb3IuZ3JlZW5fc2hv
cnQpID4+IDgsCisJCSgoaW50KXNvbGlkX3BhdHRlcm4tPmNvbG9yLmJsdWVfc2hvcnQpID4+IDgp
OworCisgICAgRFdSSVRFX01BVFJJWCBtYXRyaXggPSBfY2Fpcm9fZHdyaXRlX21hdHJpeF9mcm9t
X21hdHJpeCgmZHdyaXRlc2YtPm1hdCk7CisKKyAgICBEV1JJVEVfTUFUUklYICptYXQ7CisgICAg
aWYgKHRyYW5zZm9ybSkgeworCW1hdCA9ICZtYXRyaXg7CisgICAgfSBlbHNlIHsKKwltYXQgPSBO
VUxMOworICAgIH0KKworICAgIFJFQ1QgYXJlYTsKKyAgICBhcmVhLmxlZnQgPSBkc3QtPmV4dGVu
dHMueDsKKyAgICBhcmVhLnRvcCA9IGRzdC0+ZXh0ZW50cy55OworICAgIGFyZWEucmlnaHQgPSBh
cmVhLmxlZnQgKyBkc3QtPmV4dGVudHMud2lkdGg7CisgICAgYXJlYS5ib3R0b20gPSBhcmVhLnRv
cCArIGRzdC0+ZXh0ZW50cy5oZWlnaHQ7CisKKyNpZmRlZiBDQUlST19UUllfRDJEX1RPX0dESQor
ICAgIHN0YXR1cyA9IF9kd3JpdGVfZHJhd19nbHlwaHNfdG9fZ2RpX3N1cmZhY2VfZDJkKGRzdCwK
KwkJCQkJCSAgICBtYXQsCisJCQkJCQkgICAgJnJ1biwKKwkJCQkJCSAgICBjb2xvciwKKwkJCQkJ
CSAgICBmb250QXJlYSk7CisKKyAgICBpZiAoc3RhdHVzID09IChjYWlyb19zdGF0dXNfdClDQUlS
T19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEKSB7CisjZW5kaWYKKwlzdGF0dXMgPSBfZHdyaXRlX2Ry
YXdfZ2x5cGhzX3RvX2dkaV9zdXJmYWNlX2dkaShkc3QsCisJCQkJCQkJbWF0LAorCQkJCQkJCSZy
dW4sCisJCQkJCQkJY29sb3IsCisJCQkJCQkJZHdyaXRlc2YsCisJCQkJCQkJZm9udEFyZWEpOwor
CisjaWZkZWYgQ0FJUk9fVFJZX0QyRF9UT19HREkKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVy
biBzdGF0dXM7Cit9CisKKyNkZWZpbmUgRU5IQU5DRURfQ09OVFJBU1RfUkVHSVNUUllfS0VZIFwK
KyAgICBIS0VZX0NVUlJFTlRfVVNFUiwgIlNvZnR3YXJlXFxNaWNyb3NvZnRcXEF2YWxvbi5HcmFw
aGljc1xcRElTUExBWTFcXEVuaGFuY2VkQ29udHJhc3RMZXZlbCIKKwordm9pZAorRFdyaXRlRmFj
dG9yeTo6Q3JlYXRlUmVuZGVyaW5nUGFyYW1zKCkKK3sKKyAgICBpZiAoIUluc3RhbmNlKCkpIHsK
KwlyZXR1cm47CisgICAgfQorCisgICAgSW5zdGFuY2UoKS0+Q3JlYXRlUmVuZGVyaW5nUGFyYW1z
KCZtRGVmYXVsdFJlbmRlcmluZ1BhcmFtcyk7CisKKyAgICAvLyBGb3IgRW5oYW5jZWRDb250cmFz
dCwgd2Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaWYgdGhlIHVzZXIgaGFzIG5vdCBzZXQgaXQKKyAg
ICAvLyBpbiB0aGUgcmVnaXN0cnkgKGJ5IHVzaW5nIHRoZSBDbGVhclR5cGUgVHVuZXIpLgorICAg
IEZMT0FUIGNvbnRyYXN0OworICAgIGlmIChtRW5oYW5jZWRDb250cmFzdCA+PSAwLjAgJiYgbUVu
aGFuY2VkQ29udHJhc3QgPD0gMTAuMCkgeworCWNvbnRyYXN0ID0gbUVuaGFuY2VkQ29udHJhc3Q7
CisgICAgfSBlbHNlIHsKKwlIS0VZIGhLZXk7CisJaWYgKFJlZ09wZW5LZXlFeEEoRU5IQU5DRURf
Q09OVFJBU1RfUkVHSVNUUllfS0VZLAorCQkJICAwLCBLRVlfUkVBRCwgJmhLZXkpID09IEVSUk9S
X1NVQ0NFU1MpCisJeworCSAgICBjb250cmFzdCA9IG1EZWZhdWx0UmVuZGVyaW5nUGFyYW1zLT5H
ZXRFbmhhbmNlZENvbnRyYXN0KCk7CisJICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOworCX0gZWxzZSB7
CisJICAgIGNvbnRyYXN0ID0gMS4wOworCX0KKyAgICB9CisKKyAgICAvLyBGb3IgcGFyYW1ldGVy
cyB0aGF0IGhhdmUgbm90IGJlZW4gZXhwbGljaXRseSBzZXQgdmlhIHRoZSBTZXRSZW5kZXJpbmdQ
YXJhbXMgQVBJLAorICAgIC8vIHdlIGNvcHkgdmFsdWVzIGZyb20gZGVmYXVsdCBwYXJhbXMgKG9y
IG91ciBvdmVycmlkZGVuIHZhbHVlIGZvciBjb250cmFzdCkKKyAgICBGTE9BVCBnYW1tYSA9Cisg
ICAgICAgIG1HYW1tYSA+PSAxLjAgJiYgbUdhbW1hIDw9IDIuMiA/CisgICAgICAgICAgICBtR2Ft
bWEgOiBtRGVmYXVsdFJlbmRlcmluZ1BhcmFtcy0+R2V0R2FtbWEoKTsKKyAgICBGTE9BVCBjbGVh
clR5cGVMZXZlbCA9CisgICAgICAgIG1DbGVhclR5cGVMZXZlbCA+PSAwLjAgJiYgbUNsZWFyVHlw
ZUxldmVsIDw9IDEuMCA/CisgICAgICAgICAgICBtQ2xlYXJUeXBlTGV2ZWwgOiBtRGVmYXVsdFJl
bmRlcmluZ1BhcmFtcy0+R2V0Q2xlYXJUeXBlTGV2ZWwoKTsKKyAgICBEV1JJVEVfUElYRUxfR0VP
TUVUUlkgcGl4ZWxHZW9tZXRyeSA9CisgICAgICAgIG1QaXhlbEdlb21ldHJ5ID49IERXUklURV9Q
SVhFTF9HRU9NRVRSWV9GTEFUICYmIG1QaXhlbEdlb21ldHJ5IDw9IERXUklURV9QSVhFTF9HRU9N
RVRSWV9CR1IgPworICAgICAgICAgICAgKERXUklURV9QSVhFTF9HRU9NRVRSWSltUGl4ZWxHZW9t
ZXRyeSA6IG1EZWZhdWx0UmVuZGVyaW5nUGFyYW1zLT5HZXRQaXhlbEdlb21ldHJ5KCk7CisgICAg
RFdSSVRFX1JFTkRFUklOR19NT0RFIHJlbmRlcmluZ01vZGUgPQorICAgICAgICBtUmVuZGVyaW5n
TW9kZSA+PSBEV1JJVEVfUkVOREVSSU5HX01PREVfREVGQVVMVCAmJiBtUmVuZGVyaW5nTW9kZSA8
PSBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX05BVFVSQUxfU1lNTUVUUklDID8KKyAg
ICAgICAgICAgIChEV1JJVEVfUkVOREVSSU5HX01PREUpbVJlbmRlcmluZ01vZGUgOiBtRGVmYXVs
dFJlbmRlcmluZ1BhcmFtcy0+R2V0UmVuZGVyaW5nTW9kZSgpOworICAgIEluc3RhbmNlKCktPkNy
ZWF0ZUN1c3RvbVJlbmRlcmluZ1BhcmFtcyhnYW1tYSwgY29udHJhc3QsIGNsZWFyVHlwZUxldmVs
LAorCXBpeGVsR2VvbWV0cnksIHJlbmRlcmluZ01vZGUsCisJJm1DdXN0b21DbGVhclR5cGVSZW5k
ZXJpbmdQYXJhbXMpOworICAgIEluc3RhbmNlKCktPkNyZWF0ZUN1c3RvbVJlbmRlcmluZ1BhcmFt
cyhnYW1tYSwgY29udHJhc3QsIGNsZWFyVHlwZUxldmVsLAorICAgICAgICBwaXhlbEdlb21ldHJ5
LCBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9DTEFTU0lDLAorICAgICAgICAm
bUZvcmNlR0RJQ2xhc3NpY1JlbmRlcmluZ1BhcmFtcyk7Cit9CisKK3N0YXRpYyBjYWlyb19ib29s
X3QKK19uYW1lX3RhYmxlc19tYXRjaCAoY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqZm9udDEsCisgICAg
ICAgICAgICAgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X3QgKmZvbnQyKQoreworICAgIHVuc2ln
bmVkIGxvbmcgc2l6ZTE7CisgICAgdW5zaWduZWQgbG9uZyBzaXplMjsKKyAgICBjYWlyb19pbnRf
c3RhdHVzX3Qgc3RhdHVzMTsKKyAgICBjYWlyb19pbnRfc3RhdHVzX3Qgc3RhdHVzMjsKKyAgICB1
bnNpZ25lZCBjaGFyICpidWZmZXIxOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjI7CisgICAg
Y2Fpcm9fYm9vbF90IHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKCFmb250MS0+YmFja2VuZCB8
fCAhZm9udDItPmJhY2tlbmQgfHwKKyAgICAgICAgIWZvbnQxLT5iYWNrZW5kLT5sb2FkX3RydWV0
eXBlX3RhYmxlIHx8CisgICAgICAgICFmb250Mi0+YmFja2VuZC0+bG9hZF90cnVldHlwZV90YWJs
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdHVzMSA9IGZvbnQxLT5iYWNrZW5k
LT5sb2FkX3RydWV0eXBlX3RhYmxlIChmb250MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRUX1RBR19uYW1lLCAwLCBOVUxMLCAmc2l6ZTEpOwor
ICAgIHN0YXR1czIgPSBmb250Mi0+YmFja2VuZC0+bG9hZF90cnVldHlwZV90YWJsZSAoZm9udDIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9U
QUdfbmFtZSwgMCwgTlVMTCwgJnNpemUyKTsKKyAgICBpZiAoc3RhdHVzMSB8fCBzdGF0dXMyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNpemUxICE9IHNpemUyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBidWZmZXIxID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyAoc2l6
ZTEpOworICAgIGJ1ZmZlcjIgPSAodW5zaWduZWQgY2hhciopbWFsbG9jIChzaXplMik7CisKKyAg
ICBpZiAoYnVmZmVyMSAmJiBidWZmZXIyKSB7CisgICAgICAgIHN0YXR1czEgPSBmb250MS0+YmFj
a2VuZC0+bG9hZF90cnVldHlwZV90YWJsZSAoZm9udDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfVEFHX25hbWUsIDAsIGJ1ZmZlcjEs
ICZzaXplMSk7CisgICAgICAgIHN0YXR1czIgPSBmb250Mi0+YmFja2VuZC0+bG9hZF90cnVldHlw
ZV90YWJsZSAoZm9udDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFRfVEFHX25hbWUsIDAsIGJ1ZmZlcjIsICZzaXplMik7CisgICAgICAg
IGlmICghc3RhdHVzMSAmJiAhc3RhdHVzMikgeworICAgICAgICAgICAgcmVzdWx0ID0gbWVtY21w
IChidWZmZXIxLCBidWZmZXIyLCBzaXplMSkgPT0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZyZWUgKGJ1ZmZlcjEpOworICAgIGZyZWUgKGJ1ZmZlcjIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKy8vIEhlbHBlciBmb3IgX2NhaXJvX3dpbjMyX3ByaW50aW5nX3N1cmZhY2Vfc2hvd19n
bHlwaHMgdG8gY3JlYXRlIGEgd2luMzIgZXF1aXZhbGVudAorLy8gb2YgYSBkd3JpdGUgc2NhbGVk
X2ZvbnQgc28gdGhhdCB3ZSBjYW4gcHJpbnQgdXNpbmcgRXh0VGV4dE91dCBpbnN0ZWFkIG9mIGRy
YXdpbmcKKy8vIHBhdGhzIG9yIGJsaXR0aW5nIGdseXBoIGJpdG1hcHMuCitjYWlyb19pbnRfc3Rh
dHVzX3QKK19jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfY3JlYXRlX3dpbjMyX3NjYWxlZF9mb250
IChjYWlyb19zY2FsZWRfZm9udF90ICpzY2FsZWRfZm9udCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19zY2FsZWRfZm9udF90ICoqbmV3
X2ZvbnQpCit7CisgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X2dldF90eXBlIChzY2FsZWRfZm9u
dCkgIT0gQ0FJUk9fRk9OVF9UWVBFX0RXUklURSkgeworICAgICAgICByZXR1cm4gQ0FJUk9fSU5U
X1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBjYWlyb19mb250X2ZhY2VfdCAqZmFj
ZSA9IGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UgKHNjYWxlZF9mb250KTsKKyAgICBj
YWlyb19kd3JpdGVfZm9udF9mYWNlX3QgKmR3ZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9f
ZHdyaXRlX2ZvbnRfZmFjZV90Kj4oZmFjZSk7CisKKyAgICBSZWZQdHI8SURXcml0ZUdkaUludGVy
b3A+IGdkaUludGVyb3A7CisgICAgRFdyaXRlRmFjdG9yeTo6SW5zdGFuY2UoKS0+R2V0R2RpSW50
ZXJvcCgmZ2RpSW50ZXJvcCk7CisgICAgaWYgKCFnZGlJbnRlcm9wKSB7CisgICAgICAgIHJldHVy
biBDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIExPR0ZPTlRXIGxv
Z2ZvbnQ7CisgICAgaWYgKEZBSUxFRChnZGlJbnRlcm9wLT5Db252ZXJ0Rm9udEZhY2VUb0xPR0ZP
TlQgKGR3ZmFjZS0+ZHdyaXRlZmFjZSwgJmxvZ2ZvbnQpKSkgeworCXJldHVybiBDQUlST19JTlRf
U1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICAvLyBEVyBtdXN0IGhhdmUgYmVlbiB1c2lu
ZyBhbiBvdXRsaW5lIGZvbnQsIHNvIHdlIHdhbnQgR0RJIHRvIHVzZSB0aGUgc2FtZSwKKyAgICAv
LyBldmVuIGlmIHRoZXJlJ3MgYWxzbyBhIGJpdG1hcCBmYWNlIGF2YWlsYWJsZQorICAgIGxvZ2Zv
bnQubGZPdXRQcmVjaXNpb24gPSBPVVRfT1VUTElORV9QUkVDSVM7CisKKyAgICBjYWlyb19mb250
X2ZhY2VfdCAqd2luMzJfZmFjZSA9IGNhaXJvX3dpbjMyX2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2xv
Z2ZvbnR3ICgmbG9nZm9udCk7CisgICAgaWYgKCF3aW4zMl9mYWNlKSB7CisgICAgICAgIHJldHVy
biBDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIGNhaXJvX21hdHJp
eF90IGZvbnRfbWF0cml4OworICAgIGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X21hdHJpeCAo
c2NhbGVkX2ZvbnQsICZmb250X21hdHJpeCk7CisKKyAgICBjYWlyb19tYXRyaXhfdCBjdG07Cisg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2N0bSAoc2NhbGVkX2ZvbnQsICZjdG0pOworCisgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX3Qgb3B0aW9uczsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9nZXRf
Zm9udF9vcHRpb25zIChzY2FsZWRfZm9udCwgJm9wdGlvbnMpOworCisgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfdCAqZm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZSAod2luMzJfZmFjZSwKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udF9tYXRyaXgsCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bSwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmb3B0aW9ucyk7CisgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3kg
KHdpbjMyX2ZhY2UpOworCisgICAgaWYgKCFmb250KSB7CisgICAgICAgIHJldHVybiBDQUlST19J
TlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIGlmICghX25hbWVfdGFibGVzX21h
dGNoIChmb250LCBzY2FsZWRfZm9udCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGZvbnQgbmFtZSB0
YWJsZXMgYXJlbid0IGVxdWFsLCB0aGVuIEdESSBtYXkgaGF2ZSBmYWlsZWQgdG8KKyAgICAgICAg
Ly8gZmluZCB0aGUgcmlnaHQgZm9udCBhbmQgc3Vic3RpdHV0ZWQgYSBkaWZmZXJlbnQgZm9udC4K
KyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveSAoZm9udCk7CisgICAgICAgIHJldHVy
biBDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgICpuZXdfZm9udCA9
IGZvbnQ7CisgICAgcmV0dXJuIENBSVJPX0lOVF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdp
dCBhL3NyYy93aW4zMi9jYWlyby1kd3JpdGUtcHJpdmF0ZS5oIGIvc3JjL3dpbjMyL2NhaXJvLWR3
cml0ZS1wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5lNDc1
N2EyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2luMzIvY2Fpcm8tZHdyaXRlLXByaXZhdGUu
aApAQCAtMCwwICsxLDIzMCBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgYy1iYXNp
Yy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IHQ7IC0qLSAqLworLyogQ2Fpcm8gLSBhIHZl
Y3RvciBncmFwaGljcyBsaWJyYXJ5IHdpdGggZGlzcGxheSBhbmQgcHJpbnQgb3V0cHV0CisgKgor
ICogQ29weXJpZ2h0IKkgMjAxMCBNb3ppbGxhIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbgorICogKHRoZSAiTEdQTCIpIG9yLCBhdCB5b3VyIG9wdGlvbiwg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhCisgKiBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDEuMSAodGhlICJNUEwiKS4gSWYgeW91IGRvIG5vdCBhbHRlciB0aGlzCisgKiBub3RpY2UsIGEg
cmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIK
KyAqIHRoZSBNUEwgb3IgdGhlIExHUEwuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgTEdQTCBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeQorICogaW4gdGhlIGZp
bGUgQ09QWUlORy1MR1BMLTIuMTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNyBVU0EKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIE1QTCBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeQorICogaW4gdGhlIGZpbGUgQ09QWUlORy1N
UEwtMS4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIp
OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorICogY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWQorICogT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTEdQTCBvciB0aGUgTVBM
IGZvcgorICogdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBjYWlybyBncmFwaGljcyBs
aWJyYXJ5LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcyB0aGUgTW96aWxsYSBGb3VuZGF0aW9uCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKglC
YXMgU2Nob3V0ZW4gPGJzY2hvdXRlbkBtb3ppbGxhLmNvbT4KKyAqLworI2luY2x1ZGUgPGR3cml0
ZV8xLmg+CisjaW5jbHVkZSA8ZDJkMS5oPgorCisvLyBEaXJlY3RXcml0ZSBpcyBub3QgYXZhaWxh
YmxlIG9uIGFsbCBwbGF0Zm9ybXMuCit0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpEV3JpdGVDcmVh
dGVGYWN0b3J5RnVuYykoCisgIERXUklURV9GQUNUT1JZX1RZUEUgZmFjdG9yeVR5cGUsCisgIFJF
RklJRCBpaWQsCisgIElVbmtub3duICoqZmFjdG9yeQorKTsKKworLyogY2Fpcm9fc2NhbGVkX2Zv
bnRfdCBpbXBsZW1lbnRhdGlvbiAqLworc3RydWN0IF9jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnQg
eworICAgIGNhaXJvX3NjYWxlZF9mb250X3QgYmFzZTsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXQ7
CisgICAgY2Fpcm9fbWF0cml4X3QgbWF0X2ludmVyc2U7CisgICAgY2Fpcm9fYW50aWFsaWFzX3Qg
YW50aWFsaWFzX21vZGU7CisgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1lYXN1cmluZ19tb2Rl
OworICAgIGNhaXJvX2Jvb2xfdCBtYW51YWxfc2hvd19nbHlwaHNfYWxsb3dlZDsKKyAgICBlbnVt
IFRleHRSZW5kZXJpbmdTdGF0ZSB7CisgICAgICAgIFRFWFRfUkVOREVSSU5HX1VOSU5JVElBTEla
RUQsCisgICAgICAgIFRFWFRfUkVOREVSSU5HX05PX0NMRUFSVFlQRSwKKyAgICAgICAgVEVYVF9S
RU5ERVJJTkdfTk9STUFMLAorICAgICAgICBURVhUX1JFTkRFUklOR19HRElfQ0xBU1NJQworICAg
IH07CisgICAgVGV4dFJlbmRlcmluZ1N0YXRlIHJlbmRlcmluZ19tb2RlOworfTsKK3R5cGVkZWYg
c3RydWN0IF9jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnQgY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250
X3Q7CisKK2NsYXNzIERXcml0ZUZhY3RvcnkKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgSURXcml0
ZUZhY3RvcnkgKkluc3RhbmNlKCkKKyAgICB7CisJaWYgKCFtRmFjdG9yeUluc3RhbmNlKSB7CisJ
ICAgIERXcml0ZUNyZWF0ZUZhY3RvcnlGdW5jIGNyZWF0ZURXcml0ZUZhY3RvcnkgPSAoRFdyaXRl
Q3JlYXRlRmFjdG9yeUZ1bmMpCisJCUdldFByb2NBZGRyZXNzKExvYWRMaWJyYXJ5VyhMImR3cml0
ZS5kbGwiKSwgIkRXcml0ZUNyZWF0ZUZhY3RvcnkiKTsKKwkgICAgaWYgKGNyZWF0ZURXcml0ZUZh
Y3RvcnkpIHsKKwkJSFJFU1VMVCBociA9IGNyZWF0ZURXcml0ZUZhY3RvcnkoCisJCSAgICBEV1JJ
VEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwKKwkJICAgIF9fdXVpZG9mKElEV3JpdGVGYWN0b3J5KSwK
KwkJICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJm1GYWN0b3J5SW5zdGFuY2UpKTsK
KwkJYXNzZXJ0KFNVQ0NFRURFRChocikpOworCSAgICB9CisJfQorCXJldHVybiBtRmFjdG9yeUlu
c3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBJRFdyaXRlRm9udENvbGxlY3Rpb24gKlN5c3Rl
bUNvbGxlY3Rpb24oKQorICAgIHsKKwlpZiAoIW1TeXN0ZW1Db2xsZWN0aW9uKSB7CisJICAgIGlm
IChJbnN0YW5jZSgpKSB7CisJCUhSRVNVTFQgaHIgPSBJbnN0YW5jZSgpLT5HZXRTeXN0ZW1Gb250
Q29sbGVjdGlvbigmbVN5c3RlbUNvbGxlY3Rpb24pOworCQlhc3NlcnQoU1VDQ0VFREVEKGhyKSk7
CisJICAgIH0KKwl9CisJcmV0dXJuIG1TeXN0ZW1Db2xsZWN0aW9uOworICAgIH0KKworICAgIHN0
YXRpYyBJRFdyaXRlRm9udEZhbWlseSAqRmluZFN5c3RlbUZvbnRGYW1pbHkoY29uc3QgV0NIQVIg
KmFGYW1pbHlOYW1lKQorICAgIHsKKwlVSU5UMzIgaWR4OworCUJPT0wgZm91bmQ7CisJaWYgKCFT
eXN0ZW1Db2xsZWN0aW9uKCkpIHsKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorCVN5c3RlbUNvbGxl
Y3Rpb24oKS0+RmluZEZhbWlseU5hbWUoYUZhbWlseU5hbWUsICZpZHgsICZmb3VuZCk7CisJaWYg
KCFmb3VuZCkgeworCSAgICByZXR1cm4gTlVMTDsKKwl9CisKKwlJRFdyaXRlRm9udEZhbWlseSAq
ZmFtaWx5OworCVN5c3RlbUNvbGxlY3Rpb24oKS0+R2V0Rm9udEZhbWlseShpZHgsICZmYW1pbHkp
OworCXJldHVybiBmYW1pbHk7CisgICAgfQorCisgICAgc3RhdGljIElEV3JpdGVSZW5kZXJpbmdQ
YXJhbXMgKlJlbmRlcmluZ1BhcmFtcyhjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6VGV4dFJl
bmRlcmluZ1N0YXRlIG1vZGUpCisgICAgeworCWlmICghbURlZmF1bHRSZW5kZXJpbmdQYXJhbXMg
fHwKKyAgICAgICAgICAgICFtRm9yY2VHRElDbGFzc2ljUmVuZGVyaW5nUGFyYW1zIHx8CisgICAg
ICAgICAgICAhbUN1c3RvbUNsZWFyVHlwZVJlbmRlcmluZ1BhcmFtcykKKyAgICAgICAgeworCSAg
ICBDcmVhdGVSZW5kZXJpbmdQYXJhbXMoKTsKKwl9CisJSURXcml0ZVJlbmRlcmluZ1BhcmFtcyAq
cGFyYW1zOworICAgICAgICBpZiAobW9kZSA9PSBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6
VEVYVF9SRU5ERVJJTkdfTk9fQ0xFQVJUWVBFKSB7CisgICAgICAgICAgICBwYXJhbXMgPSBtRGVm
YXVsdFJlbmRlcmluZ1BhcmFtczsKKyAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IGNhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRFUklOR19HRElfQ0xBU1NJQyAmJiBtUmVuZGVy
aW5nTW9kZSA8IDApIHsKKyAgICAgICAgICAgIHBhcmFtcyA9IG1Gb3JjZUdESUNsYXNzaWNSZW5k
ZXJpbmdQYXJhbXM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJhbXMgPSBtQ3Vz
dG9tQ2xlYXJUeXBlUmVuZGVyaW5nUGFyYW1zOworICAgICAgICB9CisJaWYgKHBhcmFtcykgewor
CSAgICBwYXJhbXMtPkFkZFJlZigpOworCX0KKwlyZXR1cm4gcGFyYW1zOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIFNldFJlbmRlcmluZ1BhcmFtcyhGTE9BVCBhR2FtbWEsCisJCQkJICAgRkxP
QVQgYUVuaGFuY2VkQ29udHJhc3QsCisJCQkJICAgRkxPQVQgYUNsZWFyVHlwZUxldmVsLAorCQkJ
CSAgIGludCBhUGl4ZWxHZW9tZXRyeSwKKwkJCQkgICBpbnQgYVJlbmRlcmluZ01vZGUpCisgICAg
eworCW1HYW1tYSA9IGFHYW1tYTsKKwltRW5oYW5jZWRDb250cmFzdCA9IGFFbmhhbmNlZENvbnRy
YXN0OworCW1DbGVhclR5cGVMZXZlbCA9IGFDbGVhclR5cGVMZXZlbDsKKyAgICAgICAgbVBpeGVs
R2VvbWV0cnkgPSBhUGl4ZWxHZW9tZXRyeTsKKyAgICAgICAgbVJlbmRlcmluZ01vZGUgPSBhUmVu
ZGVyaW5nTW9kZTsKKwkvLyBkaXNjYXJkIGFueSBjdXJyZW50IFJlbmRlcmluZ1BhcmFtcyBvYmpl
Y3RzCisJaWYgKG1DdXN0b21DbGVhclR5cGVSZW5kZXJpbmdQYXJhbXMpIHsKKwkgICAgbUN1c3Rv
bUNsZWFyVHlwZVJlbmRlcmluZ1BhcmFtcy0+UmVsZWFzZSgpOworCSAgICBtQ3VzdG9tQ2xlYXJU
eXBlUmVuZGVyaW5nUGFyYW1zID0gTlVMTDsKKwl9CisJaWYgKG1Gb3JjZUdESUNsYXNzaWNSZW5k
ZXJpbmdQYXJhbXMpIHsKKwkgICAgbUZvcmNlR0RJQ2xhc3NpY1JlbmRlcmluZ1BhcmFtcy0+UmVs
ZWFzZSgpOworCSAgICBtRm9yY2VHRElDbGFzc2ljUmVuZGVyaW5nUGFyYW1zID0gTlVMTDsKKwl9
CisJaWYgKG1EZWZhdWx0UmVuZGVyaW5nUGFyYW1zKSB7CisJICAgIG1EZWZhdWx0UmVuZGVyaW5n
UGFyYW1zLT5SZWxlYXNlKCk7CisJICAgIG1EZWZhdWx0UmVuZGVyaW5nUGFyYW1zID0gTlVMTDsK
Kwl9CisgICAgfQorCisgICAgc3RhdGljIGludCBHZXRDbGVhclR5cGVSZW5kZXJpbmdNb2RlKCkg
eworICAgICAgICByZXR1cm4gbVJlbmRlcmluZ01vZGU7CisgICAgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyB2b2lkIENyZWF0ZVJlbmRlcmluZ1BhcmFtcygpOworCisgICAgc3RhdGljIElEV3Jp
dGVGYWN0b3J5ICptRmFjdG9yeUluc3RhbmNlOworICAgIHN0YXRpYyBJRFdyaXRlRm9udENvbGxl
Y3Rpb24gKm1TeXN0ZW1Db2xsZWN0aW9uOworICAgIHN0YXRpYyBJRFdyaXRlUmVuZGVyaW5nUGFy
YW1zICptRGVmYXVsdFJlbmRlcmluZ1BhcmFtczsKKyAgICBzdGF0aWMgSURXcml0ZVJlbmRlcmlu
Z1BhcmFtcyAqbUN1c3RvbUNsZWFyVHlwZVJlbmRlcmluZ1BhcmFtczsKKyAgICBzdGF0aWMgSURX
cml0ZVJlbmRlcmluZ1BhcmFtcyAqbUZvcmNlR0RJQ2xhc3NpY1JlbmRlcmluZ1BhcmFtczsKKyAg
ICBzdGF0aWMgRkxPQVQgbUdhbW1hOworICAgIHN0YXRpYyBGTE9BVCBtRW5oYW5jZWRDb250cmFz
dDsKKyAgICBzdGF0aWMgRkxPQVQgbUNsZWFyVHlwZUxldmVsOworICAgIHN0YXRpYyBpbnQgbVBp
eGVsR2VvbWV0cnk7CisgICAgc3RhdGljIGludCBtUmVuZGVyaW5nTW9kZTsKK307CisKK2NsYXNz
IEF1dG9EV3JpdGVHbHlwaFJ1biA6IHB1YmxpYyBEV1JJVEVfR0xZUEhfUlVOCit7CisgICAgc3Rh
dGljIGNvbnN0IGludCBrTnVtQXV0b0dseXBocyA9IDI1NjsKKworcHVibGljOgorICAgIEF1dG9E
V3JpdGVHbHlwaFJ1bigpIHsKKyAgICAgICAgZ2x5cGhDb3VudCA9IDA7CisgICAgfQorCisgICAg
fkF1dG9EV3JpdGVHbHlwaFJ1bigpIHsKKyAgICAgICAgaWYgKGdseXBoQ291bnQgPiBrTnVtQXV0
b0dseXBocykgeworICAgICAgICAgICAgZGVsZXRlW10gZ2x5cGhJbmRpY2VzOworICAgICAgICAg
ICAgZGVsZXRlW10gZ2x5cGhBZHZhbmNlczsKKyAgICAgICAgICAgIGRlbGV0ZVtdIGdseXBoT2Zm
c2V0czsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWxsb2NhdGUoaW50IGFOdW1HbHlw
aHMpIHsKKyAgICAgICAgZ2x5cGhDb3VudCA9IGFOdW1HbHlwaHM7CisgICAgICAgIGlmIChhTnVt
R2x5cGhzIDw9IGtOdW1BdXRvR2x5cGhzKSB7CisgICAgICAgICAgICBnbHlwaEluZGljZXMgPSAm
bUF1dG9JbmRpY2VzWzBdOworICAgICAgICAgICAgZ2x5cGhBZHZhbmNlcyA9ICZtQXV0b0FkdmFu
Y2VzWzBdOworICAgICAgICAgICAgZ2x5cGhPZmZzZXRzID0gJm1BdXRvT2Zmc2V0c1swXTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdseXBoSW5kaWNlcyA9IG5ldyBVSU5UMTZbYU51
bUdseXBoc107CisgICAgICAgICAgICBnbHlwaEFkdmFuY2VzID0gbmV3IEZMT0FUW2FOdW1HbHlw
aHNdOworICAgICAgICAgICAgZ2x5cGhPZmZzZXRzID0gbmV3IERXUklURV9HTFlQSF9PRkZTRVRb
YU51bUdseXBoc107CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgRFdSSVRFX0dM
WVBIX09GRlNFVCBtQXV0b09mZnNldHNba051bUF1dG9HbHlwaHNdOworICAgIEZMT0FUICAgICAg
ICAgICAgICAgbUF1dG9BZHZhbmNlc1trTnVtQXV0b0dseXBoc107CisgICAgVUlOVDE2ICAgICAg
ICAgICAgICBtQXV0b0luZGljZXNba051bUF1dG9HbHlwaHNdOworfTsKKworLyogY2Fpcm9fZm9u
dF9mYWNlX3QgaW1wbGVtZW50YXRpb24gKi8KK3N0cnVjdCBfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFj
ZSB7CisgICAgY2Fpcm9fZm9udF9mYWNlX3QgYmFzZTsKKyAgICBJRFdyaXRlRm9udCAqZm9udDsK
KyAgICBJRFdyaXRlRm9udEZhY2UgKmR3cml0ZWZhY2U7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX2Nh
aXJvX2R3cml0ZV9mb250X2ZhY2UgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90OworCitEV1JJVEVf
TUFUUklYIF9jYWlyb19kd3JpdGVfbWF0cml4X2Zyb21fbWF0cml4KGNvbnN0IGNhaXJvX21hdHJp
eF90ICptYXRyaXgpOworCisvLyBUaGlzIHdpbGwgaW5pdGlhbGl6ZSBhIERXcml0ZSBnbHlwaCBy
dW4gZnJvbSBjYWlybyBnbHlwaHMgYW5kIGEgc2NhbGVkX2ZvbnQuCit2b2lkCitfY2Fpcm9fZHdy
aXRlX2dseXBoX3J1bl9mcm9tX2dseXBocyhjYWlyb19nbHlwaF90ICpnbHlwaHMsCisJCQkJICAg
IGludCBudW1fZ2x5cGhzLAorCQkJCSAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2Nh
bGVkX2ZvbnQsCisJCQkJICAgIEF1dG9EV3JpdGVHbHlwaFJ1biAqcnVuLAorCQkJCSAgICBjYWly
b19ib29sX3QgKnRyYW5zZm9ybWVkKTsKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9jYWlyby13aW4z
Mi1mb250LmMgYi9zcmMvd2luMzIvY2Fpcm8td2luMzItZm9udC5jCmluZGV4IDFmMjE3NTczYi4u
OTkwZTE5NjhiIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvY2Fpcm8td2luMzItZm9udC5jCisrKyBi
L3NyYy93aW4zMi9jYWlyby13aW4zMi1mb250LmMKQEAgLTI3MCwxNCArMjcwLDE0IEBAIF9oYXZl
X2NsZWFydHlwZV9xdWFsaXR5ICh2b2lkKQogCSAgICAgdmVyc2lvbl9pbmZvLmR3TWlub3JWZXJz
aW9uID49IDEpKTsJLyogWFAgb3IgbmV3ZXIgKi8KIH0KIAotc3RhdGljIEJZVEUKLV9nZXRfc3lz
dGVtX3F1YWxpdHkgKHZvaWQpCitCWVRFCitfY2Fpcm9fd2luMzJfZ2V0X3N5c3RlbV90ZXh0X3F1
YWxpdHkgKHZvaWQpCiB7CiAgICAgQk9PTCBmb250X3Ntb290aGluZzsKICAgICBVSU5UIHNtb290
aGluZ190eXBlOwogCiAgICAgaWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyAoU1BJX0dFVEZPTlRT
TU9PVEhJTkcsIDAsICZmb250X3Ntb290aGluZywgMCkpIHsKLQlfY2Fpcm9fd2luMzJfcHJpbnRf
Z2RpX2Vycm9yICgiX2dldF9zeXN0ZW1fcXVhbGl0eSIpOworCV9jYWlyb193aW4zMl9wcmludF9n
ZGlfZXJyb3IgKCJfY2Fpcm9fd2luMzJfZ2V0X3N5c3RlbV90ZXh0X3F1YWxpdHkiKTsKIAlyZXR1
cm4gREVGQVVMVF9RVUFMSVRZOwogICAgIH0KIApAQCAtMjg1LDcgKzI4NSw3IEBAIF9nZXRfc3lz
dGVtX3F1YWxpdHkgKHZvaWQpCiAJaWYgKF9oYXZlX2NsZWFydHlwZV9xdWFsaXR5ICgpKSB7CiAJ
ICAgIGlmICghU3lzdGVtUGFyYW1ldGVyc0luZm8gKFNQSV9HRVRGT05UU01PT1RISU5HVFlQRSwK
IAkJCQkgICAgICAgMCwgJnNtb290aGluZ190eXBlLCAwKSkgewotCQlfY2Fpcm9fd2luMzJfcHJp
bnRfZ2RpX2Vycm9yICgiX2dldF9zeXN0ZW1fcXVhbGl0eSIpOworCQlfY2Fpcm9fd2luMzJfcHJp
bnRfZ2RpX2Vycm9yICgiX2NhaXJvX3dpbjMyX2dldF9zeXN0ZW1fdGV4dF9xdWFsaXR5Iik7CiAJ
CXJldHVybiBERUZBVUxUX1FVQUxJVFk7CiAJICAgIH0KIApAQCAtMzM4LDcgKzMzOCw3IEBAIF93
aW4zMl9zY2FsZWRfZm9udF9jcmVhdGUgKExPR0ZPTlRXICAgICAgICAgICAgICAgICAgICpsb2dm
b250LAogICAgICAqICAgICAgaGVyZSBpcyB0aGUgaGludF9tZXRyaWNzIG9wdGlvbnMuCiAgICAg
ICovCiAgICAgaWYgKG9wdGlvbnMtPmFudGlhbGlhcyA9PSBDQUlST19BTlRJQUxJQVNfREVGQVVM
VCkKLQlmLT5xdWFsaXR5ID0gX2dldF9zeXN0ZW1fcXVhbGl0eSAoKTsKKwlmLT5xdWFsaXR5ID0g
X2NhaXJvX3dpbjMyX2dldF9zeXN0ZW1fdGV4dF9xdWFsaXR5ICgpOwogICAgIGVsc2UgewogCXN3
aXRjaCAob3B0aW9ucy0+YW50aWFsaWFzKSB7CiAJY2FzZSBDQUlST19BTlRJQUxJQVNfTk9ORToK
ZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9jYWlyby13aW4zMi1wcmludGluZy1zdXJmYWNlLmMgYi9z
cmMvd2luMzIvY2Fpcm8td2luMzItcHJpbnRpbmctc3VyZmFjZS5jCmluZGV4IGRhNzM1N2NhYS4u
ZTY0NDE3YjRkIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvY2Fpcm8td2luMzItcHJpbnRpbmctc3Vy
ZmFjZS5jCisrKyBiL3NyYy93aW4zMi9jYWlyby13aW4zMi1wcmludGluZy1zdXJmYWNlLmMKQEAg
LTE4MDgsNiArMTgwOCw5IEBAIF9jYWlyb193aW4zMl9wcmludGluZ19zdXJmYWNlX3Nob3dfZ2x5
cGhzICh2b2lkICAgICAgICAgICAgICAgICAqYWJzdHJhY3Rfc3VyZmFjCiAgICAgY2Fpcm9fc29s
aWRfcGF0dGVybl90IGNsZWFyOwogICAgIGNhaXJvX2NvbXBvc2l0ZV9yZWN0YW5nbGVzX3QgZXh0
ZW50czsKICAgICBjYWlyb19ib29sX3Qgb3ZlcmxhcDsKKyNpZiBDQUlST19IQVNfRFdSSVRFX0ZP
TlQKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ICpsb2NhbF9zY2FsZWRfZm9udCA9IE5VTEw7Cisj
ZW5kaWYKIAogICAgIHN0YXR1cyA9IF9jYWlyb19jb21wb3NpdGVfcmVjdGFuZ2xlc19pbml0X2Zv
cl9nbHlwaHMgKCZleHRlbnRzLAogCQkJCQkJCSAgJnN1cmZhY2UtPndpbjMyLmJhc2UsCkBAIC0x
ODUxLDYgKzE4NTQsMTIgQEAgX2NhaXJvX3dpbjMyX3ByaW50aW5nX3N1cmZhY2Vfc2hvd19nbHlw
aHMgKHZvaWQgICAgICAgICAgICAgICAgICphYnN0cmFjdF9zdXJmYWMKIAl9CiAjZW5kaWYKIAor
I2lmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorICAgICAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRf
Z2V0X3R5cGUgKHNjYWxlZF9mb250KSA9PSBDQUlST19GT05UX1RZUEVfRFdSSVRFKSB7CisJICAg
IHJldHVybiBfY2Fpcm9fd2luMzJfcHJpbnRpbmdfc3VyZmFjZV9hbmFseXplX29wZXJhdGlvbiAo
c3VyZmFjZSwgb3AsIHNvdXJjZSwgJmV4dGVudHMuYm91bmRlZCk7CisgICAgICAgIH0KKyNlbmRp
ZgorCiAJLyogRm9yIG5vbiB3aW4zMiBmb250cyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgZWFjaCBn
bHlwaCBoYXMgYQogCSAqIHBhdGggYXZhaWxhYmxlLiBJZiBhIHBhdGggaXMgbm90IGF2YWlsYWJs
ZSwKIAkgKiBfY2Fpcm9fc2NhbGVkX2dseXBoX2xvb2t1cCgpIHdpbGwgcmV0dXJuCkBAIC0xODkw
LDYgKzE4OTksMjMgQEAgX2NhaXJvX3dpbjMyX3ByaW50aW5nX3N1cmZhY2Vfc2hvd19nbHlwaHMg
KHZvaWQgICAgICAgICAgICAgICAgICphYnN0cmFjdF9zdXJmYWMKIAlzb3VyY2UgPSBvcGFxdWU7
CiAgICAgfQogCisjaWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisgICAgLyogRm9yIGEgcHJpbnRl
ciwgdGhlIGR3cml0ZSBwYXRoIGlzIG5vdCBkZXNpcmFibGUgYXMgaXQgZ29lcyB0aHJvdWdoIHRo
ZQorICAgICAqIGJpdG1hcC1ibGl0dGluZyBHREkgaW50ZXJvcCByb3V0ZS4gQmV0dGVyIHRvIGNy
ZWF0ZSBhIHdpbjMyIChHREkpIGZvbnQKKyAgICAgKiBzbyB0aGF0IEV4dFRleHRPdXQgY2FuIGJl
IHVzZWQsIGdpdmluZyB0aGUgcHJpbnRlciBkcml2ZXIgdGhlIGNoYW5jZQorICAgICAqIHRvIGRv
IHRoZSByaWdodCB0aGluZyB3aXRoIHRoZSB0ZXh0LgorICAgICAqLworICAgIGlmIChjYWlyb19z
Y2FsZWRfZm9udF9nZXRfdHlwZSAoc2NhbGVkX2ZvbnQpID09IENBSVJPX0ZPTlRfVFlQRV9EV1JJ
VEUpIHsKKyAgICAgICAgc3RhdHVzID0gX2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9jcmVhdGVf
d2luMzJfc2NhbGVkX2ZvbnQgKHNjYWxlZF9mb250LCAmbG9jYWxfc2NhbGVkX2ZvbnQpOworICAg
ICAgICBpZiAoc3RhdHVzID09IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgICAgICBz
Y2FsZWRfZm9udCA9IGxvY2FsX3NjYWxlZF9mb250OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLyogUmVzZXQgc3RhdHVzOyB3ZSdsbCBmYWxsIGJhY2sgdG8gZHJhd2luZyBnbHlwaHMg
YXMgcGF0aHMgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IENBSVJPX1NUQVRVU19TVUNDRVNTOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICNpZiBDQUlST19IQVNfV0lOMzJfRk9OVAogICAg
IGlmIChjYWlyb19zY2FsZWRfZm9udF9nZXRfdHlwZSAoc2NhbGVkX2ZvbnQpID09IENBSVJPX0ZP
TlRfVFlQRV9XSU4zMiAmJgogCXNvdXJjZS0+dHlwZSA9PSBDQUlST19QQVRURVJOX1RZUEVfU09M
SUQpCkBAIC0xOTQ4LDYgKzE5NzQsMTEgQEAgX2NhaXJvX3dpbjMyX3ByaW50aW5nX3N1cmZhY2Vf
c2hvd19nbHlwaHMgKHZvaWQgICAgICAgICAgICAgICAgICphYnN0cmFjdF9zdXJmYWMKIAogY2xl
YW51cF9jb21wb3NpdGU6CiAgICAgX2NhaXJvX2NvbXBvc2l0ZV9yZWN0YW5nbGVzX2ZpbmkgKCZl
eHRlbnRzKTsKKyNpZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyAgICBpZiAobG9jYWxfc2NhbGVk
X2ZvbnQpCisgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kgKGxvY2FsX3NjYWxlZF9m
b250KTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvc3Jj
L3dpbjMyL2NhaXJvLXdpbjMyLXByaXZhdGUuaCBiL3NyYy93aW4zMi9jYWlyby13aW4zMi1wcml2
YXRlLmgKaW5kZXggODVmODhhOWU4Li5iZTQyODc4ODAgMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi9j
YWlyby13aW4zMi1wcml2YXRlLmgKKysrIGIvc3JjL3dpbjMyL2NhaXJvLXdpbjMyLXByaXZhdGUu
aApAQCAtNDQsNiArNDQsOCBAQAogI2luY2x1ZGUgImNhaXJvLXN1cmZhY2UtY2xpcHBlci1wcml2
YXRlLmgiCiAjaW5jbHVkZSAiY2Fpcm8tc3VyZmFjZS1wcml2YXRlLmgiCiAKK0NBSVJPX0JFR0lO
X0RFQ0xTCisKICNpZm5kZWYgU0hBREVCTEVORENBUFMKICNkZWZpbmUgU0hBREVCTEVORENBUFMg
MTIwCiAjZW5kaWYKQEAgLTI0NSw0ICsyNDcsMjIgQEAgX2NhaXJvX3dpbjMyX3NjYWxlZF9mb250
X2lzX3R5cGUxIChjYWlyb19zY2FsZWRfZm9udF90ICpzY2FsZWRfZm9udCk7CiBjYWlyb19ib29s
X3QKIF9jYWlyb193aW4zMl9zY2FsZWRfZm9udF9pc19iaXRtYXAgKGNhaXJvX3NjYWxlZF9mb250
X3QgKnNjYWxlZF9mb250KTsKIAorQllURSBfY2Fpcm9fd2luMzJfZ2V0X3N5c3RlbV90ZXh0X3F1
YWxpdHkgKHZvaWQpOworCisjaWZkZWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisKK2NhaXJvX2lu
dF9zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9zaG93X2dseXBoc19vbl9zdXJmYWNlKHZvaWQJCQkq
c3VyZmFjZSwKKwkJCQkgICAgIGNhaXJvX29wZXJhdG9yX3QJCSBvcCwKKwkJCQkgICAgIGNvbnN0
IGNhaXJvX3BhdHRlcm5fdAkqc291cmNlLAorCQkJCSAgICAgY2Fpcm9fZ2x5cGhfdAkJKmdseXBo
cywKKwkJCQkgICAgIGludAkJCSBudW1fZ2x5cGhzLAorCQkJCSAgICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfdAkqc2NhbGVkX2ZvbnQpOworCitjYWlyb19pbnRfc3RhdHVzX3QKK19jYWlyb19kd3JpdGVf
c2NhbGVkX2ZvbnRfY3JlYXRlX3dpbjMyX3NjYWxlZF9mb250KGNhaXJvX3NjYWxlZF9mb250X3Qg
KnNjYWxlZF9mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqKm5ld19mb250KTsKKworI2VuZGlmIC8qIENB
SVJPX0hBU19EV1JJVEVfRk9OVCAqLworQ0FJUk9fRU5EX0RFQ0xTCiAjZW5kaWYgLyogQ0FJUk9f
V0lOMzJfUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvY2Fpcm8td2luMzItc3Vy
ZmFjZS5jIGIvc3JjL3dpbjMyL2NhaXJvLXdpbjMyLXN1cmZhY2UuYwppbmRleCBmNzI4NWI5MmUu
LjFmYTEwZmYwZCAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL2NhaXJvLXdpbjMyLXN1cmZhY2UuYwor
KysgYi9zcmMvd2luMzIvY2Fpcm8td2luMzItc3VyZmFjZS5jCkBAIC0yMzUsNiArMjM1LDExIEBA
IF9jYWlyb193aW4zMl9zdXJmYWNlX2VtaXRfZ2x5cGhzIChjYWlyb193aW4zMl9zdXJmYWNlX3Qg
KmRzdCwKICAgICBpbnQgbG9naWNhbF94LCBsb2dpY2FsX3k7CiAgICAgdW5zaWduZWQgaW50IGds
eXBoX2luZGV4X29wdGlvbjsKIAorI2lmZGVmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorICAgIGlm
IChzY2FsZWRfZm9udC0+YmFja2VuZC0+dHlwZSA9PSBDQUlST19GT05UX1RZUEVfRFdSSVRFKQor
ICAgICAgICByZXR1cm4gX2NhaXJvX2R3cml0ZV9zaG93X2dseXBoc19vbl9zdXJmYWNlKGRzdCwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFLCBzb3VyY2UsIGdseXBocywgbnVtX2dseXBocywgc2NhbGVk
X2ZvbnQpOworI2VuZGlmCisKICAgICAvKiBXZSBjYW4gb25seSBoYW5kbGUgd2luMzIgZm9udHMg
Ki8KICAgICBhc3NlcnQgKGNhaXJvX3NjYWxlZF9mb250X2dldF90eXBlIChzY2FsZWRfZm9udCkg
PT0gQ0FJUk9fRk9OVF9UWVBFX1dJTjMyKTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jYWlyby10ZXN0
LXJ1bm5lci5jIGIvdGVzdC9jYWlyby10ZXN0LXJ1bm5lci5jCmluZGV4IGY5ZTdkNDcxMi4uOThk
YjE5MzVlIDEwMDY0NAotLS0gYS90ZXN0L2NhaXJvLXRlc3QtcnVubmVyLmMKKysrIGIvdGVzdC9j
YWlyby10ZXN0LXJ1bm5lci5jCkBAIC02MCw2ICs2MCw4IEBACiAjaW5jbHVkZSA8Y3J0ZGJnLmg+
CiAjZW5kaWYKIAorI2luY2x1ZGUgPG9iamJhc2UuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJv
X3Rlc3RfbGlzdCB7CiAgICAgY29uc3QgY2Fpcm9fdGVzdF90ICp0ZXN0OwogICAgIHN0cnVjdCBf
Y2Fpcm9fdGVzdF9saXN0ICpuZXh0OwpAQCAtNzEwLDYgKzcxMiw3IEBAIG1haW4gKGludCBhcmdj
LCBjaGFyICoqYXJndikKICAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX0VSUk9SLCBfQ1JUREJH
X01PREVfRklMRSk7CiAgICAgX0NydFNldFJlcG9ydEZpbGUoX0NSVF9FUlJPUiwgX0NSVERCR19G
SUxFX1NUREVSUik7CiAjZW5kaWYKKyAgICBDb0luaXRpYWxpemUoTlVMTCk7CiAKICAgICBfY2Fp
cm9fdGVzdF9ydW5uZXJfcmVnaXN0ZXJfdGVzdHMgKCk7CiAgICAgdGVzdHMgPSBfbGlzdF9yZXZl
cnNlICh0ZXN0cyk7CmRpZmYgLS1naXQgYS90ZXN0L2NhaXJvLXRlc3QuaCBiL3Rlc3QvY2Fpcm8t
dGVzdC5oCmluZGV4IDdlOTYwNWY2MS4uZjI2ZDZkMjQzIDEwMDY0NAotLS0gYS90ZXN0L2NhaXJv
LXRlc3QuaAorKysgYi90ZXN0L2NhaXJvLXRlc3QuaApAQCAtMTExLDcgKzExMSwxMSBAQCBjYWly
b190ZXN0X05hTiAodm9pZCkKIAogI2RlZmluZSBDQUlST19URVNUX0xPR19TVUZGSVggIi5sb2ci
CiAKKyNpZiBDQUlST19IQVNfV0lOMzJfRk9OVAorI2RlZmluZSBDQUlST19URVNUX0ZPTlRfRkFN
SUxZICJMdWNpZGEiCisjZWxzZQogI2RlZmluZSBDQUlST19URVNUX0ZPTlRfRkFNSUxZICJEZWph
VnUiCisjZW5kaWYKIAogLyogV2hhdCBpcyBhIGZhaWwgYW5kIHdoYXQgaXNuJ3Q/CiAgKiBXaGVu
IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgd2Ugd2FudCB0byBkZXRlY3QgdW5leHBlY3RlZCBvdXRw
dXQuIFRoaXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406764</attachid>
            <date>2020-08-17 19:59:25 -0700</date>
            <delta_ts>2020-08-31 14:32:42 -0700</delta_ts>
            <desc>Patch for Cairo 1.16</desc>
            <filename>DirectWrite.patch</filename>
            <type>text/plain</type>
            <size>80252</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2J1aWxkL01ha2VmaWxlLndpbjMyLmNvbW1vbiBiL2J1aWxkL01ha2VmaWxl
LndpbjMyLmNvbW1vbgppbmRleCA3ZDdlOTczNWYuLjBjNjljODRhZSAxMDA2NDQKLS0tIGEvYnVp
bGQvTWFrZWZpbGUud2luMzIuY29tbW9uCisrKyBiL2J1aWxkL01ha2VmaWxlLndpbjMyLmNvbW1v
bgpAQCAtMjksNyArMjksNyBAQCBlbmRpZgogUElYTUFOX0NGTEFHUyA6PSAtSSQoUElYTUFOX1BB
VEgpL3BpeG1hbi8KIFBJWE1BTl9MSUJTIDo9ICQoUElYTUFOX1BBVEgpL3BpeG1hbi8kKENGRykv
cGl4bWFuLTEubGliCiAKLUNBSVJPX0xJQlMgPSAgZ2RpMzIubGliIG1zaW1nMzIubGliIHVzZXIz
Mi5saWIKK0NBSVJPX0xJQlMgPSAgZ2RpMzIubGliIG1zaW1nMzIubGliIHVzZXIzMi5saWIgYWR2
YXBpMzIubGliIG9sZTMyLmxpYgogCiBpZmVxICgkKENBSVJPX0hBU19QTkdfRlVOQ1RJT05TKSwx
KQogaWZlcSAoJChMSUJQTkdfUEFUSCksKQpAQCAtNjIsNyArNjIsMTIgQEAgQ0FJUk9fQVJGTEFH
UyA9ICQoREVGQVVMVF9BUkZMQUdTKSAkKExERkxBR1MpCiAKICMgU29tZSBnZW5lcmljIHJ1bGVz
CiAKLSQoQ0ZHKS8lLm9iajogJS5jICQodG9wX3NyY2Rpcikvc3JjL2NhaXJvLWZlYXR1cmVzLmgK
KworJChDRkcpLyUuYy5vYmo6ICUuYyAkKHRvcF9zcmNkaXIpL3NyYy9jYWlyby1mZWF0dXJlcy5o
CisJQG1rZGlyIC1wICQoQ0ZHKS9gZGlybmFtZSAkPGAKKwlAJChDQykgJChDQUlST19DRkxBR1Mp
IC1jIC1GbyIkQCIgJDwKKworJChDRkcpLyUuY3BwLm9iajogJS5jcHAgJCh0b3Bfc3JjZGlyKS9z
cmMvY2Fpcm8tZmVhdHVyZXMuaAogCUBta2RpciAtcCAkKENGRykvYGRpcm5hbWUgJDxgCiAJQCQo
Q0MpICQoQ0FJUk9fQ0ZMQUdTKSAtYyAtRm8iJEAiICQ8CiAKZGlmZiAtLWdpdCBhL2J1aWxkL01h
a2VmaWxlLndpbjMyLmZlYXR1cmVzIGIvYnVpbGQvTWFrZWZpbGUud2luMzIuZmVhdHVyZXMKaW5k
ZXggYjE1YzQ0ODhmLi4wNTJmMWFkYWQgMTAwNjQ0Ci0tLSBhL2J1aWxkL01ha2VmaWxlLndpbjMy
LmZlYXR1cmVzCisrKyBiL2J1aWxkL01ha2VmaWxlLndpbjMyLmZlYXR1cmVzCkBAIC0xMSw2ICsx
MSw3IEBAIENBSVJPX0hBU19RVUFSVFpfRk9OVD0wCiBDQUlST19IQVNfUVVBUlRaX0lNQUdFX1NV
UkZBQ0U9MAogQ0FJUk9fSEFTX1dJTjMyX1NVUkZBQ0U9MQogQ0FJUk9fSEFTX1dJTjMyX0ZPTlQ9
MQorQ0FJUk9fSEFTX0RXUklURV9GT05UPTEKIENBSVJPX0hBU19PUzJfU1VSRkFDRT0wCiBDQUlS
T19IQVNfQkVPU19TVVJGQUNFPTAKIENBSVJPX0hBU19EUk1fU1VSRkFDRT0wCmRpZmYgLS1naXQg
YS9idWlsZC9NYWtlZmlsZS53aW4zMi5mZWF0dXJlcy1oIGIvYnVpbGQvTWFrZWZpbGUud2luMzIu
ZmVhdHVyZXMtaAppbmRleCA1NzU5YjQ4YTMuLmI4NWY5MzhkYiAxMDA2NDQKLS0tIGEvYnVpbGQv
TWFrZWZpbGUud2luMzIuZmVhdHVyZXMtaAorKysgYi9idWlsZC9NYWtlZmlsZS53aW4zMi5mZWF0
dXJlcy1oCkBAIC0zOCw2ICszOCw5IEBAIGVuZGlmCiBpZmVxICgkKENBSVJPX0hBU19XSU4zMl9G
T05UKSwxKQogCUBlY2hvICIjZGVmaW5lIENBSVJPX0hBU19XSU4zMl9GT05UIDEiID4+ICQodG9w
X3NyY2Rpcikvc3JjL2NhaXJvLWZlYXR1cmVzLmgKIGVuZGlmCitpZmVxICgkKENBSVJPX0hBU19E
V1JJVEVfRk9OVCksMSkKKwlAZWNobyAiI2RlZmluZSBDQUlST19IQVNfRFdSSVRFX0ZPTlQgMSIg
Pj4gJCh0b3Bfc3JjZGlyKS9zcmMvY2Fpcm8tZmVhdHVyZXMuaAorZW5kaWYKIGlmZXEgKCQoQ0FJ
Uk9fSEFTX09TMl9TVVJGQUNFKSwxKQogCUBlY2hvICIjZGVmaW5lIENBSVJPX0hBU19PUzJfU1VS
RkFDRSAxIiA+PiAkKHRvcF9zcmNkaXIpL3NyYy9jYWlyby1mZWF0dXJlcy5oCiBlbmRpZgpkaWZm
IC0tZ2l0IGEvc3JjL01ha2VmaWxlLnNvdXJjZXMgYi9zcmMvTWFrZWZpbGUuc291cmNlcwppbmRl
eCAwOTZhM2JjZmEuLjQ5ZDZlZTA2OSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLnNvdXJjZXMK
KysrIGIvc3JjL01ha2VmaWxlLnNvdXJjZXMKQEAgLTM3Myw2ICszNzMsNyBAQCBjYWlyb193aW4z
Ml9zb3VyY2VzID0gXAogCSQoTlVMTCkKIGNhaXJvX3dpbjMyX2ZvbnRfc291cmNlcyA9IFwKIAl3
aW4zMi9jYWlyby13aW4zMi1mb250LmMgXAorCXdpbjMyL2NhaXJvLWR3cml0ZS1mb250LmNwcCBc
CiAJJChOVUxMKQogCiBjYWlyb19vczJfaGVhZGVycyA9IGNhaXJvLW9zMi5oCmRpZmYgLS1naXQg
YS9zcmMvTWFrZWZpbGUud2luMzIgYi9zcmMvTWFrZWZpbGUud2luMzIKaW5kZXggODY0NzkxZjM3
Li5lNzViMjJkMDIgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS53aW4zMgorKysgYi9zcmMvTWFr
ZWZpbGUud2luMzIKQEAgLTYsNyArNiw3IEBAIFNPVVJDRVMgPSAkKGVuYWJsZWRfY2Fpcm9fc291
cmNlcykKIAogU1RBVElDX1NPVVJDRVMgPSBjYWlyby1zeXN0ZW0uYwogCi1PQkpFQ1RTID0gJChw
YXRzdWJzdCAlLmMsICQoQ0ZHKS8lLm9iaiwgJChTT1VSQ0VTKSkKK09CSkVDVFMgPSAkKHBhdHN1
YnN0ICUuY3BwLCAkKENGRykvJS5jcHAub2JqLCAkKHBhdHN1YnN0ICUuYywgJChDRkcpLyUuYy5v
YmosICQoU09VUkNFUykpKQogT0JKRUNUU19TVEFUSUMgPSAkKHBhdHN1YnN0ICVjYWlyby1zeXN0
ZW0ub2JqLCAlY2Fpcm8tc3lzdGVtLXN0YXRpYy5vYmosICQoT0JKRUNUUykpCiAKIHN0YXRpYzog
aW5mb3JtICQoQ0ZHKS9jYWlyby1zdGF0aWMubGliCmRpZmYgLS1naXQgYS9zcmMvY2Fpcm8td2lk
ZWludC10eXBlLXByaXZhdGUuaCBiL3NyYy9jYWlyby13aWRlaW50LXR5cGUtcHJpdmF0ZS5oCmlu
ZGV4IDg0YTNjYmFiMC4uNTU5ZDQzOGRmIDEwMDY0NAotLS0gYS9zcmMvY2Fpcm8td2lkZWludC10
eXBlLXByaXZhdGUuaAorKysgYi9zcmMvY2Fpcm8td2lkZWludC10eXBlLXByaXZhdGUuaApAQCAt
NTAsNiArNTAsNyBAQAogI2VsaWYgSEFWRV9TWVNfSU5UX1RZUEVTX0gKICMgaW5jbHVkZSA8c3lz
L2ludF90eXBlcy5oPgogI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpZiAhZGVmaW5lZChfX2Nw
bHVzcGx1cykKICAgdHlwZWRlZiBfX2ludDggaW50OF90OwogICB0eXBlZGVmIHVuc2lnbmVkIF9f
aW50OCB1aW50OF90OwogICB0eXBlZGVmIF9faW50MTYgaW50MTZfdDsKQEAgLTU4LDYgKzU5LDcg
QEAKICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpbnQzMl90OwogICB0eXBlZGVmIF9faW50
NjQgaW50NjRfdDsKICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OworI2VuZGlm
CiAjIGlmbmRlZiBIQVZFX1VJTlQ2NF9UCiAjICBkZWZpbmUgSEFWRV9VSU5UNjRfVCAxCiAjIGVu
ZGlmCmRpZmYgLS1naXQgYS9zcmMvY2Fpcm8td2luMzIuaCBiL3NyYy9jYWlyby13aW4zMi5oCmlu
ZGV4IGRiNGNhYzY5Zi4uM2MyNWNkYzQzIDEwMDY0NAotLS0gYS9zcmMvY2Fpcm8td2luMzIuaAor
KysgYi9zcmMvY2Fpcm8td2luMzIuaApAQCAtMTA3LDYgKzEwNywzNyBAQCBjYWlyb193aW4zMl9z
Y2FsZWRfZm9udF9nZXRfZGV2aWNlX3RvX2xvZ2ljYWwgKGNhaXJvX3NjYWxlZF9mb250X3QgKnNj
YWxlZF9mb250LAogCiAjZW5kaWYgLyogQ0FJUk9fSEFTX1dJTjMyX0ZPTlQgKi8KIAorI2lmIENB
SVJPX0hBU19EV1JJVEVfRk9OVAorCisvKgorICogV2luMzIgRGlyZWN0V3JpdGUgZm9udCBzdXBw
b3J0CisgKi8KKworc3RydWN0IElEV3JpdGVGb250RmFjZTsKKworY2Fpcm9fcHVibGljIGNhaXJv
X2ZvbnRfZmFjZV90ICoKK2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl9kd3JpdGVf
Zm9udF9mYWNlKHN0cnVjdCBJRFdyaXRlRm9udEZhY2UgKmR3cml0ZV9mb250X2ZhY2UpOworCitj
YWlyb19wdWJsaWMgY2Fpcm9fZm9udF9mYWNlX3QgKgorY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9j
cmVhdGVfZm9yX2hmb250IChIRk9OVCBmb250KTsKKwordm9pZAorY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X2FsbG93X21hbnVhbF9zaG93X2dseXBocyhjYWlyb19zY2FsZWRfZm9udF90ICpkd3Jp
dGVfc2NhbGVkX2ZvbnQsIGNhaXJvX2Jvb2xfdCBhbGxvd2VkKTsKKwordm9pZAorY2Fpcm9fZHdy
aXRlX3NjYWxlZF9mb250X3NldF9mb3JjZV9HRElfY2xhc3NpYyhjYWlyb19zY2FsZWRfZm9udF90
ICpkd3JpdGVfc2NhbGVkX2ZvbnQsIGNhaXJvX2Jvb2xfdCBmb3JjZSk7CisKK2NhaXJvX2Jvb2xf
dAorY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2dldF9mb3JjZV9HRElfY2xhc3NpYyhjYWlyb19z
Y2FsZWRfZm9udF90ICpkd3JpdGVfc2NhbGVkX2ZvbnQpOworCit2b2lkCitjYWlyb19kd3JpdGVf
c2V0X2NsZWFydHlwZV9wYXJhbXMoRkxPQVQgZ2FtbWEsIEZMT0FUIGNvbnRyYXN0LCBGTE9BVCBs
ZXZlbCwgaW50IGdlb21ldHJ5LCBpbnQgbW9kZSk7CisKK2ludAorY2Fpcm9fZHdyaXRlX2dldF9j
bGVhcnR5cGVfcmVuZGVyaW5nX21vZGUoKTsKKworI2VuZGlmIC8qIENBSVJPX0hBU19EV1JJVEVf
Rk9OVCAqLworCiBDQUlST19FTkRfREVDTFMKIAogI2Vsc2UgIC8qIENBSVJPX0hBU19XSU4zMl9T
VVJGQUNFICovCmRpZmYgLS1naXQgYS9zcmMvY2Fpcm8uaCBiL3NyYy9jYWlyby5oCmluZGV4IDM0
OTJiZGM2Yi4uZDA4YWU2NzdlIDEwMDY0NAotLS0gYS9zcmMvY2Fpcm8uaAorKysgYi9zcmMvY2Fp
cm8uaApAQCAtMTU3Myw2ICsxNTczLDcgQEAgdHlwZWRlZiBlbnVtIF9jYWlyb19mb250X3R5cGUg
ewogICAgIENBSVJPX0ZPTlRfVFlQRV9UT1ksCiAgICAgQ0FJUk9fRk9OVF9UWVBFX0ZULAogICAg
IENBSVJPX0ZPTlRfVFlQRV9XSU4zMiwKKyAgICBDQUlST19GT05UX1RZUEVfRFdSSVRFLAogICAg
IENBSVJPX0ZPTlRfVFlQRV9RVUFSVFosCiAgICAgQ0FJUk9fRk9OVF9UWVBFX1VTRVIKIH0gY2Fp
cm9fZm9udF90eXBlX3Q7CmRpZmYgLS1naXQgYS9zcmMvY2Fpcm9pbnQuaCBiL3NyYy9jYWlyb2lu
dC5oCmluZGV4IGNmYWUxOGNmOS4uZjU2NTQxMTFkIDEwMDY0NAotLS0gYS9zcmMvY2Fpcm9pbnQu
aAorKysgYi9zcmMvY2Fpcm9pbnQuaApAQCAtNjYxLDYgKzY2MSwxMiBAQCBleHRlcm4gY29uc3Qg
Y2Fpcm9fcHJpdmF0ZSBzdHJ1Y3QgX2NhaXJvX2ZvbnRfZmFjZV9iYWNrZW5kIF9jYWlyb193aW4z
Ml9mb250X2ZhYwogCiAjZW5kaWYKIAorI2lmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorCitleHRl
cm4gY29uc3QgY2Fpcm9fcHJpdmF0ZSBzdHJ1Y3QgX2NhaXJvX2ZvbnRfZmFjZV9iYWNrZW5kIF9j
YWlyb19kd3JpdGVfZm9udF9mYWNlX2JhY2tlbmQ7CisKKyNlbmRpZgorCiAjaWYgQ0FJUk9fSEFT
X1FVQVJUWl9GT05UCiAKIGV4dGVybiBjb25zdCBjYWlyb19wcml2YXRlIHN0cnVjdCBfY2Fpcm9f
Zm9udF9mYWNlX2JhY2tlbmQgX2NhaXJvX3F1YXJ0el9mb250X2ZhY2VfYmFja2VuZDsKQEAgLTY5
Myw3ICs2OTksMTIgQEAgc3RydWN0IF9jYWlyb19zdXJmYWNlX2F0dHJpYnV0ZXMgewogI2RlZmlu
ZSBDQUlST19GVF9GT05UX0ZBTUlMWV9ERUZBVUxUICAgICAiIgogI2RlZmluZSBDQUlST19VU0VS
X0ZPTlRfRkFNSUxZX0RFRkFVTFQgICAgICJAY2Fpcm86IgogCi0jaWYgICBDQUlST19IQVNfV0lO
MzJfRk9OVAorI2lmICAgQ0FJUk9fSEFTX0RXUklURV9GT05UCisKKyNkZWZpbmUgQ0FJUk9fRk9O
VF9GQU1JTFlfREVGQVVMVCBDQUlST19XSU4zMl9GT05UX0ZBTUlMWV9ERUZBVUxUCisjZGVmaW5l
IENBSVJPX0ZPTlRfRkFDRV9CQUNLRU5EX0RFRkFVTFQgJl9jYWlyb19kd3JpdGVfZm9udF9mYWNl
X2JhY2tlbmQKKworI2VsaWYgQ0FJUk9fSEFTX1dJTjMyX0ZPTlQKIAogI2RlZmluZSBDQUlST19G
T05UX0ZBTUlMWV9ERUZBVUxUIENBSVJPX1dJTjMyX0ZPTlRfRkFNSUxZX0RFRkFVTFQKICNkZWZp
bmUgQ0FJUk9fRk9OVF9GQUNFX0JBQ0tFTkRfREVGQVVMVCAmX2NhaXJvX3dpbjMyX2ZvbnRfZmFj
ZV9iYWNrZW5kCkBAIC0xOTEwLDcgKzE5MjEsNyBAQCBjYWlyb19wcml2YXRlIGludAogX2NhaXJv
X3VjczRfdG9fdXRmMTYgKHVpbnQzMl90ICAgIHVuaWNvZGUsCiAJCSAgICAgIHVpbnQxNl90ICAg
KnV0ZjE2KTsKIAotI2lmIENBSVJPX0hBU19XSU4zMl9GT05UIHx8IENBSVJPX0hBU19RVUFSVFpf
Rk9OVCB8fCBDQUlST19IQVNfUERGX09QRVJBVE9SUworI2lmIENBSVJPX0hBU19XSU4zMl9GT05U
IHx8IENBSVJPX0hBU19EV1JJVEVfRk9OVCB8fCBDQUlST19IQVNfUVVBUlRaX0ZPTlQgfHwgQ0FJ
Uk9fSEFTX1BERl9PUEVSQVRPUlMKICMgZGVmaW5lIENBSVJPX0hBU19VVEY4X1RPX1VURjE2IDEK
ICNlbmRpZgogI2lmIENBSVJPX0hBU19VVEY4X1RPX1VURjE2CmRpZmYgLS1naXQgYS9zcmMvd2lu
MzIvY2Fpcm8tZHdyaXRlLWZvbnQuY3BwIGIvc3JjL3dpbjMyL2NhaXJvLWR3cml0ZS1mb250LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjU2YTJlYWUwMAotLS0gL2Rl
di9udWxsCisrKyBiL3NyYy93aW4zMi9jYWlyby1kd3JpdGUtZm9udC5jcHAKQEAgLTAsMCArMSwx
NTk2IEBACisvKiAtKi0gTW9kZTogYzsgdGFiLXdpZHRoOiA4OyBjLWJhc2ljLW9mZnNldDogNDsg
aW5kZW50LXRhYnMtbW9kZTogdDsgLSotICovCisvKiBDYWlybyAtIGEgdmVjdG9yIGdyYXBoaWNz
IGxpYnJhcnkgd2l0aCBkaXNwbGF5IGFuZCBwcmludCBvdXRwdXQKKyAqCisgKiBDb3B5cmlnaHQg
wqkgMjAxMCBNb3ppbGxhIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgZWl0
aGVyIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbgorICogKHRoZSAiTEdQTCIpIG9yLCBhdCB5b3VyIG9wdGlvbiwgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBNb3ppbGxhCisgKiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJN
UEwiKS4gSWYgeW91IGRvIG5vdCBhbHRlciB0aGlzCisgKiBub3RpY2UsIGEgcmVjaXBpZW50IG1h
eSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIKKyAqIHRoZSBNUEwg
b3IgdGhlIExHUEwuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgTEdQTCBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeQorICogaW4gdGhlIGZpbGUgQ09QWUlORy1M
R1BMLTIuMTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NyBVU0EKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIE1QTCBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeQorICogaW4gdGhlIGZpbGUgQ09QWUlORy1NUEwtMS4xCisgKgor
ICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQ
dWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLworICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWQorICogT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTEdQTCBvciB0aGUgTVBMIGZvcgorICogdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zLgorICoK
KyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBjYWlybyBncmFwaGljcyBsaWJyYXJ5LgorICoK
KyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTW96
aWxsYSBGb3VuZGF0aW9uCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKglCYXMgU2Nob3V0ZW4g
PGJzY2hvdXRlbkBtb3ppbGxhLmNvbT4KKyAqLworCisjaW5jbHVkZSAiY2Fpcm9pbnQuaCIKKwor
I2luY2x1ZGUgImNhaXJvLXdpbjMyLXByaXZhdGUuaCIKKyNpbmNsdWRlICJjYWlyby1pbWFnZS1z
dXJmYWNlLXByaXZhdGUuaCIKKyNpbmNsdWRlICJjYWlyby1jbGlwLXByaXZhdGUuaCIKKyNpbmNs
dWRlICJjYWlyby13aW4zMi1yZWZwdHIuaCIKKyNpbmNsdWRlICJjYWlyby1wYXR0ZXJuLXByaXZh
dGUuaCIKKworI2luY2x1ZGUgImNhaXJvLWR3cml0ZS1wcml2YXRlLmgiCisjaW5jbHVkZSAiY2Fp
cm8tdHJ1ZXR5cGUtc3Vic2V0LXByaXZhdGUuaCIKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaWZu
ZGVmIENMRUFSVFlQRV9RVUFMSVRZCisjZGVmaW5lIENMRUFSVFlQRV9RVUFMSVRZIDUKKyNlbmRp
ZgorCit0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpEMkQxQ3JlYXRlRmFjdG9yeUZ1bmMpKAorICAg
IEQyRDFfRkFDVE9SWV9UWVBFIGZhY3RvcnlUeXBlLAorICAgIFJFRklJRCBpaWQsCisgICAgQ09O
U1QgRDJEMV9GQUNUT1JZX09QVElPTlMgKnBGYWN0b3J5T3B0aW9ucywKKyAgICB2b2lkICoqZmFj
dG9yeQorKTsKKworI2RlZmluZSBDQUlST19JTlRfU1RBVFVTX1NVQ0NFU1MgKGNhaXJvX2ludF9z
dGF0dXNfdClDQUlST19TVEFUVVNfU1VDQ0VTUworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucwor
Y2Fpcm9faW50X3N0YXR1c190CitfZHdyaXRlX2RyYXdfZ2x5cGhzX3RvX2dkaV9zdXJmYWNlX2Qy
ZChjYWlyb193aW4zMl9zdXJmYWNlX3QgKnN1cmZhY2UsCisJCQkJICAgICAgIERXUklURV9NQVRS
SVggKnRyYW5zZm9ybSwKKwkJCQkgICAgICAgRFdSSVRFX0dMWVBIX1JVTiAqcnVuLAorCQkJCSAg
ICAgICBDT0xPUlJFRiBjb2xvciwKKwkJCQkgICAgICAgY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250
X3QgKnNjYWxlZF9mb250LAorCQkJCSAgICAgICBjb25zdCBSRUNUICZhcmVhKTsKKworY2Fpcm9f
aW50X3N0YXR1c190CitfZHdyaXRlX2RyYXdfZ2x5cGhzX3RvX2dkaV9zdXJmYWNlX2dkaShjYWly
b193aW4zMl9zdXJmYWNlX3QgKnN1cmZhY2UsCisJCQkJICAgICAgIERXUklURV9NQVRSSVggKnRy
YW5zZm9ybSwKKwkJCQkgICAgICAgRFdSSVRFX0dMWVBIX1JVTiAqcnVuLAorCQkJCSAgICAgICBD
T0xPUlJFRiBjb2xvciwKKwkJCQkgICAgICAgY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKnNj
YWxlZF9mb250LAorCQkJCSAgICAgICBjb25zdCBSRUNUICZhcmVhKTsKKworY2xhc3MgRDJERmFj
dG9yeQoreworcHVibGljOgorICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkgKkluc3RhbmNlKCkKKyAg
ICB7CisJaWYgKCFtRmFjdG9yeUluc3RhbmNlKSB7CisJICAgIEQyRDFDcmVhdGVGYWN0b3J5RnVu
YyBjcmVhdGVEMkRGYWN0b3J5ID0gKEQyRDFDcmVhdGVGYWN0b3J5RnVuYykKKwkJR2V0UHJvY0Fk
ZHJlc3MoTG9hZExpYnJhcnlXKEwiZDJkMS5kbGwiKSwgIkQyRDFDcmVhdGVGYWN0b3J5Iik7CisJ
ICAgIGlmIChjcmVhdGVEMkRGYWN0b3J5KSB7CisJCUQyRDFfRkFDVE9SWV9PUFRJT05TIG9wdGlv
bnM7CisJCW9wdGlvbnMuZGVidWdMZXZlbCA9IEQyRDFfREVCVUdfTEVWRUxfTk9ORTsKKwkJY3Jl
YXRlRDJERmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9TSU5HTEVfVEhSRUFERUQsCisJCQkJIF9f
dXVpZG9mKElEMkQxRmFjdG9yeSksCisJCQkJICZvcHRpb25zLAorCQkJCSAodm9pZCoqKSZtRmFj
dG9yeUluc3RhbmNlKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gbUZhY3RvcnlJbnN0YW5jZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSUQyRDFEQ1JlbmRlclRhcmdldCAqUmVuZGVyVGFyZ2V0KCkKKyAg
ICB7CisJaWYgKCFtUmVuZGVyVGFyZ2V0KSB7CisJICAgIGlmICghSW5zdGFuY2UoKSkgeworCQly
ZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0Lgor
CSAgICBEMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUyBwcm9wcyA9IEQyRDE6OlJlbmRlclRh
cmdldFByb3BlcnRpZXMoCisJCUQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCisJCUQy
RDE6OlBpeGVsRm9ybWF0KAorCQkgICAgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sCisJCSAg
ICBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCksCisJCTAsCisJCTAsCisJCUQyRDFfUkVO
REVSX1RBUkdFVF9VU0FHRV9OT05FLAorCQlEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVMVAorCQkp
OworCisJICAgIEluc3RhbmNlKCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZwcm9wcywgJm1SZW5k
ZXJUYXJnZXQpOworCX0KKwlyZXR1cm4gbVJlbmRlclRhcmdldDsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIElEMkQxRmFjdG9yeSAqbUZhY3RvcnlJbnN0YW5jZTsKKyAgICBzdGF0aWMg
SUQyRDFEQ1JlbmRlclRhcmdldCAqbVJlbmRlclRhcmdldDsKK307CisKK0lEV3JpdGVGYWN0b3J5
ICpEV3JpdGVGYWN0b3J5OjptRmFjdG9yeUluc3RhbmNlID0gTlVMTDsKK0lEV3JpdGVGb250Q29s
bGVjdGlvbiAqRFdyaXRlRmFjdG9yeTo6bVN5c3RlbUNvbGxlY3Rpb24gPSBOVUxMOworSURXcml0
ZVJlbmRlcmluZ1BhcmFtcyAqRFdyaXRlRmFjdG9yeTo6bURlZmF1bHRSZW5kZXJpbmdQYXJhbXMg
PSBOVUxMOworSURXcml0ZVJlbmRlcmluZ1BhcmFtcyAqRFdyaXRlRmFjdG9yeTo6bUN1c3RvbUNs
ZWFyVHlwZVJlbmRlcmluZ1BhcmFtcyA9IE5VTEw7CitJRFdyaXRlUmVuZGVyaW5nUGFyYW1zICpE
V3JpdGVGYWN0b3J5OjptRm9yY2VHRElDbGFzc2ljUmVuZGVyaW5nUGFyYW1zID0gTlVMTDsKK0ZM
T0FUIERXcml0ZUZhY3Rvcnk6Om1HYW1tYSA9IC0xLjA7CitGTE9BVCBEV3JpdGVGYWN0b3J5Ojpt
RW5oYW5jZWRDb250cmFzdCA9IC0xLjA7CitGTE9BVCBEV3JpdGVGYWN0b3J5OjptQ2xlYXJUeXBl
TGV2ZWwgPSAtMS4wOworaW50IERXcml0ZUZhY3Rvcnk6Om1QaXhlbEdlb21ldHJ5ID0gLTE7Citp
bnQgRFdyaXRlRmFjdG9yeTo6bVJlbmRlcmluZ01vZGUgPSAtMTsKKworSUQyRDFGYWN0b3J5ICpE
MkRGYWN0b3J5OjptRmFjdG9yeUluc3RhbmNlID0gTlVMTDsKK0lEMkQxRENSZW5kZXJUYXJnZXQg
KkQyREZhY3Rvcnk6Om1SZW5kZXJUYXJnZXQgPSBOVUxMOworCisvKiBGdW5jdGlvbnMgY2Fpcm9f
Zm9udF9mYWNlX2JhY2tlbmRfdCAqLworc3RhdGljIGNhaXJvX3N0YXR1c190CitfY2Fpcm9fZHdy
aXRlX2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3RveSAoY2Fpcm9fdG95X2ZvbnRfZmFjZV90ICAgKnRv
eV9mYWNlLAorCQkJCQljYWlyb19mb250X2ZhY2VfdCAgICAgICoqZm9udF9mYWNlKTsKK3N0YXRp
YyBjYWlyb19ib29sX3QKK19jYWlyb19kd3JpdGVfZm9udF9mYWNlX2Rlc3Ryb3kgKHZvaWQgKmZv
bnRfZmFjZSk7CisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9mb250X2Zh
Y2Vfc2NhbGVkX2ZvbnRfY3JlYXRlICh2b2lkCQkJKmFic3RyYWN0X2ZhY2UsCisJCQkJCSAgICBj
b25zdCBjYWlyb19tYXRyaXhfdAkqZm9udF9tYXRyaXgsCisJCQkJCSAgICBjb25zdCBjYWlyb19t
YXRyaXhfdAkqY3RtLAorCQkJCQkgICAgY29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QgKm9wdGlv
bnMsCisJCQkJCSAgICBjYWlyb19zY2FsZWRfZm9udF90ICoqZm9udCk7CisKK2NvbnN0IGNhaXJv
X2ZvbnRfZmFjZV9iYWNrZW5kX3QgX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfYmFja2VuZCA9IHsK
KyAgICBDQUlST19GT05UX1RZUEVfRFdSSVRFLAorICAgIF9jYWlyb19kd3JpdGVfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfdG95LAorICAgIF9jYWlyb19kd3JpdGVfZm9udF9mYWNlX2Rlc3Ryb3ksCisg
ICAgX2NhaXJvX2R3cml0ZV9mb250X2ZhY2Vfc2NhbGVkX2ZvbnRfY3JlYXRlCit9OworCisvKiBG
dW5jdGlvbnMgY2Fpcm9fc2NhbGVkX2ZvbnRfYmFja2VuZF90ICovCisKK3ZvaWQgX2NhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF9maW5pKHZvaWQgKnNjYWxlZF9mb250KTsKKworc3RhdGljIGNhaXJv
X3dhcm4gY2Fpcm9faW50X3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX3NjYWxlZF9nbHlwaF9pbml0
KHZvaWQJCQkgICAgICpzY2FsZWRfZm9udCwKKwkJCQljYWlyb19zY2FsZWRfZ2x5cGhfdAkgICAg
ICpzY2FsZWRfZ2x5cGgsCisJCQkJY2Fpcm9fc2NhbGVkX2dseXBoX2luZm9fdCAgICBpbmZvKTsK
KworY2Fpcm9fd2FybiBjYWlyb19pbnRfc3RhdHVzX3QKK19jYWlyb19kd3JpdGVfc2NhbGVkX3No
b3dfZ2x5cGhzKHZvaWQJCQkqc2NhbGVkX2ZvbnQsCisJCQkJIGNhaXJvX29wZXJhdG9yX3QJIG9w
LAorCQkJCSBjb25zdCBjYWlyb19wYXR0ZXJuX3QJKnBhdHRlcm4sCisJCQkJIGNhaXJvX3N1cmZh
Y2VfdAkqc3VyZmFjZSwKKwkJCQkgaW50CQkJIHNvdXJjZV94LAorCQkJCSBpbnQJCQkgc291cmNl
X3ksCisJCQkJIGludAkJCSBkZXN0X3gsCisJCQkJIGludAkJCSBkZXN0X3ksCisJCQkJIHVuc2ln
bmVkIGludAkJIHdpZHRoLAorCQkJCSB1bnNpZ25lZCBpbnQJCSBoZWlnaHQsCisJCQkJIGNhaXJv
X2dseXBoX3QJCSpnbHlwaHMsCisJCQkJIGludAkJCSBudW1fZ2x5cGhzLAorCQkJCSBjYWlyb19y
ZWdpb25fdAkJKmNsaXBfcmVnaW9uLAorCQkJCSBpbnQJCQkqcmVtYWluaW5nX2dseXBocyk7CisK
K2NhaXJvX2ludF9zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9sb2FkX3RydWV0eXBlX3RhYmxlKHZv
aWQJCSAgICAgICAqc2NhbGVkX2ZvbnQsCisJCQkJICB1bnNpZ25lZCBsb25nICAgICAgICAgdGFn
LAorCQkJCSAgbG9uZyAgICAgICAgICAgICAgICAgIG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGNo
YXIgICAgICAgICpidWZmZXIsCisJCQkJICB1bnNpZ25lZCBsb25nICAgICAgICAqbGVuZ3RoKTsK
KwordW5zaWduZWQgbG9uZworX2NhaXJvX2R3cml0ZV91Y3M0X3RvX2luZGV4KHZvaWQJCQkgICAg
ICpzY2FsZWRfZm9udCwKKwkJCSAgICB1aW50MzJfdAkJCXVjczQpOworCisKK2NhaXJvX2Jvb2xf
dAorX2NhaXJvX2R3cml0ZV9oYXNfY29sb3JfZ2x5cGhzKHZvaWQJKnNjYWxlZF9mb250KTsKKwor
Y29uc3QgY2Fpcm9fc2NhbGVkX2ZvbnRfYmFja2VuZF90IF9jYWlyb19kd3JpdGVfc2NhbGVkX2Zv
bnRfYmFja2VuZCA9IHsKKyAgICBDQUlST19GT05UX1RZUEVfRFdSSVRFLAorICAgIF9jYWlyb19k
d3JpdGVfc2NhbGVkX2ZvbnRfZmluaSwKKyAgICBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9nbHlwaF9p
bml0LAorICAgIE5VTEwsCisgICAgX2NhaXJvX2R3cml0ZV91Y3M0X3RvX2luZGV4LAorICAgIF9j
YWlyb19kd3JpdGVfbG9hZF90cnVldHlwZV90YWJsZSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisg
ICAgTlVMTCwKKyAgICBOVUxMLAorICAgIF9jYWlyb19kd3JpdGVfaGFzX2NvbG9yX2dseXBocywK
K307CisKKy8qIEhlbHBlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIEdldCBh
IEQyRCBtYXRyaXggZnJvbSBhIGNhaXJvIG1hdHJpeC4gTm90ZSB0aGF0IEQyRCB1c2VzIHJvdyB2
ZWN0b3JzIHdoZXJlIGNhaXJvCisgKiB1c2VzIGNvbHVtbiB2ZWN0b3JzLiBIZW5jZSB0aGUgdHJh
bnNwb3NpdGlvbi4KKyAqCisgKiBccGFyYW0gQ2Fpcm8gbWF0cml4CisgKiBccmV0dXJuIEQyRCBt
YXRyaXgKKyAqLworc3RhdGljIEQyRDE6Ok1hdHJpeDN4MkYKK19jYWlyb19kMmRfbWF0cml4X2Zy
b21fbWF0cml4KGNvbnN0IGNhaXJvX21hdHJpeF90ICptYXRyaXgpCit7CisgICAgcmV0dXJuIEQy
RDE6Ok1hdHJpeDN4MkYoKEZMT0FUKW1hdHJpeC0+eHgsCisJCQkgICAgKEZMT0FUKW1hdHJpeC0+
eXgsCisJCQkgICAgKEZMT0FUKW1hdHJpeC0+eHksCisJCQkgICAgKEZMT0FUKW1hdHJpeC0+eXks
CisJCQkgICAgKEZMT0FUKW1hdHJpeC0+eDAsCisJCQkgICAgKEZMT0FUKW1hdHJpeC0+eTApOwor
fQorCisKKy8qKgorICogR2V0IGEgRGlyZWN0V3JpdGUgbWF0cml4IGZyb20gYSBjYWlybyBtYXRy
aXguIE5vdGUgdGhhdCBEaXJlY3RXcml0ZSB1c2VzIHJvdworICogdmVjdG9ycyB3aGVyZSBjYWly
byB1c2VzIGNvbHVtbiB2ZWN0b3JzLiBIZW5jZSB0aGUgdHJhbnNwb3NpdGlvbi4KKyAqCisgKiBc
cGFyYW0gQ2Fpcm8gbWF0cml4CisgKiBccmV0dXJuIERpcmVjdFdyaXRlIG1hdHJpeAorICovCitE
V1JJVEVfTUFUUklYCitfY2Fpcm9fZHdyaXRlX21hdHJpeF9mcm9tX21hdHJpeChjb25zdCBjYWly
b19tYXRyaXhfdCAqbWF0cml4KQoreworICAgIERXUklURV9NQVRSSVggZHdtYXQ7CisgICAgZHdt
YXQubTExID0gKEZMT0FUKW1hdHJpeC0+eHg7CisgICAgZHdtYXQubTEyID0gKEZMT0FUKW1hdHJp
eC0+eXg7CisgICAgZHdtYXQubTIxID0gKEZMT0FUKW1hdHJpeC0+eHk7CisgICAgZHdtYXQubTIy
ID0gKEZMT0FUKW1hdHJpeC0+eXk7CisgICAgZHdtYXQuZHggPSAoRkxPQVQpbWF0cml4LT54MDsK
KyAgICBkd21hdC5keSA9IChGTE9BVCltYXRyaXgtPnkwOworICAgIHJldHVybiBkd21hdDsKK30K
KworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2Fpcm9fZHdyaXRlX3NjYWxlZF9nbHlwaF9pbml0
ICovCitjYWlyb19pbnRfc3RhdHVzX3QgCitfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2luaXRf
Z2x5cGhfbWV0cmljcyAKKyAgICAoY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKnNjYWxlZF9m
b250LCBjYWlyb19zY2FsZWRfZ2x5cGhfdCAqc2NhbGVkX2dseXBoKTsKKworY2Fpcm9faW50X3N0
YXR1c190IAorX2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9pbml0X2dseXBoX3N1cmZhY2UKKyAg
ICAoY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QgKnNjYWxlZF9mb250LCBjYWlyb19zY2FsZWRf
Z2x5cGhfdCAqc2NhbGVkX2dseXBoKTsKKworY2Fpcm9faW50X3N0YXR1c190IAorX2NhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF9pbml0X2dseXBoX3BhdGgKKyAgICAoY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X3QgKnNjYWxlZF9mb250LCBjYWlyb19zY2FsZWRfZ2x5cGhfdCAqc2NhbGVkX2dseXBo
KTsKKworLyogaW1wbGVtZW50IHRoZSBmb250IGJhY2tlbmQgaW50ZXJmYWNlICovCisKK3N0YXRp
YyBjYWlyb19zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl90b3kg
KGNhaXJvX3RveV9mb250X2ZhY2VfdCAgICp0b3lfZmFjZSwKKwkJCQkJY2Fpcm9fZm9udF9mYWNl
X3QgICAgICAqKmZvbnRfZmFjZSkKK3sKKyAgICBXQ0hBUiAqZmFjZV9uYW1lOworICAgIGludCBm
YWNlX25hbWVfbGVuOworCisgICAgaWYgKCFEV3JpdGVGYWN0b3J5OjpJbnN0YW5jZSgpKSB7CisJ
cmV0dXJuIChjYWlyb19zdGF0dXNfdClDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworICAg
IH0KKworICAgIGZhY2VfbmFtZV9sZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAs
IHRveV9mYWNlLT5mYW1pbHksIC0xLCBOVUxMLCAwKTsKKyAgICBmYWNlX25hbWUgPSBuZXcgV0NI
QVJbZmFjZV9uYW1lX2xlbl07CisgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCB0
b3lfZmFjZS0+ZmFtaWx5LCAtMSwgZmFjZV9uYW1lLCBmYWNlX25hbWVfbGVuKTsKKworICAgIElE
V3JpdGVGb250RmFtaWx5ICpmYW1pbHkgPSBEV3JpdGVGYWN0b3J5OjpGaW5kU3lzdGVtRm9udEZh
bWlseShmYWNlX25hbWUpOworICAgIGRlbGV0ZSBmYWNlX25hbWU7CisgICAgaWYgKCFmYW1pbHkp
IHsKKwkqZm9udF9mYWNlID0gKGNhaXJvX2ZvbnRfZmFjZV90KikmX2NhaXJvX2ZvbnRfZmFjZV9u
aWw7CisJcmV0dXJuIENBSVJPX1NUQVRVU19GT05UX1RZUEVfTUlTTUFUQ0g7CisgICAgfQorCisg
ICAgRFdSSVRFX0ZPTlRfV0VJR0hUIHdlaWdodDsKKyAgICBzd2l0Y2ggKHRveV9mYWNlLT53ZWln
aHQpIHsKKyAgICBjYXNlIENBSVJPX0ZPTlRfV0VJR0hUX0JPTEQ6CisJd2VpZ2h0ID0gRFdSSVRF
X0ZPTlRfV0VJR0hUX0JPTEQ7CisJYnJlYWs7CisgICAgY2FzZSBDQUlST19GT05UX1dFSUdIVF9O
T1JNQUw6CisgICAgZGVmYXVsdDoKKwl3ZWlnaHQgPSBEV1JJVEVfRk9OVF9XRUlHSFRfTk9STUFM
OworCWJyZWFrOworICAgIH0KKworICAgIERXUklURV9GT05UX1NUWUxFIHN0eWxlOworICAgIHN3
aXRjaCAodG95X2ZhY2UtPnNsYW50KSB7CisgICAgY2FzZSBDQUlST19GT05UX1NMQU5UX0lUQUxJ
QzoKKwlzdHlsZSA9IERXUklURV9GT05UX1NUWUxFX0lUQUxJQzsKKwlicmVhazsKKyAgICBjYXNl
IENBSVJPX0ZPTlRfU0xBTlRfT0JMSVFVRToKKwlzdHlsZSA9IERXUklURV9GT05UX1NUWUxFX09C
TElRVUU7CisJYnJlYWs7CisgICAgY2FzZSBDQUlST19GT05UX1NMQU5UX05PUk1BTDoKKyAgICBk
ZWZhdWx0OgorCXN0eWxlID0gRFdSSVRFX0ZPTlRfU1RZTEVfTk9STUFMOworCWJyZWFrOworICAg
IH0KKworICAgIElEV3JpdGVGb250KiBkd2ZvbnQ7CisgICAgSURXcml0ZUZvbnRGYWNlKiBkd2Zh
Y2U7CisgICAgSFJFU1VMVCBociA9IGZhbWlseS0+R2V0Rmlyc3RNYXRjaGluZ0ZvbnQod2VpZ2h0
LCBEV1JJVEVfRk9OVF9TVFJFVENIX05PUk1BTCwgc3R5bGUsICZkd2ZvbnQpOworICAgIGlmIChG
QUlMRUQoaHIpKQorCXJldHVybiBDQUlST19TVEFUVVNfRk9OVF9UWVBFX01JU01BVENIOworCisg
ICAgaHIgPSBkd2ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZkd2ZhY2UpOworICAgIGlmIChGQUlMRUQo
aHIpKQorCXJldHVybiBDQUlST19TVEFUVVNfRk9OVF9UWVBFX01JU01BVENIOworCisgICAgLy8g
Q2Fubm90IHVzZSBDKysgc3R5bGUgbmV3IHNpbmNlIGNhaXJvIGRlYWxsb2NhdGVzIHRoaXMuCisg
ICAgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90KiBmYWNlID0gKGNhaXJvX2R3cml0ZV9mb250X2Zh
Y2VfdCopIG1hbGxvYyhzaXplb2YoY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90KSk7CisgICAgKmZv
bnRfZmFjZSA9IChjYWlyb19mb250X2ZhY2VfdCopZmFjZTsKKyAgICBmYWNlLT5mb250ID0gZHdm
b250OworICAgIGZhY2UtPmR3cml0ZWZhY2UgPSBkd2ZhY2U7CisgICAgX2NhaXJvX2ZvbnRfZmFj
ZV9pbml0ICgmKCooX2NhaXJvX2R3cml0ZV9mb250X2ZhY2UqKilmb250X2ZhY2UpLT5iYXNlLCAm
X2NhaXJvX2R3cml0ZV9mb250X2ZhY2VfYmFja2VuZCk7CisgICAgcmV0dXJuIENBSVJPX1NUQVRV
U19TVUNDRVNTOworfQorCitzdGF0aWMgY2Fpcm9fYm9vbF90CitfY2Fpcm9fZHdyaXRlX2ZvbnRf
ZmFjZV9kZXN0cm95ICh2b2lkICpmb250X2ZhY2UpCit7CisgICAgY2Fpcm9fZHdyaXRlX2ZvbnRf
ZmFjZV90ICpkd3JpdGVfZm9udF9mYWNlID0gc3RhdGljX2Nhc3Q8Y2Fpcm9fZHdyaXRlX2ZvbnRf
ZmFjZV90Kj4oZm9udF9mYWNlKTsKKyAgICBpZiAoZHdyaXRlX2ZvbnRfZmFjZS0+ZHdyaXRlZmFj
ZSkKKwlkd3JpdGVfZm9udF9mYWNlLT5kd3JpdGVmYWNlLT5SZWxlYXNlKCk7CisgICAgaWYgKGR3
cml0ZV9mb250X2ZhY2UtPmZvbnQpCisJZHdyaXRlX2ZvbnRfZmFjZS0+Zm9udC0+UmVsZWFzZSgp
OworICAgIHJldHVybiBUUlVFOworfQorCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQK
K3JlYWRfc2hvcnQoY29uc3QgY2hhciAqYnVmKQoreworICAgIHJldHVybiBiZTE2X3RvX2NwdSgq
KHVuc2lnbmVkIHNob3J0KilidWYpOworfQorCit2b2lkCitfY2Fpcm9fZHdyaXRlX2dseXBoX3J1
bl9mcm9tX2dseXBocyhjYWlyb19nbHlwaF90ICpnbHlwaHMsCisJCQkJICAgIGludCBudW1fZ2x5
cGhzLAorCQkJCSAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsCisJ
CQkJICAgIEF1dG9EV3JpdGVHbHlwaFJ1biAqcnVuLAorCQkJCSAgICBjYWlyb19ib29sX3QgKnRy
YW5zZm9ybWVkKQoreworICAgIHJ1bi0+YWxsb2NhdGUobnVtX2dseXBocyk7CisKKyAgICBVSU5U
MTYgKmluZGljZXMgPSBjb25zdF9jYXN0PFVJTlQxNio+KHJ1bi0+Z2x5cGhJbmRpY2VzKTsKKyAg
ICBGTE9BVCAqYWR2YW5jZXMgPSBjb25zdF9jYXN0PEZMT0FUKj4ocnVuLT5nbHlwaEFkdmFuY2Vz
KTsKKyAgICBEV1JJVEVfR0xZUEhfT0ZGU0VUICpvZmZzZXRzID0gY29uc3RfY2FzdDxEV1JJVEVf
R0xZUEhfT0ZGU0VUKj4ocnVuLT5nbHlwaE9mZnNldHMpOworCisgICAgY2Fpcm9fZHdyaXRlX2Zv
bnRfZmFjZV90ICpkd3JpdGVmZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZHdyaXRlX2ZvbnRf
ZmFjZV90Kj4oc2NhbGVkX2ZvbnQtPmJhc2UuZm9udF9mYWNlKTsKKworICAgIHJ1bi0+YmlkaUxl
dmVsID0gMDsKKyAgICBydW4tPmZvbnRGYWNlID0gZHdyaXRlZmYtPmR3cml0ZWZhY2U7CisgICAg
cnVuLT5nbHlwaENvdW50ID0gbnVtX2dseXBoczsKKyAgICBydW4tPmlzU2lkZXdheXMgPSBGQUxT
RTsKKworICAgIGlmIChzY2FsZWRfZm9udC0+bWF0Lnh5ID09IDAgJiYgc2NhbGVkX2ZvbnQtPm1h
dC55eCA9PSAwICYmCisJc2NhbGVkX2ZvbnQtPm1hdC54eCA9PSBzY2FsZWRfZm9udC0+YmFzZS5m
b250X21hdHJpeC54eCAmJiAKKwlzY2FsZWRfZm9udC0+bWF0Lnl5ID09IHNjYWxlZF9mb250LT5i
YXNlLmZvbnRfbWF0cml4Lnl5KSB7CisJLy8gRmFzdCByb3V0ZSwgZG9uJ3QgYWN0dWFsbHkgdXNl
IGEgdHJhbnNmb3JtIGJ1dCBqdXN0CisJLy8gc2V0IHRoZSBjb3JyZWN0IGZvbnQgc2l6ZS4KKwkq
dHJhbnNmb3JtZWQgPSAwOworCisJcnVuLT5mb250RW1TaXplID0gKEZMT0FUKXNjYWxlZF9mb250
LT5iYXNlLmZvbnRfbWF0cml4Lnl5OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhz
OyBpKyspIHsKKwkgICAgaW5kaWNlc1tpXSA9IChXT1JEKSBnbHlwaHNbaV0uaW5kZXg7CisKKwkg
ICAgb2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IC0oRkxPQVQpKGdseXBoc1tpXS55KTsKKwkg
ICAgb2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gKEZMT0FUKShnbHlwaHNbaV0ueCk7CisJICAg
IGFkdmFuY2VzW2ldID0gMC4wOworCX0KKyAgICB9IGVsc2UgeworCSp0cmFuc2Zvcm1lZCA9IDE7
CisgICAgICAgIC8vIFRyYW5zZm9ybWluZyBwb3NpdGlvbnMgYnkgdGhlIGludmVyc2UgbWF0cml4
LCB0aGVuIGJ5IHRoZSBvcmlnaW5hbAorICAgICAgICAvLyBtYXRyaXggbGF0ZXIgbWF5IGludHJv
ZHVjZSBzbWFsbCBlcnJvcnMsIGVzcGVjaWFsbHkgYmVjYXVzZSB0aGUKKyAgICAgICAgLy8gRDJE
IG1hdHJpeCBpcyBzaW5nbGUtcHJlY2lzaW9uIHdoZXJlYXMgdGhlIGNhaXJvIG9uZSBpcyBkb3Vi
bGUuCisgICAgICAgIC8vIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gZ2x5cGggcG9zaXRpb25zIHdl
cmUgb3JpZ2luYWxseSBhdCBleGFjdGx5CisgICAgICAgIC8vIGhhbGYtcGl4ZWwgbG9jYXRpb25z
LCB3aGljaCBldmVudHVhbGx5IHJvdW5kIHRvIHdob2xlIHBpeGVscyBmb3IKKyAgICAgICAgLy8g
R0RJIHJlbmRlcmluZyAtIHRoZSBlcnJvcnMgaW50cm9kdWNlZCBoZXJlIGNhdXNlIHRoZW0gdG8g
cm91bmQgaW4KKyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBkaXJlY3Rpb25zLCBpbnN0ZWFkIG9m
IGFsbCByb3VuZGluZyBpbiBhIGNvbnNpc3RlbnQKKyAgICAgICAgLy8gd2F5LCBsZWFkaW5nIHRv
IHBvb3IgZ2x5cGggc3BhY2luZyAoYnVnIDY3NTM4MykuCisgICAgICAgIC8vIFRvIG1pdGlnYXRl
IHRoaXMsIG51ZGdlIHRoZSBwb3NpdGlvbnMgYnkgYSB0aW55IGFtb3VudCB0byB0cnkgYW5kCisg
ICAgICAgIC8vIGVuc3VyZSB0aGF0IGFmdGVyIHRoZSB0d28gdHJhbnNmb3JtcywgdGhleSdsbCBz
dGlsbCByb3VuZCBpbiBhCisgICAgICAgIC8vIGNvbnNpc3RlbnQgZGlyZWN0aW9uLgorICAgICAg
ICBjb25zdCBkb3VibGUgRVBTSUxPTiA9IDAuMDAwMTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG51
bV9nbHlwaHM7IGkrKykgeworCSAgICBpbmRpY2VzW2ldID0gKFdPUkQpIGdseXBoc1tpXS5pbmRl
eDsKKwkgICAgZG91YmxlIHggPSBnbHlwaHNbaV0ueCArIEVQU0lMT047CisJICAgIGRvdWJsZSB5
ID0gZ2x5cGhzW2ldLnk7CisJICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJnNjYWxl
ZF9mb250LT5tYXRfaW52ZXJzZSwgJngsICZ5KTsKKwkgICAgLy8gU2luY2Ugd2Ugd2lsbCBtdWx0
aXBseSBieSBvdXIgY3RtIG1hdHJpeCBsYXRlciBmb3Igcm90YXRpb24gZWZmZWN0cworCSAgICAv
LyBhbmQgc3VjaCwgYWRqdXN0IHBvc2l0aW9ucyBieSB0aGUgaW52ZXJzZSBtYXRyaXggbm93LiBZ
LWF4aXMgaXMKKwkgICAgLy8gaW52ZXJ0ZWQhIFRoZXJlZm9yIHRoZSBvZmZzZXQgaXMgLXkuCisJ
ICAgIG9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSAtKEZMT0FUKXk7CisJICAgIG9mZnNldHNb
aV0uYWR2YW5jZU9mZnNldCA9IChGTE9BVCl4OworCSAgICBhZHZhbmNlc1tpXSA9IDAuMDsKKwl9
CisJLy8gVGhlIGZvbnQgbWF0cml4IHRha2VzIGNhcmUgb2YgdGhlIHNjYWxpbmcgaWYgd2UgaGF2
ZSBhIHRyYW5zZm9ybSwKKwkvLyBlbVNpemUgc2hvdWxkIGJlIDEuCisJcnVuLT5mb250RW1TaXpl
ID0gMS4wZjsKKyAgICB9Cit9CisKKyNkZWZpbmUgR0FTUF9UQUcgMHg3MDczNjE2NworI2RlZmlu
ZSBHQVNQX0RPR1JBWSAweDIKKworc3RhdGljIGNhaXJvX2Jvb2xfdAorZG9fZ3JheXNjYWxlKElE
V3JpdGVGb250RmFjZSAqZHdmYWNlLCB1bnNpZ25lZCBpbnQgcHBlbSkKK3sKKyAgICB2b2lkICp0
YWJsZUNvbnRleHQ7CisgICAgY2hhciAqdGFibGVEYXRhOworICAgIFVJTlQzMiB0YWJsZVNpemU7
CisgICAgQk9PTCBleGlzdHM7CisgICAgZHdmYWNlLT5UcnlHZXRGb250VGFibGUoR0FTUF9UQUcs
IChjb25zdCB2b2lkKiopJnRhYmxlRGF0YSwgJnRhYmxlU2l6ZSwgJnRhYmxlQ29udGV4dCwgJmV4
aXN0cyk7CisKKyAgICBpZiAoZXhpc3RzKSB7CisJaWYgKHRhYmxlU2l6ZSA8IDQpIHsKKwkgICAg
ZHdmYWNlLT5SZWxlYXNlRm9udFRhYmxlKHRhYmxlQ29udGV4dCk7CisJICAgIHJldHVybiB0cnVl
OworCX0KKwlzdHJ1Y3QgZ2FzcFJhbmdlIHsKKwkgICAgdW5zaWduZWQgc2hvcnQgbWF4UFBFTTsg
Ly8gU3RvcmVkIGJpZy1lbmRpYW4KKwkgICAgdW5zaWduZWQgc2hvcnQgYmVoYXZpb3I7IC8vIFN0
b3JlZCBiaWctZW5kaWFuCisJfTsKKwl1bnNpZ25lZCBzaG9ydCBudW1SYW5nZXMgPSByZWFkX3No
b3J0KHRhYmxlRGF0YSArIDIpOworCWlmICh0YWJsZVNpemUgPCAoVUlOVCk0ICsgbnVtUmFuZ2Vz
ICogNCkgeworCSAgICBkd2ZhY2UtPlJlbGVhc2VGb250VGFibGUodGFibGVDb250ZXh0KTsKKwkg
ICAgcmV0dXJuIHRydWU7CisJfQorCWdhc3BSYW5nZSAqcmFuZ2VzID0gKGdhc3BSYW5nZSAqKSh0
YWJsZURhdGEgKyA0KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bVJhbmdlczsgaSsrKSB7CisJ
ICAgIGlmIChiZTE2X3RvX2NwdShyYW5nZXNbaV0ubWF4UFBFTSkgPiBwcGVtKSB7CisJCWlmICgh
KGJlMTZfdG9fY3B1KHJhbmdlc1tpXS5iZWhhdmlvcikgJiBHQVNQX0RPR1JBWSkpIHsKKwkJICAg
IGR3ZmFjZS0+UmVsZWFzZUZvbnRUYWJsZSh0YWJsZUNvbnRleHQpOworCQkgICAgcmV0dXJuIGZh
bHNlOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorCWR3ZmFjZS0+UmVsZWFzZUZvbnRUYWJs
ZSh0YWJsZUNvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNh
aXJvX3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9zY2FsZWRfZm9udF9jcmVhdGUg
KHZvaWQJCQkqYWJzdHJhY3RfZmFjZSwKKwkJCQkJICAgIGNvbnN0IGNhaXJvX21hdHJpeF90CSpm
b250X21hdHJpeCwKKwkJCQkJICAgIGNvbnN0IGNhaXJvX21hdHJpeF90CSpjdG0sCisJCQkJCSAg
ICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCAgKm9wdGlvbnMsCisJCQkJCSAgICBjYWlyb19z
Y2FsZWRfZm9udF90ICoqZm9udCkKK3sKKyAgICBjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QgKmZv
bnRfZmFjZSA9IHN0YXRpY19jYXN0PGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfdCo+KGFic3RyYWN0
X2ZhY2UpOworCisgICAgLy8gTXVzdCBkbyBtYWxsb2MgYW5kIG5vdCBDKysgbmV3LCBzaW5jZSBD
YWlybyBmcmVlcyB0aGlzLgorICAgIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90ICpkd3JpdGVG
b250ID0gKGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90KiltYWxsb2Moc2l6ZW9mKGNhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF90KSk7CisgICAgKmZvbnQgPSByZWludGVycHJldF9jYXN0PGNhaXJv
X3NjYWxlZF9mb250X3QqPihkd3JpdGVGb250KTsKKyAgICBfY2Fpcm9fc2NhbGVkX2ZvbnRfaW5p
dCgmZHdyaXRlRm9udC0+YmFzZSwgJmZvbnRfZmFjZS0+YmFzZSwgZm9udF9tYXRyaXgsIGN0bSwg
b3B0aW9ucywgJl9jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfYmFja2VuZCk7CisKKyAgICBjYWly
b19mb250X2V4dGVudHNfdCBleHRlbnRzOworCisgICAgRFdSSVRFX0ZPTlRfTUVUUklDUyBtZXRy
aWNzOworICAgIGZvbnRfZmFjZS0+ZHdyaXRlZmFjZS0+R2V0TWV0cmljcygmbWV0cmljcyk7CisK
KyAgICBleHRlbnRzLmFzY2VudCA9IChGTE9BVCltZXRyaWNzLmFzY2VudCAvIG1ldHJpY3MuZGVz
aWduVW5pdHNQZXJFbTsKKyAgICBleHRlbnRzLmRlc2NlbnQgPSAoRkxPQVQpbWV0cmljcy5kZXNj
ZW50IC8gbWV0cmljcy5kZXNpZ25Vbml0c1BlckVtOworICAgIGV4dGVudHMuaGVpZ2h0ID0gKEZM
T0FUKShtZXRyaWNzLmFzY2VudCArIG1ldHJpY3MuZGVzY2VudCArIG1ldHJpY3MubGluZUdhcCkg
LyBtZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07CisgICAgZXh0ZW50cy5tYXhfeF9hZHZhbmNlID0g
MTQuMDsKKyAgICBleHRlbnRzLm1heF95X2FkdmFuY2UgPSAwLjA7CisKKyAgICBkd3JpdGVGb250
LT5tYXQgPSBkd3JpdGVGb250LT5iYXNlLmN0bTsKKyAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHko
JmR3cml0ZUZvbnQtPm1hdCwgJmR3cml0ZUZvbnQtPm1hdCwgZm9udF9tYXRyaXgpOworICAgIGR3
cml0ZUZvbnQtPm1hdF9pbnZlcnNlID0gZHdyaXRlRm9udC0+bWF0OworICAgIGNhaXJvX21hdHJp
eF9pbnZlcnQgKCZkd3JpdGVGb250LT5tYXRfaW52ZXJzZSk7CisKKyAgICBjYWlyb19hbnRpYWxp
YXNfdCBkZWZhdWx0X3F1YWxpdHkgPSBDQUlST19BTlRJQUxJQVNfU1VCUElYRUw7CisKKyAgICBk
d3JpdGVGb250LT5tZWFzdXJpbmdfbW9kZSA9IERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFM
OworCisgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGRldGVjdHMgdGhlIHN5c3RlbSBxdWFsaXR5
IGF0IHNjYWxlZF9mb250IGNyZWF0aW9uIHRpbWUsCisgICAgLy8gdGhpcyBtZWFucyB0aGF0IGlm
IGNsZWFydHlwZSBzZXR0aW5ncyBhcmUgY2hhbmdlZCBidXQgdGhlIHNjYWxlZF9mb250cworICAg
IC8vIGFyZSByZS11c2VkLCB0aGV5IG1pZ2h0IG5vdCBhZGhlcmUgdG8gdGhlIG5ldyBzeXN0ZW0g
c2V0dGluZyB1bnRpbCByZS0KKyAgICAvLyBjcmVhdGlvbi4KKyAgICBzd2l0Y2ggKF9jYWlyb193
aW4zMl9nZXRfc3lzdGVtX3RleHRfcXVhbGl0eSgpKSB7CisJY2FzZSBDTEVBUlRZUEVfUVVBTElU
WToKKwkgICAgZGVmYXVsdF9xdWFsaXR5ID0gQ0FJUk9fQU5USUFMSUFTX1NVQlBJWEVMOworCSAg
ICBicmVhazsKKwljYXNlIEFOVElBTElBU0VEX1FVQUxJVFk6CisJICAgIGRlZmF1bHRfcXVhbGl0
eSA9IENBSVJPX0FOVElBTElBU19HUkFZOworCSAgICBkd3JpdGVGb250LT5tZWFzdXJpbmdfbW9k
ZSA9IERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfQ0xBU1NJQzsKKwkgICAgYnJlYWs7CisJY2Fz
ZSBERUZBVUxUX1FVQUxJVFk6CisJICAgIC8vIF9jYWlyb193aW4zMl9nZXRfc3lzdGVtX3RleHRf
cXVhbGl0eSgpIHNlZW1zIHRvIHRoaW5rIGFsaWFzZWQgaXMgZGVmYXVsdCEKKwkgICAgZGVmYXVs
dF9xdWFsaXR5ID0gQ0FJUk9fQU5USUFMSUFTX05PTkU7CisJICAgIGR3cml0ZUZvbnQtPm1lYXN1
cmluZ19tb2RlID0gRFdSSVRFX01FQVNVUklOR19NT0RFX0dESV9DTEFTU0lDOworCSAgICBicmVh
azsKKyAgICB9CisKKyAgICBpZiAoZGVmYXVsdF9xdWFsaXR5ID09IENBSVJPX0FOVElBTElBU19H
UkFZKSB7CisJaWYgKCFkb19ncmF5c2NhbGUoZm9udF9mYWNlLT5kd3JpdGVmYWNlLCAodW5zaWdu
ZWQgaW50KV9jYWlyb19yb3VuZChmb250X21hdHJpeC0+eXkpKSkgeworCSAgICBkZWZhdWx0X3F1
YWxpdHkgPSBDQUlST19BTlRJQUxJQVNfTk9ORTsKKwl9CisgICAgfQorCisgICAgaWYgKG9wdGlv
bnMtPmFudGlhbGlhcyA9PSBDQUlST19BTlRJQUxJQVNfREVGQVVMVCkgeworCWR3cml0ZUZvbnQt
PmFudGlhbGlhc19tb2RlID0gZGVmYXVsdF9xdWFsaXR5OworICAgIH0gZWxzZSB7CisJZHdyaXRl
Rm9udC0+YW50aWFsaWFzX21vZGUgPSBvcHRpb25zLT5hbnRpYWxpYXM7CisgICAgfQorCisgICAg
ZHdyaXRlRm9udC0+bWFudWFsX3Nob3dfZ2x5cGhzX2FsbG93ZWQgPSBUUlVFOworICAgIGR3cml0
ZUZvbnQtPnJlbmRlcmluZ19tb2RlID0KKyAgICAgICAgZGVmYXVsdF9xdWFsaXR5ID09IENBSVJP
X0FOVElBTElBU19TVUJQSVhFTCA/CisgICAgICAgICAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2Zv
bnRfdDo6VEVYVF9SRU5ERVJJTkdfTk9STUFMIDogY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3Q6
OlRFWFRfUkVOREVSSU5HX05PX0NMRUFSVFlQRTsKKworICAgIHJldHVybiBfY2Fpcm9fc2NhbGVk
X2ZvbnRfc2V0X21ldHJpY3MgKCpmb250LCAmZXh0ZW50cyk7Cit9CisKKy8qIEltcGxlbWVudGF0
aW9uIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9iYWNrZW5kX3QgKi8KK3ZvaWQKK19jYWlyb19k
d3JpdGVfc2NhbGVkX2ZvbnRfZmluaSh2b2lkICpzY2FsZWRfZm9udCkKK3sKK30KKworc3RhdGlj
IGNhaXJvX2ludF9zdGF0dXNfdAorX2NhaXJvX2R3cml0ZV9zY2FsZWRfZ2x5cGhfaW5pdCh2b2lk
CQkJICAgICAqc2NhbGVkX2ZvbnQsCisJCQkJY2Fpcm9fc2NhbGVkX2dseXBoX3QJICAgICAqc2Nh
bGVkX2dseXBoLAorCQkJCWNhaXJvX3NjYWxlZF9nbHlwaF9pbmZvX3QgICAgaW5mbykKK3sKKyAg
ICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2R3cml0ZV9mb250ID0gc3RhdGlj
X2Nhc3Q8Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QqPihzY2FsZWRfZm9udCk7CisgICAgY2Fp
cm9faW50X3N0YXR1c190IHN0YXR1czsKKworICAgIGlmICgoaW5mbyAmIENBSVJPX1NDQUxFRF9H
TFlQSF9JTkZPX01FVFJJQ1MpICE9IDApIHsKKwlzdGF0dXMgPSBfY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X2luaXRfZ2x5cGhfbWV0cmljcyAoc2NhbGVkX2R3cml0ZV9mb250LCBzY2FsZWRfZ2x5
cGgpOworCWlmIChzdGF0dXMpCisJICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYg
KGluZm8gJiBDQUlST19TQ0FMRURfR0xZUEhfSU5GT19TVVJGQUNFKSB7CisJc3RhdHVzID0gX2Nh
aXJvX2R3cml0ZV9zY2FsZWRfZm9udF9pbml0X2dseXBoX3N1cmZhY2UgKHNjYWxlZF9kd3JpdGVf
Zm9udCwgc2NhbGVkX2dseXBoKTsKKwlpZiAoc3RhdHVzKQorCSAgICByZXR1cm4gc3RhdHVzOwor
ICAgIH0KKworICAgIGlmICgoaW5mbyAmIENBSVJPX1NDQUxFRF9HTFlQSF9JTkZPX1BBVEgpICE9
IDApIHsKKwlzdGF0dXMgPSBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2luaXRfZ2x5cGhfcGF0
aCAoc2NhbGVkX2R3cml0ZV9mb250LCBzY2FsZWRfZ2x5cGgpOworCWlmIChzdGF0dXMpCisJICAg
IHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIENBSVJPX0lOVF9TVEFUVVNfU1VD
Q0VTUzsKK30KKwordW5zaWduZWQgbG9uZworX2NhaXJvX2R3cml0ZV91Y3M0X3RvX2luZGV4KHZv
aWQJCQkgICAgICpzY2FsZWRfZm9udCwKKwkJCSAgICB1aW50MzJfdAkJICAgICAgdWNzNCkKK3sK
KyAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqZHdyaXRlc2YgPSBzdGF0aWNfY2FzdDxj
YWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCo+KHNjYWxlZF9mb250KTsKKyAgICBjYWlyb19kd3Jp
dGVfZm9udF9mYWNlX3QgKmZhY2UgPSByZWludGVycHJldF9jYXN0PGNhaXJvX2R3cml0ZV9mb250
X2ZhY2VfdCo+KGR3cml0ZXNmLT5iYXNlLmZvbnRfZmFjZSk7CisKKyAgICBVSU5UMTYgaW5kZXg7
CisgICAgZmFjZS0+ZHdyaXRlZmFjZS0+R2V0R2x5cGhJbmRpY2VzQSgmdWNzNCwgMSwgJmluZGV4
KTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKKy8qIGNhaXJvX2R3cml0ZV9zY2FsZWRfZ2x5cGhf
aW5pdCBoZWxwZXIgZnVuY3Rpb24gYm9kaWVzICovCitjYWlyb19pbnRfc3RhdHVzX3QgCitfY2Fp
cm9fZHdyaXRlX3NjYWxlZF9mb250X2luaXRfZ2x5cGhfbWV0cmljcyhjYWlyb19kd3JpdGVfc2Nh
bGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsIAorCQkJCQkgICAgIGNhaXJvX3NjYWxlZF9nbHlwaF90
ICpzY2FsZWRfZ2x5cGgpCit7CisgICAgVUlOVDE2IGNoYXJJbmRleCA9IChVSU5UMTYpX2NhaXJv
X3NjYWxlZF9nbHlwaF9pbmRleCAoc2NhbGVkX2dseXBoKTsKKyAgICBjYWlyb19kd3JpdGVfZm9u
dF9mYWNlX3QgKmZvbnRfZmFjZSA9IChjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QqKXNjYWxlZF9m
b250LT5iYXNlLmZvbnRfZmFjZTsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwor
CisgICAgRFdSSVRFX0dMWVBIX01FVFJJQ1MgbWV0cmljczsKKyAgICBEV1JJVEVfRk9OVF9NRVRS
SUNTIGZvbnRNZXRyaWNzOworICAgIGZvbnRfZmFjZS0+ZHdyaXRlZmFjZS0+R2V0TWV0cmljcygm
Zm9udE1ldHJpY3MpOworICAgIEhSRVNVTFQgaHIgPSBmb250X2ZhY2UtPmR3cml0ZWZhY2UtPkdl
dERlc2lnbkdseXBoTWV0cmljcygmY2hhckluZGV4LCAxLCAmbWV0cmljcyk7CisgICAgaWYgKEZB
SUxFRChocikpIHsKKwlyZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9
CisKKyAgICAvLyBUT0RPOiBUcmVhdCBzd2FwX3h5LgorICAgIGV4dGVudHMud2lkdGggPSAoRkxP
QVQpKG1ldHJpY3MuYWR2YW5jZVdpZHRoIC0gbWV0cmljcy5sZWZ0U2lkZUJlYXJpbmcgLSBtZXRy
aWNzLnJpZ2h0U2lkZUJlYXJpbmcpIC8KKwlmb250TWV0cmljcy5kZXNpZ25Vbml0c1BlckVtOwor
ICAgIGV4dGVudHMuaGVpZ2h0ID0gKEZMT0FUKShtZXRyaWNzLmFkdmFuY2VIZWlnaHQgLSBtZXRy
aWNzLnRvcFNpZGVCZWFyaW5nIC0gbWV0cmljcy5ib3R0b21TaWRlQmVhcmluZykgLworCWZvbnRN
ZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07CisgICAgZXh0ZW50cy54X2FkdmFuY2UgPSAoRkxPQVQp
bWV0cmljcy5hZHZhbmNlV2lkdGggLyBmb250TWV0cmljcy5kZXNpZ25Vbml0c1BlckVtOworICAg
IGV4dGVudHMueF9iZWFyaW5nID0gKEZMT0FUKW1ldHJpY3MubGVmdFNpZGVCZWFyaW5nIC8gZm9u
dE1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbTsKKyAgICBleHRlbnRzLnlfYWR2YW5jZSA9IDAuMDsK
KyAgICBleHRlbnRzLnlfYmVhcmluZyA9IChGTE9BVCkobWV0cmljcy50b3BTaWRlQmVhcmluZyAt
IG1ldHJpY3MudmVydGljYWxPcmlnaW5ZKSAvCisJZm9udE1ldHJpY3MuZGVzaWduVW5pdHNQZXJF
bTsKKworICAgIC8vIFdlIHBhZCB0aGUgZXh0ZW50cyBoZXJlIGJlY2F1c2UgR2V0RGVzaWduR2x5
cGhNZXRyaWNzIHJldHVybnMgImlkZWFsIiBtZXRyaWNzCisgICAgLy8gZm9yIHRoZSBnbHlwaCBv
dXRsaW5lLCB3aXRob3V0IGFjY291bnRpbmcgZm9yIGhpbnRpbmcvZ3JpZGZpdHRpbmcvYW50aWFs
aWFzaW5nLAorICAgIC8vIGFuZCB0aGVyZWZvcmUgaXQgZG9lcyBub3QgYWx3YXlzIGNvdmVyIGFs
bCBwaXhlbHMgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIHRvdWNoZWQuCisgICAgaWYgKHNjYWxlZF9m
b250LT5iYXNlLm9wdGlvbnMuYW50aWFsaWFzICE9IENBSVJPX0FOVElBTElBU19OT05FICYmCisJ
ZXh0ZW50cy53aWR0aCA+IDAgJiYgZXh0ZW50cy5oZWlnaHQgPiAwKSB7CisJZXh0ZW50cy53aWR0
aCArPSBzY2FsZWRfZm9udC0+bWF0X2ludmVyc2UueHggKiAyOworCWV4dGVudHMueF9iZWFyaW5n
IC09IHNjYWxlZF9mb250LT5tYXRfaW52ZXJzZS54eDsKKyAgICB9CisKKyAgICBfY2Fpcm9fc2Nh
bGVkX2dseXBoX3NldF9tZXRyaWNzIChzY2FsZWRfZ2x5cGgsCisJCQkJICAgICAmc2NhbGVkX2Zv
bnQtPmJhc2UsCisJCQkJICAgICAmZXh0ZW50cyk7CisgICAgcmV0dXJuIENBSVJPX0lOVF9TVEFU
VVNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBTdGFjay1iYXNlZCBoZWxwZXIgaW1wbGVtZW50aW5n
IElEV3JpdGVHZW9tZXRyeVNpbmsuCisgKiBVc2VkIHRvIGRldGVybWluZSB0aGUgcGF0aCBvZiB0
aGUgZ2x5cGhzLgorICovCisKK2NsYXNzIEdlb21ldHJ5UmVjb3JkZXIgOiBwdWJsaWMgSURXcml0
ZUdlb21ldHJ5U2luaworeworcHVibGljOgorICAgIEdlb21ldHJ5UmVjb3JkZXIoY2Fpcm9fcGF0
aF9maXhlZF90ICphQ2Fpcm9QYXRoKSAKKwk6IG1DYWlyb1BhdGgoYUNhaXJvUGF0aCkge30KKwor
ICAgIC8vIElVbmtub3duIGludGVyZmFjZQorICAgIElGQUNFTUVUSE9EKFF1ZXJ5SW50ZXJmYWNl
KShJSUQgY29uc3QmIGlpZCwgT1VUIHZvaWQqKiBwcE9iamVjdCkKKyAgICB7CisJaWYgKGlpZCAh
PSBfX3V1aWRvZihJRFdyaXRlR2VvbWV0cnlTaW5rKSkKKwkgICAgcmV0dXJuIEVfTk9JTlRFUkZB
Q0U7CisKKwkqcHBPYmplY3QgPSBzdGF0aWNfY2FzdDxJRFdyaXRlR2VvbWV0cnlTaW5rKj4odGhp
cyk7CisKKwlyZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBJRkFDRU1FVEhPRF8oVUxPTkcsIEFk
ZFJlZikoKQorICAgIHsKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgICBJRkFDRU1FVEhPRF8oVUxP
TkcsIFJlbGVhc2UpKCkKKyAgICB7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgSUZBQ0VNRVRI
T0RJTVBfKHZvaWQpIFNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFIGZpbGxNb2RlKQorICAgIHsK
KwlyZXR1cm47CisgICAgfQorCisgICAgU1RETUVUSE9ESU1QIENsb3NlKCkKKyAgICB7CisJcmV0
dXJuIFNfT0s7CisgICAgfQorCisgICAgSUZBQ0VNRVRIT0RJTVBfKHZvaWQpIFNldFNlZ21lbnRG
bGFncyhEMkQxX1BBVEhfU0VHTUVOVCB2ZXJ0ZXhGbGFncykKKyAgICB7CisJcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBjYWlyb19maXhlZF90IEdldEZpeGVkWChjb25zdCBEMkQxX1BPSU5UXzJG
ICZwb2ludCkKKyAgICB7CisjaWZkZWYgX01fSVg4NgorCXVuc2lnbmVkIGludCBjb250cm9sX3dv
cmQ7CisJX2NvbnRyb2xmcF9zKCZjb250cm9sX3dvcmQsIF9DV19ERUZBVUxULCBNQ1dfUEMpOwor
I2VuZGlmCisJcmV0dXJuIF9jYWlyb19maXhlZF9mcm9tX2RvdWJsZShwb2ludC54KTsKKyAgICB9
CisKKyAgICBjYWlyb19maXhlZF90IEdldEZpeGVkWShjb25zdCBEMkQxX1BPSU5UXzJGICZwb2lu
dCkKKyAgICB7CisjaWZkZWYgX01fSVg4NgorCXVuc2lnbmVkIGludCBjb250cm9sX3dvcmQ7CisJ
X2NvbnRyb2xmcF9zKCZjb250cm9sX3dvcmQsIF9DV19ERUZBVUxULCBNQ1dfUEMpOworI2VuZGlm
CisJcmV0dXJuIF9jYWlyb19maXhlZF9mcm9tX2RvdWJsZShwb2ludC55KTsKKyAgICB9CisKKyAg
ICBJRkFDRU1FVEhPRElNUF8odm9pZCkgQmVnaW5GaWd1cmUoCisJRDJEMV9QT0lOVF8yRiBzdGFy
dFBvaW50LCAKKwlEMkQxX0ZJR1VSRV9CRUdJTiBmaWd1cmVCZWdpbikgCisgICAgeworCW1TdGFy
dFBvaW50ID0gc3RhcnRQb2ludDsKKwljYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBfY2Fpcm9fcGF0
aF9maXhlZF9tb3ZlX3RvKG1DYWlyb1BhdGgsIAorCQkJCQkJCSAgR2V0Rml4ZWRYKHN0YXJ0UG9p
bnQpLAorCQkJCQkJCSAgR2V0Rml4ZWRZKHN0YXJ0UG9pbnQpKTsKKyAgICB9CisKKyAgICBJRkFD
RU1FVEhPRElNUF8odm9pZCkgRW5kRmlndXJlKCAgICAKKwlEMkQxX0ZJR1VSRV9FTkQgZmlndXJl
RW5kKSAKKyAgICB7CisJaWYgKGZpZ3VyZUVuZCA9PSBEMkQxX0ZJR1VSRV9FTkRfQ0xPU0VEKSB7
CisJICAgIGNhaXJvX3N0YXR1c190IHN0YXR1cyA9IF9jYWlyb19wYXRoX2ZpeGVkX2xpbmVfdG8o
bUNhaXJvUGF0aCwKKwkJCQkJCQkgICAgICBHZXRGaXhlZFgobVN0YXJ0UG9pbnQpLCAKKwkJCQkJ
CQkgICAgICBHZXRGaXhlZFkobVN0YXJ0UG9pbnQpKTsKKwl9CisgICAgfQorCisgICAgSUZBQ0VN
RVRIT0RJTVBfKHZvaWQpIEFkZEJlemllcnMoCisJY29uc3QgRDJEMV9CRVpJRVJfU0VHTUVOVCAq
YmV6aWVycywKKwlVSU5UIGJlemllcnNDb3VudCkKKyAgICB7CisJZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBiZXppZXJzQ291bnQ7IGkrKykgeworCSAgICBjYWlyb19zdGF0dXNfdCBzdGF0
dXMgPSBfY2Fpcm9fcGF0aF9maXhlZF9jdXJ2ZV90byhtQ2Fpcm9QYXRoLAorCQkJCQkJCSAgICAg
ICBHZXRGaXhlZFgoYmV6aWVyc1tpXS5wb2ludDEpLAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFko
YmV6aWVyc1tpXS5wb2ludDEpLAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFgoYmV6aWVyc1tpXS5w
b2ludDIpLAorCQkJCQkJCSAgICAgICBHZXRGaXhlZFkoYmV6aWVyc1tpXS5wb2ludDIpLAorCQkJ
CQkJCSAgICAgICBHZXRGaXhlZFgoYmV6aWVyc1tpXS5wb2ludDMpLAorCQkJCQkJCSAgICAgICBH
ZXRGaXhlZFkoYmV6aWVyc1tpXS5wb2ludDMpKTsKKwl9CQorICAgIH0KKworICAgIElGQUNFTUVU
SE9ESU1QXyh2b2lkKSBBZGRMaW5lcygKKwljb25zdCBEMkQxX1BPSU5UXzJGICpwb2ludHMsCisJ
VUlOVCBwb2ludHNDb3VudCkKKyAgICB7CisJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBw
b2ludHNDb3VudDsgaSsrKSB7CisJICAgIGNhaXJvX3N0YXR1c190IHN0YXR1cyA9IF9jYWlyb19w
YXRoX2ZpeGVkX2xpbmVfdG8obUNhaXJvUGF0aCwgCisJCUdldEZpeGVkWChwb2ludHNbaV0pLCAK
KwkJR2V0Rml4ZWRZKHBvaW50c1tpXSkpOworCX0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgY2Fp
cm9fcGF0aF9maXhlZF90ICptQ2Fpcm9QYXRoOworICAgIEQyRDFfUE9JTlRfMkYgbVN0YXJ0UG9p
bnQ7Cit9OworCitjYWlyb19pbnRfc3RhdHVzX3QgCitfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250
X2luaXRfZ2x5cGhfcGF0aChjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQs
IAorCQkJCQkgIGNhaXJvX3NjYWxlZF9nbHlwaF90ICpzY2FsZWRfZ2x5cGgpCit7CisgICAgY2Fp
cm9fcGF0aF9maXhlZF90ICpwYXRoOworICAgIHBhdGggPSBfY2Fpcm9fcGF0aF9maXhlZF9jcmVh
dGUoKTsKKyAgICBHZW9tZXRyeVJlY29yZGVyIHJlY29yZGVyKHBhdGgpOworCisgICAgRFdSSVRF
X0dMWVBIX09GRlNFVCBvZmZzZXQ7CisgICAgb2Zmc2V0LmFkdmFuY2VPZmZzZXQgPSAwOworICAg
IG9mZnNldC5hc2NlbmRlck9mZnNldCA9IDA7CisgICAgVUlOVDE2IGdseXBoSWQgPSAoVUlOVDE2
KV9jYWlyb19zY2FsZWRfZ2x5cGhfaW5kZXgoc2NhbGVkX2dseXBoKTsKKyAgICBGTE9BVCBhZHZh
bmNlID0gMC4wOworICAgIGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfdCAqZHdyaXRlZmYgPSAoY2Fp
cm9fZHdyaXRlX2ZvbnRfZmFjZV90KilzY2FsZWRfZm9udC0+YmFzZS5mb250X2ZhY2U7CisgICAg
ZHdyaXRlZmYtPmR3cml0ZWZhY2UtPkdldEdseXBoUnVuT3V0bGluZSgoRkxPQVQpc2NhbGVkX2Zv
bnQtPmJhc2UuZm9udF9tYXRyaXgueXksCisJCQkJCSAgICAgJmdseXBoSWQsCisJCQkJCSAgICAg
JmFkdmFuY2UsCisJCQkJCSAgICAgJm9mZnNldCwKKwkJCQkJICAgICAxLAorCQkJCQkgICAgIEZB
TFNFLAorCQkJCQkgICAgIEZBTFNFLAorCQkJCQkgICAgICZyZWNvcmRlcik7CisgICAgX2NhaXJv
X3BhdGhfZml4ZWRfY2xvc2VfcGF0aChwYXRoKTsKKworICAgIC8qIE5vdyBhcHBseSBvdXIgdHJh
bnNmb3JtYXRpb24gdG8gdGhlIGRyYXduIHBhdGguICovCisgICAgX2NhaXJvX3BhdGhfZml4ZWRf
dHJhbnNmb3JtKHBhdGgsICZzY2FsZWRfZm9udC0+YmFzZS5jdG0pOworICAgIAorICAgIF9jYWly
b19zY2FsZWRfZ2x5cGhfc2V0X3BhdGggKHNjYWxlZF9nbHlwaCwKKwkJCQkgICZzY2FsZWRfZm9u
dC0+YmFzZSwKKwkJCQkgIHBhdGgpOworICAgIHJldHVybiBDQUlST19JTlRfU1RBVFVTX1NVQ0NF
U1M7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBhbHNvIHN0b2xlbiBmcm9tIGNhaXJvLXdpbjMy
LWZvbnQuYyAqLworCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90ICoKK19jb21wdXRlX21hc2sgKGNh
aXJvX3N1cmZhY2VfdCAqc3VyZmFjZSwKKwkgICAgICAgaW50IHF1YWxpdHkpCit7CisgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV90ICpnbHlwaDsKKyAgICBjYWlyb19pbWFnZV9zdXJmYWNlX3QgKm1h
c2s7CisgICAgaW50IGksIGo7CisKKyAgICBnbHlwaCA9IChjYWlyb19pbWFnZV9zdXJmYWNlX3Qg
KiljYWlyb19zdXJmYWNlX21hcF90b19pbWFnZSAoc3VyZmFjZSwgTlVMTCk7CisgICAgaWYgKHVu
bGlrZWx5IChnbHlwaC0+YmFzZS5zdGF0dXMpKQorCXJldHVybiAmZ2x5cGgtPmJhc2U7CisKKyAg
ICBpZiAocXVhbGl0eSA9PSBDTEVBUlRZUEVfUVVBTElUWSkgeworCS8qIER1cGxpY2F0ZSB0aGUg
Z3JlZW4gY2hhbm5lbCBvZiBhIDQtY2hhbm5lbCBtYXNrIGludG8gdGhlCisJICogYWxwaGEgY2hh
bm5lbCwgdGhlbiBpbnZlcnQgdGhlIHdob2xlIG1hc2suCisJICovCisJbWFzayA9IChjYWlyb19p
bWFnZV9zdXJmYWNlX3QgKikKKwkgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUgKENBSVJP
X0ZPUk1BVF9BUkdCMzIsCisJCQkJCWdseXBoLT53aWR0aCwgZ2x5cGgtPmhlaWdodCk7CisJaWYg
KGxpa2VseSAobWFzay0+YmFzZS5zdGF0dXMgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpKSB7CisJ
ICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaC0+aGVpZ2h0OyBpKyspIHsKKwkJdWludDMyX3QgKnAg
PSAodWludDMyX3QgKikgKGdseXBoLT5kYXRhICsgaSAqIGdseXBoLT5zdHJpZGUpOworCQl1aW50
MzJfdCAqcSA9ICh1aW50MzJfdCAqKSAobWFzay0+ZGF0YSArIGkgKiBtYXNrLT5zdHJpZGUpOwor
CisJCWZvciAoaiA9IDA7IGogPCBnbHlwaC0+d2lkdGg7IGorKykgeworCQkgICAgKnErKyA9IDB4
ZmZmZmZmZmYgXiAoKnAgfCAoKCpwICYgMHgwMDAwZmYwMCkgPDwgMTYpKTsKKwkJICAgIHArKzsK
KwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJLyogQ29tcHV0ZSBhbiBhbHBoYS1tYXNr
IGZyb20gYSB1c2luZyB0aGUgZ3JlZW4gY2hhbm5lbCBvZiBhCisJICogKHByZXN1bWVkIG1vbm9j
aHJvbWUpIFJHQjI0IGltYWdlLgorCSAqLworCW1hc2sgPSAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV90
ICopCisJICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlIChDQUlST19GT1JNQVRfQTgsCisJ
CQkJCWdseXBoLT53aWR0aCwgZ2x5cGgtPmhlaWdodCk7CisJaWYgKGxpa2VseSAobWFzay0+YmFz
ZS5zdGF0dXMgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpKSB7CisJICAgIGZvciAoaSA9IDA7IGkg
PCBnbHlwaC0+aGVpZ2h0OyBpKyspIHsKKwkJdWludDMyX3QgKnAgPSAodWludDMyX3QgKikgKGds
eXBoLT5kYXRhICsgaSAqIGdseXBoLT5zdHJpZGUpOworCQl1aW50OF90ICpxID0gKHVpbnQ4X3Qg
KikgKG1hc2stPmRhdGEgKyBpICogbWFzay0+c3RyaWRlKTsKKworCQlmb3IgKGogPSAwOyBqIDwg
Z2x5cGgtPndpZHRoOyBqKyspCisJCSAgICAqcSsrID0gMjU1IC0gKCgqcCsrICYgMHgwMDAwZmYw
MCkgPj4gOCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV91bm1hcF9p
bWFnZSAoc3VyZmFjZSwgJmdseXBoLT5iYXNlKTsKKyAgICByZXR1cm4gJm1hc2stPmJhc2U7Cit9
CisKK2NhaXJvX2ludF9zdGF0dXNfdCAKK19jYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfaW5pdF9n
bHlwaF9zdXJmYWNlKGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90ICpzY2FsZWRfZm9udCwgCisJ
CQkJCSAgICAgY2Fpcm9fc2NhbGVkX2dseXBoX3QJKnNjYWxlZF9nbHlwaCkKK3sKKyAgICBjYWly
b19pbnRfc3RhdHVzX3Qgc3RhdHVzOworICAgIGNhaXJvX2dseXBoX3QgZ2x5cGg7CisgICAgY2Fp
cm9fc3VyZmFjZV90ICpzdXJmYWNlID0gTlVMTDsKKyAgICBjYWlyb190ICpjcjsKKyAgICBjYWly
b19zdXJmYWNlX3QgKmltYWdlOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGRvdWJsZSB4
MSwgeTEsIHgyLCB5MjsKKworICAgIHgxID0gX2NhaXJvX2ZpeGVkX2ludGVnZXJfZmxvb3IgKHNj
YWxlZF9nbHlwaC0+YmJveC5wMS54KTsKKyAgICB5MSA9IF9jYWlyb19maXhlZF9pbnRlZ2VyX2Zs
b29yIChzY2FsZWRfZ2x5cGgtPmJib3gucDEueSk7CisgICAgeDIgPSBfY2Fpcm9fZml4ZWRfaW50
ZWdlcl9jZWlsIChzY2FsZWRfZ2x5cGgtPmJib3gucDIueCk7CisgICAgeTIgPSBfY2Fpcm9fZml4
ZWRfaW50ZWdlcl9jZWlsIChzY2FsZWRfZ2x5cGgtPmJib3gucDIueSk7CisgICAgd2lkdGggPSAo
aW50KSh4MiAtIHgxKTsKKyAgICBoZWlnaHQgPSAoaW50KSh5MiAtIHkxKTsKKworICAgIGdseXBo
LmluZGV4ID0gX2NhaXJvX3NjYWxlZF9nbHlwaF9pbmRleCAoc2NhbGVkX2dseXBoKTsKKyAgICBn
bHlwaC54ID0gLXgxOworICAgIGdseXBoLnkgPSAteTE7CisKKyAgICBEV1JJVEVfR0xZUEhfUlVO
IHJ1bjsKKyAgICBGTE9BVCBhZHZhbmNlID0gMDsKKyAgICBVSU5UMTYgaW5kZXggPSAoVUlOVDE2
KWdseXBoLmluZGV4OworICAgIERXUklURV9HTFlQSF9PRkZTRVQgb2Zmc2V0OworICAgIGRvdWJs
ZSB4ID0gZ2x5cGgueDsKKyAgICBkb3VibGUgeSA9IGdseXBoLnk7CisgICAgUkVDVCBhcmVhOwor
ICAgIERXUklURV9NQVRSSVggbWF0cml4OworCisgICAgc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1
cmZhY2VfY3JlYXRlX3dpdGhfZGliIChDQUlST19GT1JNQVRfUkdCMjQsCisJCQkJCQkgICB3aWR0
aCwgaGVpZ2h0KTsKKworICAgIHN0YXR1cyA9IChjYWlyb19pbnRfc3RhdHVzX3QpX2NhaXJvX3N1
cmZhY2VfcGFpbnQgKHN1cmZhY2UsIENBSVJPX09QRVJBVE9SX1NPVVJDRSwKKwkJCQkJCSAgICAg
ICAmX2NhaXJvX3BhdHRlcm5fd2hpdGUuYmFzZSwgTlVMTCk7CisgICAgaWYgKHN0YXR1cykKKwln
b3RvIEZBSUw7CisKKyAgICAvKioKKyAgICAgKiBXZSB0cmFuc2Zvcm0gYnkgdGhlIGludmVyc2Ug
dHJhbnNmb3JtYXRpb24gaGVyZS4gVGhpcyB3aWxsIHB1dCBvdXIgZ2x5cGgKKyAgICAgKiBsb2Nh
dGlvbnMgaW4gdGhlIHNwYWNlIGluIHdoaWNoIHdlIGRyYXcuIFdoaWNoIGlzIGxhdGVyIHRyYW5z
Zm9ybWVkIGJ5CisgICAgICogdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0IHdlIHVzZS4g
VGhpcyB3aWxsIHRyYW5zZm9ybSB0aGUKKyAgICAgKiBnbHlwaCBwb3NpdGlvbnMgYmFjayB0byB3
aGVyZSB0aGV5IHdlcmUgYmVmb3JlIHdoZW4gZHJhd2luZywgYnV0IHRoZQorICAgICAqIGdseXBo
IHNoYXBlcyB3aWxsIGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgu
CisgICAgICovCisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmc2NhbGVkX2ZvbnQt
Pm1hdF9pbnZlcnNlLCAmeCwgJnkpOworICAgIG9mZnNldC5hZHZhbmNlT2Zmc2V0ID0gKEZMT0FU
KXg7CisgICAgLyoqIFktYXhpcyBpcyBpbnZlcnRlZCAqLworICAgIG9mZnNldC5hc2NlbmRlck9m
ZnNldCA9IC0oRkxPQVQpeTsKKworICAgIGFyZWEudG9wID0gMDsKKyAgICBhcmVhLmJvdHRvbSA9
IGhlaWdodDsKKyAgICBhcmVhLmxlZnQgPSAwOworICAgIGFyZWEucmlnaHQgPSB3aWR0aDsKKwor
ICAgIHJ1bi5nbHlwaENvdW50ID0gMTsKKyAgICBydW4uZ2x5cGhBZHZhbmNlcyA9ICZhZHZhbmNl
OworICAgIHJ1bi5mb250RmFjZSA9ICgoY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90KilzY2FsZWRf
Zm9udC0+YmFzZS5mb250X2ZhY2UpLT5kd3JpdGVmYWNlOworICAgIHJ1bi5mb250RW1TaXplID0g
MS4wZjsKKyAgICBydW4uYmlkaUxldmVsID0gMDsKKyAgICBydW4uZ2x5cGhJbmRpY2VzID0gJmlu
ZGV4OworICAgIHJ1bi5pc1NpZGV3YXlzID0gRkFMU0U7CisgICAgcnVuLmdseXBoT2Zmc2V0cyA9
ICZvZmZzZXQ7CisKKyAgICBtYXRyaXggPSBfY2Fpcm9fZHdyaXRlX21hdHJpeF9mcm9tX21hdHJp
eCgmc2NhbGVkX2ZvbnQtPm1hdCk7CisKKyAgICBzdGF0dXMgPSBfZHdyaXRlX2RyYXdfZ2x5cGhz
X3RvX2dkaV9zdXJmYWNlX2QyZCAodG9fd2luMzJfc3VyZmFjZSAoc3VyZmFjZSksICZtYXRyaXgs
ICZydW4sCisgICAgICAgICAgICBSR0IoMCwwLDApLCBzY2FsZWRfZm9udCwgYXJlYSk7CisgICAg
aWYgKHN0YXR1cykKKwlnb3RvIEZBSUw7CisKKworICAgIGltYWdlID0gX2NvbXB1dGVfbWFzayAo
c3VyZmFjZSwgQ0xFQVJUWVBFX1FVQUxJVFkpOworICAgIHN0YXR1cyA9IChjYWlyb19pbnRfc3Rh
dHVzX3QpaW1hZ2UtPnN0YXR1czsKKyAgICBpZiAoc3RhdHVzKQorCWdvdG8gRkFJTDsKKworICAg
IGNhaXJvX3N1cmZhY2Vfc2V0X2RldmljZV9vZmZzZXQgKGltYWdlLCAteDEsIC15MSk7CisgICAg
X2NhaXJvX3NjYWxlZF9nbHlwaF9zZXRfc3VyZmFjZSAoc2NhbGVkX2dseXBoLAorCQkJCSAgICAg
JnNjYWxlZF9mb250LT5iYXNlLAorCQkJCSAgICAgKGNhaXJvX2ltYWdlX3N1cmZhY2VfdCAqKSBp
bWFnZSk7CisKKyAgICBjYWlyb19ib29sX3QgaXNDb2xvciA9IEZBTFNFOworICAgIHsKKwlEV1JJ
VEVfTUVBU1VSSU5HX01PREUgbWVhc3VyZU1vZGUgPSBEV1JJVEVfTUVBU1VSSU5HX01PREVfTkFU
VVJBTDsKKwlSZWZQdHI8SURXcml0ZUNvbG9yR2x5cGhSdW5FbnVtZXJhdG9yPiBjb2xvckxheWVy
czsKKwlSZWZQdHI8SURXcml0ZUZhY3RvcnkyPiBmYWN0b3J5MjsKKwlEV3JpdGVGYWN0b3J5OjpJ
bnN0YW5jZSgpLT5RdWVyeUludGVyZmFjZSgmZmFjdG9yeTIpOworCWZhY3RvcnkyLT5UcmFuc2xh
dGVDb2xvckdseXBoUnVuKDAsIDAsICZydW4sIG51bGxwdHIsIG1lYXN1cmVNb2RlLCBudWxscHRy
LCAwLCAmY29sb3JMYXllcnMpOworCWlmIChjb2xvckxheWVycykKKwkgICAgaXNDb2xvciA9IFRS
VUU7CisgICAgfQorICAgIGlmIChpc0NvbG9yKSB7CisJc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1
cmZhY2VfY3JlYXRlX3dpdGhfZGliIChDQUlST19GT1JNQVRfQVJHQjMyLAorCQkJCQkJICAgICAg
IHdpZHRoLCBoZWlnaHQpOworCisJc3RhdHVzID0gKGNhaXJvX2ludF9zdGF0dXNfdClfY2Fpcm9f
c3VyZmFjZV9wYWludCAoc3VyZmFjZSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFLAorCQkJCQkJCSAg
ICZfY2Fpcm9fcGF0dGVybl9jbGVhci5iYXNlLCBOVUxMKTsKKworCXN0YXR1cyA9IF9kd3JpdGVf
ZHJhd19nbHlwaHNfdG9fZ2RpX3N1cmZhY2VfZDJkICh0b193aW4zMl9zdXJmYWNlIChzdXJmYWNl
KSwgJm1hdHJpeCwgJnJ1biwKKwkJCQkJCQkgUkdCKDAsMCwwKSwgc2NhbGVkX2ZvbnQsIGFyZWEp
OworCWlmIChzdGF0dXMpCisJICAgIGdvdG8gRkFJTDsKKworCWNhaXJvX3JlY3RhbmdsZV9pbnRf
dCBleHRlbnRzID0geyAwLCAwLCB3aWR0aCwgaGVpZ2h0IH07CisJY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV90ICppbWFnZSA9IF9jYWlyb19pbWFnZV9zdXJmYWNlX2Nsb25lX3N1YmltYWdlIChzdXJmYWNl
LCAmZXh0ZW50cyk7CisJY2Fpcm9fc3VyZmFjZV9zZXRfZGV2aWNlX29mZnNldCAoJmltYWdlLT5i
YXNlLCAteDEsIC15MSk7CisJX2NhaXJvX3NjYWxlZF9nbHlwaF9zZXRfY29sb3Jfc3VyZmFjZSAo
c2NhbGVkX2dseXBoLAorCQkJCQkgICAgICAgJnNjYWxlZF9mb250LT5iYXNlLAorCQkJCQkgICAg
ICAgaW1hZ2UpOworICAgIH0KKworICBGQUlMOgorICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSAo
c3VyZmFjZSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitjYWlyb19pbnRfc3RhdHVzX3QK
K19jYWlyb19kd3JpdGVfbG9hZF90cnVldHlwZV90YWJsZSh2b2lkICAgICAgICAgICAgICAgICAq
c2NhbGVkX2ZvbnQsCisJCQkJICB1bnNpZ25lZCBsb25nICAgICAgICAgdGFnLAorCQkJCSAgbG9u
ZyAgICAgICAgICAgICAgICAgIG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgICAgICAgICpi
dWZmZXIsCisJCQkJICB1bnNpZ25lZCBsb25nICAgICAgICAqbGVuZ3RoKQoreworICAgIGNhaXJv
X2R3cml0ZV9zY2FsZWRfZm9udF90ICpkd3JpdGVzZiA9IHN0YXRpY19jYXN0PGNhaXJvX2R3cml0
ZV9zY2FsZWRfZm9udF90Kj4oc2NhbGVkX2ZvbnQpOworICAgIGNhaXJvX2R3cml0ZV9mb250X2Zh
Y2VfdCAqZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90Kj4o
ZHdyaXRlc2YtPmJhc2UuZm9udF9mYWNlKTsKKworICAgIGNvbnN0IHZvaWQgKmRhdGE7CisgICAg
VUlOVDMyIHNpemU7CisgICAgdm9pZCAqdGFibGVDb250ZXh0OworICAgIEJPT0wgZXhpc3RzOwor
ICAgIGZhY2UtPmR3cml0ZWZhY2UtPlRyeUdldEZvbnRUYWJsZShiZTMyX3RvX2NwdSAodGFnKSwK
KwkJCQkgICAgICAmZGF0YSwKKwkJCQkgICAgICAmc2l6ZSwKKwkJCQkgICAgICAmdGFibGVDb250
ZXh0LAorCQkJCSAgICAgICZleGlzdHMpOworCisgICAgaWYgKCFleGlzdHMpIHsKKwlyZXR1cm4g
Q0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpZiAoYnVmZmVyICYm
ICpsZW5ndGggJiYgKFVJTlQzMilvZmZzZXQgPCBzaXplKSB7CisgICAgICAgIHNpemUgPSBNSU4o
c2l6ZSAtIChVSU5UMzIpb2Zmc2V0LCAqbGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
KGNvbnN0IGNoYXIqKWRhdGEgKyBvZmZzZXQsIHNpemUpOworICAgIH0KKyAgICAqbGVuZ3RoID0g
c2l6ZTsKKworICAgIGlmICh0YWJsZUNvbnRleHQpIHsKKwlmYWNlLT5kd3JpdGVmYWNlLT5SZWxl
YXNlRm9udFRhYmxlKHRhYmxlQ29udGV4dCk7CisgICAgfQorICAgIHJldHVybiAoY2Fpcm9faW50
X3N0YXR1c190KUNBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitjYWlyb19ib29sX3QKK19jYWly
b19kd3JpdGVfaGFzX2NvbG9yX2dseXBocyh2b2lkICpzY2FsZWRfZm9udCkKK3sKKyAgICBjYWly
b19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqZHdyaXRlc2YgPSBzdGF0aWNfY2FzdDxjYWlyb19kd3Jp
dGVfc2NhbGVkX2ZvbnRfdCo+KHNjYWxlZF9mb250KTsKKyAgICBjYWlyb19kd3JpdGVfZm9udF9m
YWNlX3QgKmZhY2UgPSByZWludGVycHJldF9jYXN0PGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfdCo+
KGR3cml0ZXNmLT5iYXNlLmZvbnRfZmFjZSk7CisgICAgUmVmUHRyPElEV3JpdGVGb250RmFjZTI+
IGZhY2UyOworICAgIEhSRVNVTFQgaHIgPSBmYWNlLT5kd3JpdGVmYWNlLT5RdWVyeUludGVyZmFj
ZSAoJmZhY2UyKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKwlyZXR1cm4gRkFMU0U7CisgICAgcmV0
dXJuIGZhY2UyLT5Jc0NvbG9yRm9udCAoKTsKK30KKworLy8gV0lOMzIgSGVscGVyIEZ1bmN0aW9u
cworY2Fpcm9fZm9udF9mYWNlX3QqCitjYWlyb19kd3JpdGVfZm9udF9mYWNlX2NyZWF0ZV9mb3Jf
ZHdyaXRlX2ZvbnRfZmFjZShJRFdyaXRlRm9udEZhY2UqIGR3cml0ZV9mb250X2ZhY2UpCit7Cisg
ICAgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90KiBmYWNlID0gKGNhaXJvX2R3cml0ZV9mb250X2Zh
Y2VfdCopbWFsbG9jKHNpemVvZihjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QpKTsKKyAgICBjYWly
b19mb250X2ZhY2VfdCAqZm9udF9mYWNlOworCisgICAgZHdyaXRlX2ZvbnRfZmFjZS0+QWRkUmVm
KCk7CisgICAgCisgICAgZmFjZS0+ZHdyaXRlZmFjZSA9IGR3cml0ZV9mb250X2ZhY2U7CisgICAg
ZmFjZS0+Zm9udCA9IE5VTEw7CisKKyAgICBmb250X2ZhY2UgPSAoY2Fpcm9fZm9udF9mYWNlX3Qq
KWZhY2U7CisgICAgCisgICAgX2NhaXJvX2ZvbnRfZmFjZV9pbml0ICgmKChjYWlyb19kd3JpdGVf
Zm9udF9mYWNlX3QqKWZvbnRfZmFjZSktPmJhc2UsICZfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9i
YWNrZW5kKTsKKworICAgIHJldHVybiBmb250X2ZhY2U7Cit9CisKK2NhaXJvX3B1YmxpYyBjYWly
b19mb250X2ZhY2VfdCAqCitjYWlyb19kd3JpdGVfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQg
KEhGT05UIGZvbnQpCit7CisgICAgUmVmUHRyPElEV3JpdGVHZGlJbnRlcm9wPiBnZGlJbnRlcm9w
OworICAgIERXcml0ZUZhY3Rvcnk6Okluc3RhbmNlKCktPkdldEdkaUludGVyb3AoJmdkaUludGVy
b3ApOworICAgIGlmICghZ2RpSW50ZXJvcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBS
ZWZQdHI8SURXcml0ZUZvbnRGYWNlPiBkd0ZhY2U7CisgICAgSERDIGhkYyA9IEdldERDKE5VTEwp
OworICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIGZvbnQpOworICAgIEhS
RVNVTFQgaHIgPSBnZGlJbnRlcm9wLT5DcmVhdGVGb250RmFjZUZyb21IZGMoaGRjLCAmZHdGYWNl
KTsKKyAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICBSZWxlYXNlREMoTlVMTCwg
aGRjKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl9kd3JpdGVfZm9udF9mYWNl
KGR3RmFjZSk7Cit9CisKK3ZvaWQKK2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9hbGxvd19tYW51
YWxfc2hvd19nbHlwaHMoY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqZHdyaXRlX3NjYWxlZF9mb250LCBj
YWlyb19ib29sX3QgYWxsb3dlZCkKK3sKKyAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAq
Zm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QqPihkd3Jp
dGVfc2NhbGVkX2ZvbnQpOworICAgIGZvbnQtPm1hbnVhbF9zaG93X2dseXBoc19hbGxvd2VkID0g
YWxsb3dlZDsKK30KKwordm9pZAorY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3NldF9mb3JjZV9H
RElfY2xhc3NpYyhjYWlyb19zY2FsZWRfZm9udF90ICpkd3JpdGVfc2NhbGVkX2ZvbnQsIGNhaXJv
X2Jvb2xfdCBmb3JjZSkKK3sKKyAgICBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqZm9udCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3QqPihkd3JpdGVfc2Nh
bGVkX2ZvbnQpOworICAgIGlmIChmb3JjZSAmJiBmb250LT5yZW5kZXJpbmdfbW9kZSA9PSBjYWly
b19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6VEVYVF9SRU5ERVJJTkdfTk9STUFMKSB7CisgICAgICAg
IGZvbnQtPnJlbmRlcmluZ19tb2RlID0gY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X3Q6OlRFWFRf
UkVOREVSSU5HX0dESV9DTEFTU0lDOworICAgIH0gZWxzZSBpZiAoIWZvcmNlICYmIGZvbnQtPnJl
bmRlcmluZ19tb2RlID09IGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRFUklO
R19HRElfQ0xBU1NJQykgeworICAgICAgICBmb250LT5yZW5kZXJpbmdfbW9kZSA9IGNhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRFUklOR19OT1JNQUw7CisgICAgfQorfQorCitj
YWlyb19ib29sX3QKK2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF9nZXRfZm9yY2VfR0RJX2NsYXNz
aWMoY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqZHdyaXRlX3NjYWxlZF9mb250KQoreworICAgIGNhaXJv
X2R3cml0ZV9zY2FsZWRfZm9udF90ICpmb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19kd3Jp
dGVfc2NhbGVkX2ZvbnRfdCo+KGR3cml0ZV9zY2FsZWRfZm9udCk7CisgICAgcmV0dXJuIGZvbnQt
PnJlbmRlcmluZ19tb2RlID09IGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRF
UklOR19HRElfQ0xBU1NJQzsKK30KKwordm9pZAorY2Fpcm9fZHdyaXRlX3NldF9jbGVhcnR5cGVf
cGFyYW1zKEZMT0FUIGdhbW1hLCBGTE9BVCBjb250cmFzdCwgRkxPQVQgbGV2ZWwsCisJCQkJICBp
bnQgZ2VvbWV0cnksIGludCBtb2RlKQoreworICAgIERXcml0ZUZhY3Rvcnk6OlNldFJlbmRlcmlu
Z1BhcmFtcyhnYW1tYSwgY29udHJhc3QsIGxldmVsLCBnZW9tZXRyeSwgbW9kZSk7Cit9CisKK2lu
dAorY2Fpcm9fZHdyaXRlX2dldF9jbGVhcnR5cGVfcmVuZGVyaW5nX21vZGUoKQoreworICAgIHJl
dHVybiBEV3JpdGVGYWN0b3J5OjpHZXRDbGVhclR5cGVSZW5kZXJpbmdNb2RlKCk7Cit9CisKK2Nh
aXJvX2ludF9zdGF0dXNfdAorX2R3cml0ZV9kcmF3X2dseXBoc190b19nZGlfc3VyZmFjZV9nZGko
Y2Fpcm9fd2luMzJfc3VyZmFjZV90ICpzdXJmYWNlLAorCQkJCSAgICAgICBEV1JJVEVfTUFUUklY
ICp0cmFuc2Zvcm0sCisJCQkJICAgICAgIERXUklURV9HTFlQSF9SVU4gKnJ1biwKKwkJCQkgICAg
ICAgQ09MT1JSRUYgY29sb3IsCisJCQkJICAgICAgIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90
ICpzY2FsZWRfZm9udCwKKwkJCQkgICAgICAgY29uc3QgUkVDVCAmYXJlYSkKK3sKKyAgICBJRFdy
aXRlR2RpSW50ZXJvcCAqZ2RpSW50ZXJvcDsKKyAgICBEV3JpdGVGYWN0b3J5OjpJbnN0YW5jZSgp
LT5HZXRHZGlJbnRlcm9wKCZnZGlJbnRlcm9wKTsKKyAgICBJRFdyaXRlQml0bWFwUmVuZGVyVGFy
Z2V0ICpydDsKKyAgICBIUkVTVUxUIHJ2OworCisgICAgY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250
X3Q6OlRleHRSZW5kZXJpbmdTdGF0ZSByZW5kZXJpbmdTdGF0ZSA9CisgICAgICBzY2FsZWRfZm9u
dC0+cmVuZGVyaW5nX21vZGU7CisKKyAgICBydiA9IGdkaUludGVyb3AtPkNyZWF0ZUJpdG1hcFJl
bmRlclRhcmdldChzdXJmYWNlLT5kYywKKwkJCQkJICAgICAgYXJlYS5yaWdodCAtIGFyZWEubGVm
dCwKKwkJCQkJICAgICAgYXJlYS5ib3R0b20gLSBhcmVhLnRvcCwKKwkJCQkJICAgICAgJnJ0KTsK
KworICAgIGlmIChGQUlMRUQocnYpKSB7CisJaWYgKHJ2ID09IEVfT1VUT0ZNRU1PUlkpIHsKKwkg
ICAgcmV0dXJuIChjYWlyb19pbnRfc3RhdHVzX3QpQ0FJUk9fU1RBVFVTX05PX01FTU9SWTsKKwl9
IGVsc2UgeworCSAgICByZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKwl9Cisg
ICAgfQorCisjaWYgMCAgICAKKyAgICBpZiAoKHJlbmRlcmluZ1N0YXRlID09IGNhaXJvX2R3cml0
ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRFUklOR19OT1JNQUwgfHwKKyAgICAgICAgIHJlbmRl
cmluZ1N0YXRlID09IGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpURVhUX1JFTkRFUklOR19H
RElfQ0xBU1NJQykgJiYKKyAgICAgICAgIXN1cmZhY2UtPmJhc2UucGVybWl0X3N1YnBpeGVsX2Fu
dGlhbGlhc2luZykgeworICAgICAgcmVuZGVyaW5nU3RhdGUgPSBjYWlyb19kd3JpdGVfc2NhbGVk
X2ZvbnRfdDo6VEVYVF9SRU5ERVJJTkdfTk9fQ0xFQVJUWVBFOworICAgICAgSURXcml0ZUJpdG1h
cFJlbmRlclRhcmdldDEqIHJ0MTsKKyAgICAgIHJ2ID0gcnQtPlF1ZXJ5SW50ZXJmYWNlKCZydDEp
OworICAgICAgCisgICAgICBpZiAoU1VDQ0VFREVEKHJ2KSAmJiBydDEpIHsKKyAgICAgICAgcnQx
LT5TZXRUZXh0QW50aWFsaWFzTW9kZShEV1JJVEVfVEVYVF9BTlRJQUxJQVNfTU9ERV9HUkFZU0NB
TEUpOworICAgICAgICBydDEtPlJlbGVhc2UoKTsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKwor
ICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMgKnBhcmFtcyA9CisgICAgICAgIERXcml0ZUZhY3Rv
cnk6OlJlbmRlcmluZ1BhcmFtcyhyZW5kZXJpbmdTdGF0ZSk7CisKKyAgICAvKioKKyAgICAgKiBX
ZSBzZXQgdGhlIG51bWJlciBvZiBwaXhlbHMgcGVyIERJUCB0byAxLjAuIFRoaXMgaXMgYmVjYXVz
ZSB3ZSBhbHdheXMgd2FudAorICAgICAqIHRvIGRyYXcgaW4gZGV2aWNlIHBpeGVscywgYW5kIG5v
dCBkZXZpY2UgaW5kZXBlbmRlbnQgcGl4ZWxzLiBPbiBoaWdoIERQSQorICAgICAqIHN5c3RlbXMg
dGhpcyB2YWx1ZSB3aWxsIGJlIGhpZ2hlciB0aGFuIDEuMCBhbmQgYXV0b21hdGljYWxseSB1cHNj
YWxlCisgICAgICogZm9udHMsIHdlIGRvbid0IHdhbnQgdGhpcyBzaW5jZSB3ZSBkbyBvdXIgb3du
IHVwc2NhbGluZyBmb3IgdmFyaW91cyByZWFzb25zLgorICAgICAqLworICAgIHJ0LT5TZXRQaXhl
bHNQZXJEaXAoMS4wKTsKKworICAgIGlmICh0cmFuc2Zvcm0pIHsKKwlydC0+U2V0Q3VycmVudFRy
YW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIH0KKyAgICBCaXRCbHQocnQtPkdldE1lbW9yeURDKCks
CisJICAgMCwgMCwKKwkgICBhcmVhLnJpZ2h0IC0gYXJlYS5sZWZ0LCBhcmVhLmJvdHRvbSAtIGFy
ZWEudG9wLAorCSAgIHN1cmZhY2UtPmRjLAorCSAgIGFyZWEubGVmdCwgYXJlYS50b3AsIAorCSAg
IFNSQ0NPUFkgfCBOT01JUlJPUkJJVE1BUCk7CisgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1l
YXN1cmVNb2RlOyAKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ1N0YXRlKSB7CisgICAgY2FzZSBjYWly
b19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6VEVYVF9SRU5ERVJJTkdfR0RJX0NMQVNTSUM6CisgICAg
Y2FzZSBjYWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdDo6VEVYVF9SRU5ERVJJTkdfTk9fQ0xFQVJU
WVBFOgorICAgICAgICBtZWFzdXJlTW9kZSA9IERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfQ0xB
U1NJQzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbWVhc3VyZU1vZGUg
PSBEV1JJVEVfTUVBU1VSSU5HX01PREVfTkFUVVJBTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIElEV3JpdGVDb2xvckdseXBoUnVuRW51bWVyYXRvciogY29sb3JMYXllcnMgPSBOVUxMOwor
ICAgIElEV3JpdGVGYWN0b3J5MiogZmFjdG9yeTI7CisgICAgRFdyaXRlRmFjdG9yeTo6SW5zdGFu
Y2UoKS0+UXVlcnlJbnRlcmZhY2UoJmZhY3RvcnkyKTsKKyAgICBmYWN0b3J5Mi0+VHJhbnNsYXRl
Q29sb3JHbHlwaFJ1bigwLCAwLCBydW4sIG51bGxwdHIsIG1lYXN1cmVNb2RlLCBudWxscHRyLCAw
LCAmY29sb3JMYXllcnMpOworICAgIGZhY3RvcnkyLT5SZWxlYXNlKCk7CisKKyAgICBpZiAoY29s
b3JMYXllcnMpIHsKKwlCT09MIGhhc1J1bjsKKwljb25zdCBEV1JJVEVfQ09MT1JfR0xZUEhfUlVO
KiBjb2xvclJ1bjsKKworCXdoaWxlICh0cnVlKSB7CisJICAgIGlmIChGQUlMRUQoY29sb3JMYXll
cnMtPk1vdmVOZXh0KCZoYXNSdW4pKSB8fCAhaGFzUnVuKQorCQlicmVhazsKKwkgICAgaWYgKEZB
SUxFRChjb2xvckxheWVycy0+R2V0Q3VycmVudFJ1bigmY29sb3JSdW4pKSkKKwkJYnJlYWs7CisK
KwkgICAgaWYgKGNvbG9yUnVuLT5ydW5Db2xvci5yIHx8IGNvbG9yUnVuLT5ydW5Db2xvci5nIHx8
IGNvbG9yUnVuLT5ydW5Db2xvci5iIHx8IGNvbG9yUnVuLT5ydW5Db2xvci5hKQorCQljb2xvciA9
IFJHQihjb2xvclJ1bi0+cnVuQ29sb3IuciAqIDI1NSwgY29sb3JSdW4tPnJ1bkNvbG9yLmcgKiAy
NTUsIGNvbG9yUnVuLT5ydW5Db2xvci5iICogMjU1KTsKKwkgICAgSFJFU1VMVCBociA9IHJ0LT5E
cmF3R2x5cGhSdW4oMCwgMCwgbWVhc3VyZU1vZGUsICZjb2xvclJ1bi0+Z2x5cGhSdW4sIHBhcmFt
cywgY29sb3IpOworCX0KKwljb2xvckxheWVycy0+UmVsZWFzZSgpOworICAgIH0gZWxzZSB7CisJ
SFJFU1VMVCBociA9IHJ0LT5EcmF3R2x5cGhSdW4oMCwgMCwgbWVhc3VyZU1vZGUsIHJ1biwgcGFy
YW1zLCBjb2xvcik7CisgICAgfQorICAgIEJpdEJsdChzdXJmYWNlLT5kYywKKwkgICBhcmVhLmxl
ZnQsIGFyZWEudG9wLAorCSAgIGFyZWEucmlnaHQgLSBhcmVhLmxlZnQsIGFyZWEuYm90dG9tIC0g
YXJlYS50b3AsCisJICAgcnQtPkdldE1lbW9yeURDKCksCisJICAgMCwgMCwgCisJICAgU1JDQ09Q
WSB8IE5PTUlSUk9SQklUTUFQKTsKKyAgICBwYXJhbXMtPlJlbGVhc2UoKTsKKyAgICBydC0+UmVs
ZWFzZSgpOworICAgIGdkaUludGVyb3AtPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gQ0FJUk9fSU5U
X1NUQVRVU19TVUNDRVNTOworfQorCitjYWlyb19pbnRfc3RhdHVzX3QKK19kd3JpdGVfZHJhd19n
bHlwaHNfdG9fZ2RpX3N1cmZhY2VfZDJkKGNhaXJvX3dpbjMyX3N1cmZhY2VfdCAqc3VyZmFjZSwK
KwkJCQkgICAgICAgRFdSSVRFX01BVFJJWCAqdHJhbnNmb3JtLAorCQkJCSAgICAgICBEV1JJVEVf
R0xZUEhfUlVOICpydW4sCisJCQkJICAgICAgIENPTE9SUkVGIGNvbG9yLAorCQkJCSAgICAgICBj
YWlyb19kd3JpdGVfc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsCisJCQkJICAgICAgIGNvbnN0
IFJFQ1QgJmFyZWEpCit7CisgICAgSFJFU1VMVCBydjsKKworICAgIElEMkQxRENSZW5kZXJUYXJn
ZXQgKnJ0ID0gRDJERmFjdG9yeTo6UmVuZGVyVGFyZ2V0KCk7CisKKyAgICAvLyBYWFggZG9uJ3Qg
d2UgbmVlZCB0byBzZXQgUmVuZGVyaW5nUGFyYW1zIG9uIHRoaXMgUmVuZGVyVGFyZ2V0PworCisg
ICAgcnYgPSBydC0+QmluZERDKHN1cmZhY2UtPmRjLCAmYXJlYSk7CisKKyAgICBwcmludGYoIlJl
bmRlcmluZyB0byBzdXJmYWNlOiAlcFxuIiwgc3VyZmFjZS0+ZGMpOworCisgICAgaWYgKEZBSUxF
RChydikpIHsKKwlydC0+UmVsZWFzZSgpOworCXJldHVybiBDQUlST19JTlRfU1RBVFVTX1VOU1VQ
UE9SVEVEOworICAgIH0KKworICAgIEQyRDFfQ09MT1JfRiBkZWZhbHV0Q29sb3IgPSBEMkQxOjpD
b2xvckYoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9y
KSwgMSk7CisKKyAgICBpZiAodHJhbnNmb3JtKSB7CisJcnQtPlNldFRyYW5zZm9ybShEMkQxOjpN
YXRyaXgzeDJGKHRyYW5zZm9ybS0+bTExLAorCQkJCQkgIHRyYW5zZm9ybS0+bTEyLAorCQkJCQkg
IHRyYW5zZm9ybS0+bTIxLAorCQkJCQkgIHRyYW5zZm9ybS0+bTIyLAorCQkJCQkgIHRyYW5zZm9y
bS0+ZHgsCisJCQkJCSAgdHJhbnNmb3JtLT5keSkpOworICAgIH0KKyAgICBydC0+QmVnaW5EcmF3
KCk7CisKKyAgICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyZU1vZGUgPSBEV1JJVEVfTUVB
U1VSSU5HX01PREVfTkFUVVJBTDsKKyAgICBSZWZQdHI8SURXcml0ZUNvbG9yR2x5cGhSdW5FbnVt
ZXJhdG9yPiBjb2xvckxheWVyczsKKyAgICBSZWZQdHI8SURXcml0ZUZhY3RvcnkyPiBmYWN0b3J5
MjsKKyAgICBEV3JpdGVGYWN0b3J5OjpJbnN0YW5jZSgpLT5RdWVyeUludGVyZmFjZSgmZmFjdG9y
eTIpOworICAgIGZhY3RvcnkyLT5UcmFuc2xhdGVDb2xvckdseXBoUnVuKDAsIDAsIHJ1biwgbnVs
bHB0ciwgbWVhc3VyZU1vZGUsIG51bGxwdHIsIDAsICZjb2xvckxheWVycyk7CisKKyAgICBpZiAo
Y29sb3JMYXllcnMpIHsKKwlCT09MIGhhc1J1bjsKKwljb25zdCBEV1JJVEVfQ09MT1JfR0xZUEhf
UlVOKiBjb2xvclJ1bjsKKworCXdoaWxlICh0cnVlKSB7CisJICAgIGlmIChGQUlMRUQoY29sb3JM
YXllcnMtPk1vdmVOZXh0KCZoYXNSdW4pKSB8fCAhaGFzUnVuKQorCQlicmVhazsKKwkgICAgaWYg
KEZBSUxFRChjb2xvckxheWVycy0+R2V0Q3VycmVudFJ1bigmY29sb3JSdW4pKSkKKwkJYnJlYWs7
CisKKwkgICAgRDJEMV9DT0xPUl9GIGNvbG9yOworCSAgICBpZiAoY29sb3JSdW4tPnJ1bkNvbG9y
LnIgfHwgY29sb3JSdW4tPnJ1bkNvbG9yLmcgfHwgY29sb3JSdW4tPnJ1bkNvbG9yLmIgfHwgY29s
b3JSdW4tPnJ1bkNvbG9yLmEpCisJCWNvbG9yID0gY29sb3JSdW4tPnJ1bkNvbG9yOworCSAgICBl
bHNlCisJCWNvbG9yID0gZGVmYWx1dENvbG9yOworCisJICAgIFJlZlB0cjxJRDJEMVNvbGlkQ29s
b3JCcnVzaD4gYnJ1c2g7CisJICAgIHJ2ID0gcnQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xv
ciwgJmJydXNoKTsKKworCSAgICBydC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoMCwgMCks
ICZjb2xvclJ1bi0+Z2x5cGhSdW4sIGJydXNoLCBtZWFzdXJlTW9kZSk7CisJfQorICAgIH0gZWxz
ZSB7CisJUmVmUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBicnVzaDsKKwlydiA9IHJ0LT5DcmVh
dGVTb2xpZENvbG9yQnJ1c2goZGVmYWx1dENvbG9yLCAmYnJ1c2gpOworCXJ0LT5EcmF3R2x5cGhS
dW4oRDJEMTo6UG9pbnQyRigwLCAwKSwgcnVuLCBicnVzaCwgbWVhc3VyZU1vZGUpOworICAgIH0K
KworICAgIHJ0LT5FbmREcmF3KCk7CisgICAgaWYgKHRyYW5zZm9ybSkgeworCXJ0LT5TZXRUcmFu
c2Zvcm0oRDJEMTo6TWF0cml4M3gyRjo6SWRlbnRpdHkoKSk7CisgICAgfQorCisgICAgaWYgKEZB
SUxFRChydikpIHsKKwlyZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9
CisKKyAgICByZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19TVUNDRVNTOworfQorCisvKiBTdXJmYWNl
IGhlbHBlciBmdW5jdGlvbiAqLworY2Fpcm9faW50X3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX3No
b3dfZ2x5cGhzX29uX3N1cmZhY2Uodm9pZAkJCSpzdXJmYWNlLAorCQkJCSAgICBjYWlyb19vcGVy
YXRvcl90CSBvcCwKKwkJCQkgICAgY29uc3QgY2Fpcm9fcGF0dGVybl90CSpzb3VyY2UsCisJCQkJ
ICAgIGNhaXJvX2dseXBoX3QJCSpnbHlwaHMsCisJCQkJICAgIGludAkJCSBudW1fZ2x5cGhzLAor
CQkJCSAgICBjYWlyb19zY2FsZWRfZm9udF90CSpzY2FsZWRfZm9udCkKK3sKKyAgICAvLyBUT0RP
OiBDaGVjayBmb250ICYgc3VyZmFjZSBmb3IgdHlwZXMuCisgICAgY2Fpcm9fZHdyaXRlX3NjYWxl
ZF9mb250X3QgKmR3cml0ZXNmID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19kd3JpdGVfc2NhbGVk
X2ZvbnRfdCo+KHNjYWxlZF9mb250KTsKKyAgICBjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QgKmR3
cml0ZWZmID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19kd3JpdGVfZm9udF9mYWNlX3QqPihzY2Fs
ZWRfZm9udC0+Zm9udF9mYWNlKTsKKyAgICBjYWlyb193aW4zMl9zdXJmYWNlX3QgKmRzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fd2luMzJfc3VyZmFjZV90Kj4oc3VyZmFjZSk7CisgICAgY2Fp
cm9faW50X3N0YXR1c190IHN0YXR1czsKKyAgICAvKiBXZSBjYW4gb25seSBoYW5kbGUgZHdyaXRl
IGZvbnRzICovCisgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X2dldF90eXBlIChzY2FsZWRfZm9u
dCkgIT0gQ0FJUk9fRk9OVF9UWVBFX0RXUklURSkKKwlyZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19V
TlNVUFBPUlRFRDsKKworICAgIC8qIFdlIGNhbiBvbmx5IGhhbmRsZSBvcGFxdWUgc29saWQgY29s
b3Igc291cmNlcyAqLworICAgIGlmICghX2NhaXJvX3BhdHRlcm5faXNfb3BhcXVlX3NvbGlkKHNv
dXJjZSkpCisJcmV0dXJuIENBSVJPX0lOVF9TVEFUVVNfVU5TVVBQT1JURUQ7CisKKyAgICAvKiBX
ZSBjYW4gb25seSBoYW5kbGUgb3BlcmF0b3IgU09VUkNFIG9yIE9WRVIgd2l0aCB0aGUgZGVzdGlu
YXRpb24KKyAgICAgKiBoYXZpbmcgbm8gYWxwaGEgKi8KKyAgICBpZiAob3AgIT0gQ0FJUk9fT1BF
UkFUT1JfU09VUkNFICYmIG9wICE9IENBSVJPX09QRVJBVE9SX09WRVIpCisJcmV0dXJuIENBSVJP
X0lOVF9TVEFUVVNfVU5TVVBQT1JURUQ7CisKKyAgICAvKiBJdCBpcyB2aXRhbCB0aGF0IGR4IHZh
bHVlcyBmb3IgZHh5X2J1ZiBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBkZWx0YSBvZgorICAgICAq
IF9sb2dpY2FsXyB4IGNvb3JkaW5hdGVzIChub3QgdXNlciB4IGNvb3JkaW5hdGVzKSBvciBlbHNl
IHRoZSBzdW0gb2YgYWxsCisgICAgICogcHJldmlvdXMgZHggdmFsdWVzIG1heSBzdGFydCB0byBk
aXZlcmdlIGZyb20gdGhlIGN1cnJlbnQgZ2x5cGgncyB4CisgICAgICogY29vcmRpbmF0ZSBkdWUg
dG8gYWNjdW11bGF0ZWQgcm91bmRpbmcgZXJyb3IuIEFzIGEgcmVzdWx0IHN0cmluZ3MgY291bGQK
KyAgICAgKiBiZSBwYWludGVkIHNob3J0ZXIgb3IgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuICovCisK
KyAgICBBdXRvRFdyaXRlR2x5cGhSdW4gcnVuOworICAgIHJ1bi5hbGxvY2F0ZShudW1fZ2x5cGhz
KTsKKworICAgIFVJTlQxNiAqaW5kaWNlcyA9IGNvbnN0X2Nhc3Q8VUlOVDE2Kj4ocnVuLmdseXBo
SW5kaWNlcyk7CisgICAgRkxPQVQgKmFkdmFuY2VzID0gY29uc3RfY2FzdDxGTE9BVCo+KHJ1bi5n
bHlwaEFkdmFuY2VzKTsKKyAgICBEV1JJVEVfR0xZUEhfT0ZGU0VUICpvZmZzZXRzID0gY29uc3Rf
Y2FzdDxEV1JJVEVfR0xZUEhfT0ZGU0VUKj4ocnVuLmdseXBoT2Zmc2V0cyk7CisKKyAgICBCT09M
IHRyYW5zZm9ybSA9IEZBTFNFOworICAgIC8qIE5lZWRlZCB0byBjYWxjdWxhdGUgYm91bmRpbmcg
Ym94IGZvciBlZmZpY2llbnQgYmxpdHRpbmcgKi8KKyAgICBJTlQzMiBzbWFsbGVzdFggPSBJTlRf
TUFYOworICAgIElOVDMyIGxhcmdlc3RYID0gMDsKKyAgICBJTlQzMiBzbWFsbGVzdFkgPSBJTlRf
TUFYOworICAgIElOVDMyIGxhcmdlc3RZID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bV9nbHlwaHM7IGkrKykgeworCWlmIChnbHlwaHNbaV0ueCA8IHNtYWxsZXN0WCkgeworCSAgICBz
bWFsbGVzdFggPSAoSU5UMzIpZ2x5cGhzW2ldLng7CisJfQorCWlmIChnbHlwaHNbaV0ueCA+IGxh
cmdlc3RYKSB7CisJICAgIGxhcmdlc3RYID0gKElOVDMyKWdseXBoc1tpXS54OworCX0KKwlpZiAo
Z2x5cGhzW2ldLnkgPCBzbWFsbGVzdFkpIHsKKwkgICAgc21hbGxlc3RZID0gKElOVDMyKWdseXBo
c1tpXS55OworCX0KKwlpZiAoZ2x5cGhzW2ldLnkgPiBsYXJnZXN0WSkgeworCSAgICBsYXJnZXN0
WSA9IChJTlQzMilnbHlwaHNbaV0ueTsKKwl9CisgICAgfQorICAgIC8qKgorICAgICAqIEhlcmUg
d2UgdHJ5IHRvIGdldCBhIHJvdWdoIGVzdGltYXRlIG9mIHRoZSBhcmVhIHRoYXQgdGhpcyBnbHlw
aCBydW4gd2lsbAorICAgICAqIGNvdmVyIG9uIHRoZSBzdXJmYWNlLiBTaW5jZSB3ZSB1c2UgR0RJ
IGludGVyb3AgdG8gZHJhdyB3ZSB3aWxsIGJlIGNvcHlpbmcKKyAgICAgKiBkYXRhIGFyb3VuZCB0
aGUgc2l6ZSBvZiB0aGUgYXJlYSBvZiB0aGUgc3VyZmFjZSB0aGF0IHdlIG1hcC4gV2Ugd2lsbCB3
YW50CisgICAgICogdG8gbWFwIGFuIGFyZWEgYXMgc21hbGwgYXMgcG9zc2libGUgdG8gcHJldmVu
dCBsYXJnZSBzdXJmYWNlcyB0byBiZQorICAgICAqIGNvcGllZCBhcm91bmQuIFdlIHRha2UgdGhl
IFgvWS1zaXplIG9mIHRoZSBmb250IGFzIG1hcmdpbiBvbiB0aGUgbGVmdC90b3AKKyAgICAgKiB0
d2ljZSB0aGUgWC9ZLXNpemUgb2YgdGhlIGZvbnQgYXMgbWFyZ2luIG9uIHRoZSByaWdodC9ib3R0
b20uCisgICAgICogVGhpcyBzaG91bGQgYWx3YXlzIGNvdmVyIHRoZSBlbnRpcmUgYXJlYSB3aGVy
ZSB0aGUgZ2x5cGhzIGFyZS4KKyAgICAgKi8KKyAgICBSRUNUIGZvbnRBcmVhOworICAgIGZvbnRB
cmVhLmxlZnQgPSAoSU5UMzIpKHNtYWxsZXN0WCAtIHNjYWxlZF9mb250LT5mb250X21hdHJpeC54
eCk7CisgICAgZm9udEFyZWEucmlnaHQgPSAoSU5UMzIpKGxhcmdlc3RYICsgc2NhbGVkX2ZvbnQt
PmZvbnRfbWF0cml4Lnh4ICogMik7CisgICAgZm9udEFyZWEudG9wID0gKElOVDMyKShzbWFsbGVz
dFkgLSBzY2FsZWRfZm9udC0+Zm9udF9tYXRyaXgueXkpOworICAgIGZvbnRBcmVhLmJvdHRvbSA9
IChJTlQzMikobGFyZ2VzdFkgKyBzY2FsZWRfZm9udC0+Zm9udF9tYXRyaXgueXkgKiAyKTsKKyAg
ICBpZiAoZm9udEFyZWEubGVmdCA8IDApCisJZm9udEFyZWEubGVmdCA9IDA7CisgICAgaWYgKGZv
bnRBcmVhLnRvcCA8IDApCisJZm9udEFyZWEudG9wID0gMDsKKyAgICBpZiAoZm9udEFyZWEuYm90
dG9tID4gZHN0LT5leHRlbnRzLmhlaWdodCkgeworCWZvbnRBcmVhLmJvdHRvbSA9IGRzdC0+ZXh0
ZW50cy5oZWlnaHQ7CisgICAgfQorICAgIGlmIChmb250QXJlYS5yaWdodCA+IGRzdC0+ZXh0ZW50
cy53aWR0aCkgeworCWZvbnRBcmVhLnJpZ2h0ID0gZHN0LT5leHRlbnRzLndpZHRoOworICAgIH0K
KyAgICBpZiAoZm9udEFyZWEucmlnaHQgPD0gZm9udEFyZWEubGVmdCB8fAorCWZvbnRBcmVhLmJv
dHRvbSA8PSBmb250QXJlYS50b3ApIHsKKwlyZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19TVUNDRVNT
OworICAgIH0KKyAgICBpZiAoZm9udEFyZWEucmlnaHQgPiBkc3QtPmV4dGVudHMud2lkdGgpIHsK
Kwlmb250QXJlYS5yaWdodCA9IGRzdC0+ZXh0ZW50cy53aWR0aDsKKyAgICB9CisgICAgaWYgKGZv
bnRBcmVhLmJvdHRvbSA+IGRzdC0+ZXh0ZW50cy5oZWlnaHQpIHsKKwlmb250QXJlYS5ib3R0b20g
PSBkc3QtPmV4dGVudHMuaGVpZ2h0OworICAgIH0KKworICAgIHJ1bi5iaWRpTGV2ZWwgPSAwOwor
ICAgIHJ1bi5mb250RmFjZSA9IGR3cml0ZWZmLT5kd3JpdGVmYWNlOworICAgIHJ1bi5pc1NpZGV3
YXlzID0gRkFMU0U7CisgICAgaWYgKGR3cml0ZXNmLT5tYXQueHkgPT0gMCAmJiBkd3JpdGVzZi0+
bWF0Lnl4ID09IDAgJiYKKwlkd3JpdGVzZi0+bWF0Lnh4ID09IHNjYWxlZF9mb250LT5mb250X21h
dHJpeC54eCAmJiAKKwlkd3JpdGVzZi0+bWF0Lnl5ID09IHNjYWxlZF9mb250LT5mb250X21hdHJp
eC55eSkgeworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspIHsKKwkgICAg
aW5kaWNlc1tpXSA9IChXT1JEKSBnbHlwaHNbaV0uaW5kZXg7CisJICAgIC8vIFNpbmNlIHdlIHdp
bGwgbXVsdGlwbHkgYnkgb3VyIGN0bSBtYXRyaXggbGF0ZXIgZm9yIHJvdGF0aW9uIGVmZmVjdHMK
KwkgICAgLy8gYW5kIHN1Y2gsIGFkanVzdCBwb3NpdGlvbnMgYnkgdGhlIGludmVyc2UgbWF0cml4
IG5vdy4KKwkgICAgb2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IChGTE9BVCkoZm9udEFyZWEu
dG9wIC0gZ2x5cGhzW2ldLnkpOworCSAgICBvZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSAoRkxP
QVQpKGdseXBoc1tpXS54IC0gZm9udEFyZWEubGVmdCk7CisJICAgIGFkdmFuY2VzW2ldID0gMC4w
OworCX0KKwlydW4uZm9udEVtU2l6ZSA9IChGTE9BVClzY2FsZWRfZm9udC0+Zm9udF9tYXRyaXgu
eXk7CisgICAgfSBlbHNlIHsKKwl0cmFuc2Zvcm0gPSBUUlVFOworICAgICAgICAvLyBTZWUgY29t
bWVudCBhYm91dCBFUFNJTE9OIGluIF9jYWlyb19kd3JpdGVfZ2x5cGhfcnVuX2Zyb21fZ2x5cGhz
CisgICAgICAgIGNvbnN0IGRvdWJsZSBFUFNJTE9OID0gMC4wMDAxOworCWZvciAoaW50IGkgPSAw
OyBpIDwgbnVtX2dseXBoczsgaSsrKSB7CisJICAgIGluZGljZXNbaV0gPSAoV09SRCkgZ2x5cGhz
W2ldLmluZGV4OworCSAgICBkb3VibGUgeCA9IGdseXBoc1tpXS54IC0gZm9udEFyZWEubGVmdCAr
IEVQU0lMT047CisJICAgIGRvdWJsZSB5ID0gZ2x5cGhzW2ldLnkgLSBmb250QXJlYS50b3A7CisJ
ICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJmR3cml0ZXNmLT5tYXRfaW52ZXJzZSwg
JngsICZ5KTsKKwkgICAgLyoqCisJICAgICAqIFNpbmNlIHdlIHdpbGwgbXVsdGlwbHkgYnkgb3Vy
IGN0bSBtYXRyaXggbGF0ZXIgZm9yIHJvdGF0aW9uIGVmZmVjdHMKKwkgICAgICogYW5kIHN1Y2gs
IGFkanVzdCBwb3NpdGlvbnMgYnkgdGhlIGludmVyc2UgbWF0cml4IG5vdy4gVGhlIFktYXhpcwor
CSAgICAgKiBpcyBpbnZlcnRlZCBzbyB0aGUgb2Zmc2V0IGJlY29tZXMgbmVnYXRpdmUuCisJICAg
ICAqLworCSAgICBvZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gLShGTE9BVCl5OworCSAgICBv
ZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSAoRkxPQVQpeDsKKwkgICAgYWR2YW5jZXNbaV0gPSAw
LjA7CisJfQorCXJ1bi5mb250RW1TaXplID0gMS4wZjsKKyAgICB9CisgICAgCisgICAgY2Fpcm9f
c29saWRfcGF0dGVybl90ICpzb2xpZF9wYXR0ZXJuID0gKGNhaXJvX3NvbGlkX3BhdHRlcm5fdCAq
KXNvdXJjZTsKKyAgICBDT0xPUlJFRiBjb2xvciA9IFJHQigoKGludClzb2xpZF9wYXR0ZXJuLT5j
b2xvci5yZWRfc2hvcnQpID4+IDgsCisJCSgoaW50KXNvbGlkX3BhdHRlcm4tPmNvbG9yLmdyZWVu
X3Nob3J0KSA+PiA4LAorCQkoKGludClzb2xpZF9wYXR0ZXJuLT5jb2xvci5ibHVlX3Nob3J0KSA+
PiA4KTsKKworICAgIERXUklURV9NQVRSSVggbWF0cml4ID0gX2NhaXJvX2R3cml0ZV9tYXRyaXhf
ZnJvbV9tYXRyaXgoJmR3cml0ZXNmLT5tYXQpOworCisgICAgRFdSSVRFX01BVFJJWCAqbWF0Owor
ICAgIGlmICh0cmFuc2Zvcm0pIHsKKwltYXQgPSAmbWF0cml4OworICAgIH0gZWxzZSB7CisJbWF0
ID0gTlVMTDsKKyAgICB9CisKKyAgICBSRUNUIGFyZWE7CisgICAgYXJlYS5sZWZ0ID0gZHN0LT5l
eHRlbnRzLng7CisgICAgYXJlYS50b3AgPSBkc3QtPmV4dGVudHMueTsKKyAgICBhcmVhLnJpZ2h0
ID0gYXJlYS5sZWZ0ICsgZHN0LT5leHRlbnRzLndpZHRoOworICAgIGFyZWEuYm90dG9tID0gYXJl
YS50b3AgKyBkc3QtPmV4dGVudHMuaGVpZ2h0OworCisjaWZkZWYgQ0FJUk9fVFJZX0QyRF9UT19H
REkKKyAgICBzdGF0dXMgPSBfZHdyaXRlX2RyYXdfZ2x5cGhzX3RvX2dkaV9zdXJmYWNlX2QyZChk
c3QsCisJCQkJCQkgICAgbWF0LAorCQkJCQkJICAgICZydW4sCisJCQkJCQkgICAgY29sb3IsCisJ
CQkJCQkgICAgZm9udEFyZWEpOworCisgICAgaWYgKHN0YXR1cyA9PSAoY2Fpcm9fc3RhdHVzX3Qp
Q0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRCkgeworI2VuZGlmCisJc3RhdHVzID0gX2R3cml0
ZV9kcmF3X2dseXBoc190b19nZGlfc3VyZmFjZV9nZGkoZHN0LAorCQkJCQkJCW1hdCwKKwkJCQkJ
CQkmcnVuLAorCQkJCQkJCWNvbG9yLAorCQkJCQkJCWR3cml0ZXNmLAorCQkJCQkJCWZvbnRBcmVh
KTsKKworI2lmZGVmIENBSVJPX1RSWV9EMkRfVE9fR0RJCisgICAgfQorI2VuZGlmCisKKyAgICBy
ZXR1cm4gc3RhdHVzOworfQorCisjZGVmaW5lIEVOSEFOQ0VEX0NPTlRSQVNUX1JFR0lTVFJZX0tF
WSBcCisgICAgSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxBdmFsb24u
R3JhcGhpY3NcXERJU1BMQVkxXFxFbmhhbmNlZENvbnRyYXN0TGV2ZWwiCisKK3ZvaWQKK0RXcml0
ZUZhY3Rvcnk6OkNyZWF0ZVJlbmRlcmluZ1BhcmFtcygpCit7CisgICAgaWYgKCFJbnN0YW5jZSgp
KSB7CisJcmV0dXJuOworICAgIH0KKworICAgIEluc3RhbmNlKCktPkNyZWF0ZVJlbmRlcmluZ1Bh
cmFtcygmbURlZmF1bHRSZW5kZXJpbmdQYXJhbXMpOworCisgICAgLy8gRm9yIEVuaGFuY2VkQ29u
dHJhc3QsIHdlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGhhcyBub3Qgc2V0IGl0
CisgICAgLy8gaW4gdGhlIHJlZ2lzdHJ5IChieSB1c2luZyB0aGUgQ2xlYXJUeXBlIFR1bmVyKS4K
KyAgICBGTE9BVCBjb250cmFzdDsKKyAgICBpZiAobUVuaGFuY2VkQ29udHJhc3QgPj0gMC4wICYm
IG1FbmhhbmNlZENvbnRyYXN0IDw9IDEwLjApIHsKKwljb250cmFzdCA9IG1FbmhhbmNlZENvbnRy
YXN0OworICAgIH0gZWxzZSB7CisJSEtFWSBoS2V5OworCWlmIChSZWdPcGVuS2V5RXhBKEVOSEFO
Q0VEX0NPTlRSQVNUX1JFR0lTVFJZX0tFWSwKKwkJCSAgMCwgS0VZX1JFQUQsICZoS2V5KSA9PSBF
UlJPUl9TVUNDRVNTKQorCXsKKwkgICAgY29udHJhc3QgPSBtRGVmYXVsdFJlbmRlcmluZ1BhcmFt
cy0+R2V0RW5oYW5jZWRDb250cmFzdCgpOworCSAgICBSZWdDbG9zZUtleShoS2V5KTsKKwl9IGVs
c2UgeworCSAgICBjb250cmFzdCA9IDEuMDsKKwl9CisgICAgfQorCisgICAgLy8gRm9yIHBhcmFt
ZXRlcnMgdGhhdCBoYXZlIG5vdCBiZWVuIGV4cGxpY2l0bHkgc2V0IHZpYSB0aGUgU2V0UmVuZGVy
aW5nUGFyYW1zIEFQSSwKKyAgICAvLyB3ZSBjb3B5IHZhbHVlcyBmcm9tIGRlZmF1bHQgcGFyYW1z
IChvciBvdXIgb3ZlcnJpZGRlbiB2YWx1ZSBmb3IgY29udHJhc3QpCisgICAgRkxPQVQgZ2FtbWEg
PQorICAgICAgICBtR2FtbWEgPj0gMS4wICYmIG1HYW1tYSA8PSAyLjIgPworICAgICAgICAgICAg
bUdhbW1hIDogbURlZmF1bHRSZW5kZXJpbmdQYXJhbXMtPkdldEdhbW1hKCk7CisgICAgRkxPQVQg
Y2xlYXJUeXBlTGV2ZWwgPQorICAgICAgICBtQ2xlYXJUeXBlTGV2ZWwgPj0gMC4wICYmIG1DbGVh
clR5cGVMZXZlbCA8PSAxLjAgPworICAgICAgICAgICAgbUNsZWFyVHlwZUxldmVsIDogbURlZmF1
bHRSZW5kZXJpbmdQYXJhbXMtPkdldENsZWFyVHlwZUxldmVsKCk7CisgICAgRFdSSVRFX1BJWEVM
X0dFT01FVFJZIHBpeGVsR2VvbWV0cnkgPQorICAgICAgICBtUGl4ZWxHZW9tZXRyeSA+PSBEV1JJ
VEVfUElYRUxfR0VPTUVUUllfRkxBVCAmJiBtUGl4ZWxHZW9tZXRyeSA8PSBEV1JJVEVfUElYRUxf
R0VPTUVUUllfQkdSID8KKyAgICAgICAgICAgIChEV1JJVEVfUElYRUxfR0VPTUVUUlkpbVBpeGVs
R2VvbWV0cnkgOiBtRGVmYXVsdFJlbmRlcmluZ1BhcmFtcy0+R2V0UGl4ZWxHZW9tZXRyeSgpOwor
ICAgIERXUklURV9SRU5ERVJJTkdfTU9ERSByZW5kZXJpbmdNb2RlID0KKyAgICAgICAgbVJlbmRl
cmluZ01vZGUgPj0gRFdSSVRFX1JFTkRFUklOR19NT0RFX0RFRkFVTFQgJiYgbVJlbmRlcmluZ01v
ZGUgPD0gRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9OQVRVUkFMX1NZTU1FVFJJQyA/
CisgICAgICAgICAgICAoRFdSSVRFX1JFTkRFUklOR19NT0RFKW1SZW5kZXJpbmdNb2RlIDogbURl
ZmF1bHRSZW5kZXJpbmdQYXJhbXMtPkdldFJlbmRlcmluZ01vZGUoKTsKKyAgICBJbnN0YW5jZSgp
LT5DcmVhdGVDdXN0b21SZW5kZXJpbmdQYXJhbXMoZ2FtbWEsIGNvbnRyYXN0LCBjbGVhclR5cGVM
ZXZlbCwKKwlwaXhlbEdlb21ldHJ5LCByZW5kZXJpbmdNb2RlLAorCSZtQ3VzdG9tQ2xlYXJUeXBl
UmVuZGVyaW5nUGFyYW1zKTsKKyAgICBJbnN0YW5jZSgpLT5DcmVhdGVDdXN0b21SZW5kZXJpbmdQ
YXJhbXMoZ2FtbWEsIGNvbnRyYXN0LCBjbGVhclR5cGVMZXZlbCwKKyAgICAgICAgcGl4ZWxHZW9t
ZXRyeSwgRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9HRElfQ0xBU1NJQywKKyAgICAg
ICAgJm1Gb3JjZUdESUNsYXNzaWNSZW5kZXJpbmdQYXJhbXMpOworfQorCitzdGF0aWMgY2Fpcm9f
Ym9vbF90CitfbmFtZV90YWJsZXNfbWF0Y2ggKGNhaXJvX3NjYWxlZF9mb250X3QgKmZvbnQxLAor
ICAgICAgICAgICAgICAgICAgICBjYWlyb19zY2FsZWRfZm9udF90ICpmb250MikKK3sKKyAgICB1
bnNpZ25lZCBsb25nIHNpemUxOworICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTI7CisgICAgY2Fpcm9f
aW50X3N0YXR1c190IHN0YXR1czE7CisgICAgY2Fpcm9faW50X3N0YXR1c190IHN0YXR1czI7Cisg
ICAgdW5zaWduZWQgY2hhciAqYnVmZmVyMTsKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIyOwor
ICAgIGNhaXJvX2Jvb2xfdCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmICghZm9udDEtPmJhY2tl
bmQgfHwgIWZvbnQyLT5iYWNrZW5kIHx8CisgICAgICAgICFmb250MS0+YmFja2VuZC0+bG9hZF90
cnVldHlwZV90YWJsZSB8fAorICAgICAgICAhZm9udDItPmJhY2tlbmQtPmxvYWRfdHJ1ZXR5cGVf
dGFibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXR1czEgPSBmb250MS0+YmFj
a2VuZC0+bG9hZF90cnVldHlwZV90YWJsZSAoZm9udDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9UQUdfbmFtZSwgMCwgTlVMTCwgJnNpemUx
KTsKKyAgICBzdGF0dXMyID0gZm9udDItPmJhY2tlbmQtPmxvYWRfdHJ1ZXR5cGVfdGFibGUgKGZv
bnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFRfVEFHX25hbWUsIDAsIE5VTEwsICZzaXplMik7CisgICAgaWYgKHN0YXR1czEgfHwgc3RhdHVz
MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzaXplMSAhPSBzaXplMikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYnVmZmVyMSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2Mg
KHNpemUxKTsKKyAgICBidWZmZXIyID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyAoc2l6ZTIpOwor
CisgICAgaWYgKGJ1ZmZlcjEgJiYgYnVmZmVyMikgeworICAgICAgICBzdGF0dXMxID0gZm9udDEt
PmJhY2tlbmQtPmxvYWRfdHJ1ZXR5cGVfdGFibGUgKGZvbnQxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX1RBR19uYW1lLCAwLCBidWZm
ZXIxLCAmc2l6ZTEpOworICAgICAgICBzdGF0dXMyID0gZm9udDItPmJhY2tlbmQtPmxvYWRfdHJ1
ZXR5cGVfdGFibGUgKGZvbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRUX1RBR19uYW1lLCAwLCBidWZmZXIyLCAmc2l6ZTIpOworICAg
ICAgICBpZiAoIXN0YXR1czEgJiYgIXN0YXR1czIpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1l
bWNtcCAoYnVmZmVyMSwgYnVmZmVyMiwgc2l6ZTEpID09IDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmcmVlIChidWZmZXIxKTsKKyAgICBmcmVlIChidWZmZXIyKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisvLyBIZWxwZXIgZm9yIF9jYWlyb193aW4zMl9wcmludGluZ19zdXJmYWNlX3No
b3dfZ2x5cGhzIHRvIGNyZWF0ZSBhIHdpbjMyIGVxdWl2YWxlbnQKKy8vIG9mIGEgZHdyaXRlIHNj
YWxlZF9mb250IHNvIHRoYXQgd2UgY2FuIHByaW50IHVzaW5nIEV4dFRleHRPdXQgaW5zdGVhZCBv
ZiBkcmF3aW5nCisvLyBwYXRocyBvciBibGl0dGluZyBnbHlwaCBiaXRtYXBzLgorY2Fpcm9faW50
X3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2NyZWF0ZV93aW4zMl9zY2FsZWRf
Zm9udCAoY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCAq
Km5ld19mb250KQoreworICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9nZXRfdHlwZSAoc2NhbGVk
X2ZvbnQpICE9IENBSVJPX0ZPTlRfVFlQRV9EV1JJVEUpIHsKKyAgICAgICAgcmV0dXJuIENBSVJP
X0lOVF9TVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgY2Fpcm9fZm9udF9mYWNlX3Qg
KmZhY2UgPSBjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9mYWNlIChzY2FsZWRfZm9udCk7Cisg
ICAgY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV90ICpkd2ZhY2UgPSByZWludGVycHJldF9jYXN0PGNh
aXJvX2R3cml0ZV9mb250X2ZhY2VfdCo+KGZhY2UpOworCisgICAgUmVmUHRyPElEV3JpdGVHZGlJ
bnRlcm9wPiBnZGlJbnRlcm9wOworICAgIERXcml0ZUZhY3Rvcnk6Okluc3RhbmNlKCktPkdldEdk
aUludGVyb3AoJmdkaUludGVyb3ApOworICAgIGlmICghZ2RpSW50ZXJvcCkgeworICAgICAgICBy
ZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBMT0dGT05U
VyBsb2dmb250OworICAgIGlmIChGQUlMRUQoZ2RpSW50ZXJvcC0+Q29udmVydEZvbnRGYWNlVG9M
T0dGT05UIChkd2ZhY2UtPmR3cml0ZWZhY2UsICZsb2dmb250KSkpIHsKKwlyZXR1cm4gQ0FJUk9f
SU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisgICAgLy8gRFcgbXVzdCBoYXZlIGJlZW4g
dXNpbmcgYW4gb3V0bGluZSBmb250LCBzbyB3ZSB3YW50IEdESSB0byB1c2UgdGhlIHNhbWUsCisg
ICAgLy8gZXZlbiBpZiB0aGVyZSdzIGFsc28gYSBiaXRtYXAgZmFjZSBhdmFpbGFibGUKKyAgICBs
b2dmb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX09VVExJTkVfUFJFQ0lTOworCisgICAgY2Fpcm9f
Zm9udF9mYWNlX3QgKndpbjMyX2ZhY2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zv
cl9sb2dmb250dyAoJmxvZ2ZvbnQpOworICAgIGlmICghd2luMzJfZmFjZSkgeworICAgICAgICBy
ZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBjYWlyb19t
YXRyaXhfdCBmb250X21hdHJpeDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9tYXRy
aXggKHNjYWxlZF9mb250LCAmZm9udF9tYXRyaXgpOworCisgICAgY2Fpcm9fbWF0cml4X3QgY3Rt
OworICAgIGNhaXJvX3NjYWxlZF9mb250X2dldF9jdG0gKHNjYWxlZF9mb250LCAmY3RtKTsKKwor
ICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190IG9wdGlvbnM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
Z2V0X2ZvbnRfb3B0aW9ucyAoc2NhbGVkX2ZvbnQsICZvcHRpb25zKTsKKworICAgIGNhaXJvX3Nj
YWxlZF9mb250X3QgKmZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUgKHdpbjMyX2ZhY2Us
CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnRfbWF0cml4LAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdG0sCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbnMpOworICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0
cm95ICh3aW4zMl9mYWNlKTsKKworICAgIGlmICghZm9udCkgeworICAgICAgICByZXR1cm4gQ0FJ
Uk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBpZiAoIV9uYW1lX3RhYmxl
c19tYXRjaCAoZm9udCwgc2NhbGVkX2ZvbnQpKSB7CisgICAgICAgIC8vIElmIHRoZSBmb250IG5h
bWUgdGFibGVzIGFyZW4ndCBlcXVhbCwgdGhlbiBHREkgbWF5IGhhdmUgZmFpbGVkIHRvCisgICAg
ICAgIC8vIGZpbmQgdGhlIHJpZ2h0IGZvbnQgYW5kIHN1YnN0aXR1dGVkIGEgZGlmZmVyZW50IGZv
bnQuCisgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kgKGZvbnQpOworICAgICAgICBy
ZXR1cm4gQ0FJUk9fSU5UX1NUQVRVU19VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAqbmV3X2Zv
bnQgPSBmb250OworICAgIHJldHVybiBDQUlST19JTlRfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYg
LS1naXQgYS9zcmMvd2luMzIvY2Fpcm8tZHdyaXRlLXByaXZhdGUuaCBiL3NyYy93aW4zMi9jYWly
by1kd3JpdGUtcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4u
MDMxNmM5ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dpbjMyL2NhaXJvLWR3cml0ZS1wcml2
YXRlLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qIC0qLSBNb2RlOiBjOyB0YWItd2lkdGg6IDg7IGMt
YmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiB0OyAtKi0gKi8KKy8qIENhaXJvIC0g
YSB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSB3aXRoIGRpc3BsYXkgYW5kIHByaW50IG91dHB1dAor
ICoKKyAqIENvcHlyaWdodCDCqSAyMDEwIE1vemlsbGEgRm91bmRhdGlvbgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKiAodGhlICJMR1BMIikgb3IsIGF0IHlvdXIgb3B0
aW9uLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEKKyAqIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMS4xICh0aGUgIk1QTCIpLiBJZiB5b3UgZG8gbm90IGFsdGVyIHRoaXMKKyAqIG5vdGlj
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVp
dGhlcgorICogdGhlIE1QTCBvciB0aGUgTEdQTC4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBMR1BMIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5CisgKiBpbiB0
aGUgZmlsZSBDT1BZSU5HLUxHUEwtMi4xOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgTVBMIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5CisgKiBpbiB0aGUgZmlsZSBDT1BZ
SU5HLU1QTC0xLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0
IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNl
bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisgKiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogVGhpcyBzb2Z0d2FyZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZCisgKiBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMR1BMIG9yIHRo
ZSBNUEwgZm9yCisgKiB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQg
bGltaXRhdGlvbnMuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIGNhaXJvIGdyYXBo
aWNzIGxpYnJhcnkuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5h
bCBDb2RlIGlzIHRoZSBNb3ppbGxhIEZvdW5kYXRpb24KKyAqCisgKiBDb250cmlidXRvcihzKToK
KyAqCUJhcyBTY2hvdXRlbiA8YnNjaG91dGVuQG1vemlsbGEuY29tPgorICovCisjaW5jbHVkZSA8
ZHdyaXRlXzIuaD4KKyNpbmNsdWRlIDxkMmQxLmg+CisKKy8vIERpcmVjdFdyaXRlIGlzIG5vdCBh
dmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KK3R5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKkRXcml0
ZUNyZWF0ZUZhY3RvcnlGdW5jKSgKKyAgRFdSSVRFX0ZBQ1RPUllfVFlQRSBmYWN0b3J5VHlwZSwK
KyAgUkVGSUlEIGlpZCwKKyAgSVVua25vd24gKipmYWN0b3J5CispOworCisvKiBjYWlyb19zY2Fs
ZWRfZm9udF90IGltcGxlbWVudGF0aW9uICovCitzdHJ1Y3QgX2NhaXJvX2R3cml0ZV9zY2FsZWRf
Zm9udCB7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCBiYXNlOworICAgIGNhaXJvX21hdHJpeF90
IG1hdDsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRfaW52ZXJzZTsKKyAgICBjYWlyb19hbnRpYWxp
YXNfdCBhbnRpYWxpYXNfbW9kZTsKKyAgICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyaW5n
X21vZGU7CisgICAgY2Fpcm9fYm9vbF90IG1hbnVhbF9zaG93X2dseXBoc19hbGxvd2VkOworICAg
IGVudW0gVGV4dFJlbmRlcmluZ1N0YXRlIHsKKyAgICAgICAgVEVYVF9SRU5ERVJJTkdfVU5JTklU
SUFMSVpFRCwKKyAgICAgICAgVEVYVF9SRU5ERVJJTkdfTk9fQ0xFQVJUWVBFLAorICAgICAgICBU
RVhUX1JFTkRFUklOR19OT1JNQUwsCisgICAgICAgIFRFWFRfUkVOREVSSU5HX0dESV9DTEFTU0lD
CisgICAgfTsKKyAgICBUZXh0UmVuZGVyaW5nU3RhdGUgcmVuZGVyaW5nX21vZGU7Cit9OwordHlw
ZWRlZiBzdHJ1Y3QgX2NhaXJvX2R3cml0ZV9zY2FsZWRfZm9udCBjYWlyb19kd3JpdGVfc2NhbGVk
X2ZvbnRfdDsKKworY2xhc3MgRFdyaXRlRmFjdG9yeQoreworcHVibGljOgorICAgIHN0YXRpYyBJ
RFdyaXRlRmFjdG9yeSAqSW5zdGFuY2UoKQorICAgIHsKKwlpZiAoIW1GYWN0b3J5SW5zdGFuY2Up
IHsKKwkgICAgRFdyaXRlQ3JlYXRlRmFjdG9yeUZ1bmMgY3JlYXRlRFdyaXRlRmFjdG9yeSA9IChE
V3JpdGVDcmVhdGVGYWN0b3J5RnVuYykKKwkJR2V0UHJvY0FkZHJlc3MoTG9hZExpYnJhcnlXKEwi
ZHdyaXRlLmRsbCIpLCAiRFdyaXRlQ3JlYXRlRmFjdG9yeSIpOworCSAgICBpZiAoY3JlYXRlRFdy
aXRlRmFjdG9yeSkgeworCQlIUkVTVUxUIGhyID0gY3JlYXRlRFdyaXRlRmFjdG9yeSgKKwkJICAg
IERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELAorCQkgICAgX191dWlkb2YoSURXcml0ZUZhY3Rv
cnkpLAorCQkgICAgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioqPigmbUZhY3RvcnlJbnN0YW5j
ZSkpOworCQlhc3NlcnQoU1VDQ0VFREVEKGhyKSk7CisJICAgIH0KKwl9CisJcmV0dXJuIG1GYWN0
b3J5SW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIElEV3JpdGVGb250Q29sbGVjdGlvbiAq
U3lzdGVtQ29sbGVjdGlvbigpCisgICAgeworCWlmICghbVN5c3RlbUNvbGxlY3Rpb24pIHsKKwkg
ICAgaWYgKEluc3RhbmNlKCkpIHsKKwkJSFJFU1VMVCBociA9IEluc3RhbmNlKCktPkdldFN5c3Rl
bUZvbnRDb2xsZWN0aW9uKCZtU3lzdGVtQ29sbGVjdGlvbik7CisJCWFzc2VydChTVUNDRUVERUQo
aHIpKTsKKwkgICAgfQorCX0KKwlyZXR1cm4gbVN5c3RlbUNvbGxlY3Rpb247CisgICAgfQorCisg
ICAgc3RhdGljIElEV3JpdGVGb250RmFtaWx5ICpGaW5kU3lzdGVtRm9udEZhbWlseShjb25zdCBX
Q0hBUiAqYUZhbWlseU5hbWUpCisgICAgeworCVVJTlQzMiBpZHg7CisJQk9PTCBmb3VuZDsKKwlp
ZiAoIVN5c3RlbUNvbGxlY3Rpb24oKSkgeworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJU3lzdGVt
Q29sbGVjdGlvbigpLT5GaW5kRmFtaWx5TmFtZShhRmFtaWx5TmFtZSwgJmlkeCwgJmZvdW5kKTsK
KwlpZiAoIWZvdW5kKSB7CisJICAgIHJldHVybiBOVUxMOworCX0KKworCUlEV3JpdGVGb250RmFt
aWx5ICpmYW1pbHk7CisJU3lzdGVtQ29sbGVjdGlvbigpLT5HZXRGb250RmFtaWx5KGlkeCwgJmZh
bWlseSk7CisJcmV0dXJuIGZhbWlseTsKKyAgICB9CisKKyAgICBzdGF0aWMgSURXcml0ZVJlbmRl
cmluZ1BhcmFtcyAqUmVuZGVyaW5nUGFyYW1zKGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90OjpU
ZXh0UmVuZGVyaW5nU3RhdGUgbW9kZSkKKyAgICB7CisJaWYgKCFtRGVmYXVsdFJlbmRlcmluZ1Bh
cmFtcyB8fAorICAgICAgICAgICAgIW1Gb3JjZUdESUNsYXNzaWNSZW5kZXJpbmdQYXJhbXMgfHwK
KyAgICAgICAgICAgICFtQ3VzdG9tQ2xlYXJUeXBlUmVuZGVyaW5nUGFyYW1zKQorICAgICAgICB7
CisJICAgIENyZWF0ZVJlbmRlcmluZ1BhcmFtcygpOworCX0KKwlJRFdyaXRlUmVuZGVyaW5nUGFy
YW1zICpwYXJhbXM7CisgICAgICAgIGlmIChtb2RlID09IGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9u
dF90OjpURVhUX1JFTkRFUklOR19OT19DTEVBUlRZUEUpIHsKKyAgICAgICAgICAgIHBhcmFtcyA9
IG1EZWZhdWx0UmVuZGVyaW5nUGFyYW1zOworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gY2Fp
cm9fZHdyaXRlX3NjYWxlZF9mb250X3Q6OlRFWFRfUkVOREVSSU5HX0dESV9DTEFTU0lDICYmIG1S
ZW5kZXJpbmdNb2RlIDwgMCkgeworICAgICAgICAgICAgcGFyYW1zID0gbUZvcmNlR0RJQ2xhc3Np
Y1JlbmRlcmluZ1BhcmFtczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcmFtcyA9
IG1DdXN0b21DbGVhclR5cGVSZW5kZXJpbmdQYXJhbXM7CisgICAgICAgIH0KKwlpZiAocGFyYW1z
KSB7CisJICAgIHBhcmFtcy0+QWRkUmVmKCk7CisJfQorCXJldHVybiBwYXJhbXM7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgU2V0UmVuZGVyaW5nUGFyYW1zKEZMT0FUIGFHYW1tYSwKKwkJCQkg
ICBGTE9BVCBhRW5oYW5jZWRDb250cmFzdCwKKwkJCQkgICBGTE9BVCBhQ2xlYXJUeXBlTGV2ZWws
CisJCQkJICAgaW50IGFQaXhlbEdlb21ldHJ5LAorCQkJCSAgIGludCBhUmVuZGVyaW5nTW9kZSkK
KyAgICB7CisJbUdhbW1hID0gYUdhbW1hOworCW1FbmhhbmNlZENvbnRyYXN0ID0gYUVuaGFuY2Vk
Q29udHJhc3Q7CisJbUNsZWFyVHlwZUxldmVsID0gYUNsZWFyVHlwZUxldmVsOworICAgICAgICBt
UGl4ZWxHZW9tZXRyeSA9IGFQaXhlbEdlb21ldHJ5OworICAgICAgICBtUmVuZGVyaW5nTW9kZSA9
IGFSZW5kZXJpbmdNb2RlOworCS8vIGRpc2NhcmQgYW55IGN1cnJlbnQgUmVuZGVyaW5nUGFyYW1z
IG9iamVjdHMKKwlpZiAobUN1c3RvbUNsZWFyVHlwZVJlbmRlcmluZ1BhcmFtcykgeworCSAgICBt
Q3VzdG9tQ2xlYXJUeXBlUmVuZGVyaW5nUGFyYW1zLT5SZWxlYXNlKCk7CisJICAgIG1DdXN0b21D
bGVhclR5cGVSZW5kZXJpbmdQYXJhbXMgPSBOVUxMOworCX0KKwlpZiAobUZvcmNlR0RJQ2xhc3Np
Y1JlbmRlcmluZ1BhcmFtcykgeworCSAgICBtRm9yY2VHRElDbGFzc2ljUmVuZGVyaW5nUGFyYW1z
LT5SZWxlYXNlKCk7CisJICAgIG1Gb3JjZUdESUNsYXNzaWNSZW5kZXJpbmdQYXJhbXMgPSBOVUxM
OworCX0KKwlpZiAobURlZmF1bHRSZW5kZXJpbmdQYXJhbXMpIHsKKwkgICAgbURlZmF1bHRSZW5k
ZXJpbmdQYXJhbXMtPlJlbGVhc2UoKTsKKwkgICAgbURlZmF1bHRSZW5kZXJpbmdQYXJhbXMgPSBO
VUxMOworCX0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50IEdldENsZWFyVHlwZVJlbmRlcmluZ01v
ZGUoKSB7CisgICAgICAgIHJldHVybiBtUmVuZGVyaW5nTW9kZTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIHZvaWQgQ3JlYXRlUmVuZGVyaW5nUGFyYW1zKCk7CisKKyAgICBzdGF0aWMg
SURXcml0ZUZhY3RvcnkgKm1GYWN0b3J5SW5zdGFuY2U7CisgICAgc3RhdGljIElEV3JpdGVGb250
Q29sbGVjdGlvbiAqbVN5c3RlbUNvbGxlY3Rpb247CisgICAgc3RhdGljIElEV3JpdGVSZW5kZXJp
bmdQYXJhbXMgKm1EZWZhdWx0UmVuZGVyaW5nUGFyYW1zOworICAgIHN0YXRpYyBJRFdyaXRlUmVu
ZGVyaW5nUGFyYW1zICptQ3VzdG9tQ2xlYXJUeXBlUmVuZGVyaW5nUGFyYW1zOworICAgIHN0YXRp
YyBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zICptRm9yY2VHRElDbGFzc2ljUmVuZGVyaW5nUGFyYW1z
OworICAgIHN0YXRpYyBGTE9BVCBtR2FtbWE7CisgICAgc3RhdGljIEZMT0FUIG1FbmhhbmNlZENv
bnRyYXN0OworICAgIHN0YXRpYyBGTE9BVCBtQ2xlYXJUeXBlTGV2ZWw7CisgICAgc3RhdGljIGlu
dCBtUGl4ZWxHZW9tZXRyeTsKKyAgICBzdGF0aWMgaW50IG1SZW5kZXJpbmdNb2RlOworfTsKKwor
Y2xhc3MgQXV0b0RXcml0ZUdseXBoUnVuIDogcHVibGljIERXUklURV9HTFlQSF9SVU4KK3sKKyAg
ICBzdGF0aWMgY29uc3QgaW50IGtOdW1BdXRvR2x5cGhzID0gMjU2OworCitwdWJsaWM6CisgICAg
QXV0b0RXcml0ZUdseXBoUnVuKCkgeworICAgICAgICBnbHlwaENvdW50ID0gMDsKKyAgICB9CisK
KyAgICB+QXV0b0RXcml0ZUdseXBoUnVuKCkgeworICAgICAgICBpZiAoZ2x5cGhDb3VudCA+IGtO
dW1BdXRvR2x5cGhzKSB7CisgICAgICAgICAgICBkZWxldGVbXSBnbHlwaEluZGljZXM7CisgICAg
ICAgICAgICBkZWxldGVbXSBnbHlwaEFkdmFuY2VzOworICAgICAgICAgICAgZGVsZXRlW10gZ2x5
cGhPZmZzZXRzOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhbGxvY2F0ZShpbnQgYU51
bUdseXBocykgeworICAgICAgICBnbHlwaENvdW50ID0gYU51bUdseXBoczsKKyAgICAgICAgaWYg
KGFOdW1HbHlwaHMgPD0ga051bUF1dG9HbHlwaHMpIHsKKyAgICAgICAgICAgIGdseXBoSW5kaWNl
cyA9ICZtQXV0b0luZGljZXNbMF07CisgICAgICAgICAgICBnbHlwaEFkdmFuY2VzID0gJm1BdXRv
QWR2YW5jZXNbMF07CisgICAgICAgICAgICBnbHlwaE9mZnNldHMgPSAmbUF1dG9PZmZzZXRzWzBd
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2x5cGhJbmRpY2VzID0gbmV3IFVJTlQx
NlthTnVtR2x5cGhzXTsKKyAgICAgICAgICAgIGdseXBoQWR2YW5jZXMgPSBuZXcgRkxPQVRbYU51
bUdseXBoc107CisgICAgICAgICAgICBnbHlwaE9mZnNldHMgPSBuZXcgRFdSSVRFX0dMWVBIX09G
RlNFVFthTnVtR2x5cGhzXTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBEV1JJ
VEVfR0xZUEhfT0ZGU0VUIG1BdXRvT2Zmc2V0c1trTnVtQXV0b0dseXBoc107CisgICAgRkxPQVQg
ICAgICAgICAgICAgICBtQXV0b0FkdmFuY2VzW2tOdW1BdXRvR2x5cGhzXTsKKyAgICBVSU5UMTYg
ICAgICAgICAgICAgIG1BdXRvSW5kaWNlc1trTnVtQXV0b0dseXBoc107Cit9OworCisvKiBjYWly
b19mb250X2ZhY2VfdCBpbXBsZW1lbnRhdGlvbiAqLworc3RydWN0IF9jYWlyb19kd3JpdGVfZm9u
dF9mYWNlIHsKKyAgICBjYWlyb19mb250X2ZhY2VfdCBiYXNlOworICAgIElEV3JpdGVGb250ICpm
b250OworICAgIElEV3JpdGVGb250RmFjZSAqZHdyaXRlZmFjZTsKK307Cit0eXBlZGVmIHN0cnVj
dCBfY2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZSBjYWlyb19kd3JpdGVfZm9udF9mYWNlX3Q7CisKK0RX
UklURV9NQVRSSVggX2NhaXJvX2R3cml0ZV9tYXRyaXhfZnJvbV9tYXRyaXgoY29uc3QgY2Fpcm9f
bWF0cml4X3QgKm1hdHJpeCk7CisKKy8vIFRoaXMgd2lsbCBpbml0aWFsaXplIGEgRFdyaXRlIGds
eXBoIHJ1biBmcm9tIGNhaXJvIGdseXBocyBhbmQgYSBzY2FsZWRfZm9udC4KK3ZvaWQKK19jYWly
b19kd3JpdGVfZ2x5cGhfcnVuX2Zyb21fZ2x5cGhzKGNhaXJvX2dseXBoX3QgKmdseXBocywKKwkJ
CQkgICAgaW50IG51bV9nbHlwaHMsCisJCQkJICAgIGNhaXJvX2R3cml0ZV9zY2FsZWRfZm9udF90
ICpzY2FsZWRfZm9udCwKKwkJCQkgICAgQXV0b0RXcml0ZUdseXBoUnVuICpydW4sCisJCQkJICAg
IGNhaXJvX2Jvb2xfdCAqdHJhbnNmb3JtZWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL2NhaXJv
LXdpbjMyLWZvbnQuYyBiL3NyYy93aW4zMi9jYWlyby13aW4zMi1mb250LmMKaW5kZXggMWYyMTc1
NzNiLi45OTBlMTk2OGIgMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi9jYWlyby13aW4zMi1mb250LmMK
KysrIGIvc3JjL3dpbjMyL2NhaXJvLXdpbjMyLWZvbnQuYwpAQCAtMjcwLDE0ICsyNzAsMTQgQEAg
X2hhdmVfY2xlYXJ0eXBlX3F1YWxpdHkgKHZvaWQpCiAJICAgICB2ZXJzaW9uX2luZm8uZHdNaW5v
clZlcnNpb24gPj0gMSkpOwkvKiBYUCBvciBuZXdlciAqLwogfQogCi1zdGF0aWMgQllURQotX2dl
dF9zeXN0ZW1fcXVhbGl0eSAodm9pZCkKK0JZVEUKK19jYWlyb193aW4zMl9nZXRfc3lzdGVtX3Rl
eHRfcXVhbGl0eSAodm9pZCkKIHsKICAgICBCT09MIGZvbnRfc21vb3RoaW5nOwogICAgIFVJTlQg
c21vb3RoaW5nX3R5cGU7CiAKICAgICBpZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvIChTUElfR0VU
Rk9OVFNNT09USElORywgMCwgJmZvbnRfc21vb3RoaW5nLCAwKSkgewotCV9jYWlyb193aW4zMl9w
cmludF9nZGlfZXJyb3IgKCJfZ2V0X3N5c3RlbV9xdWFsaXR5Iik7CisJX2NhaXJvX3dpbjMyX3By
aW50X2dkaV9lcnJvciAoIl9jYWlyb193aW4zMl9nZXRfc3lzdGVtX3RleHRfcXVhbGl0eSIpOwog
CXJldHVybiBERUZBVUxUX1FVQUxJVFk7CiAgICAgfQogCkBAIC0yODUsNyArMjg1LDcgQEAgX2dl
dF9zeXN0ZW1fcXVhbGl0eSAodm9pZCkKIAlpZiAoX2hhdmVfY2xlYXJ0eXBlX3F1YWxpdHkgKCkp
IHsKIAkgICAgaWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyAoU1BJX0dFVEZPTlRTTU9PVEhJTkdU
WVBFLAogCQkJCSAgICAgICAwLCAmc21vb3RoaW5nX3R5cGUsIDApKSB7Ci0JCV9jYWlyb193aW4z
Ml9wcmludF9nZGlfZXJyb3IgKCJfZ2V0X3N5c3RlbV9xdWFsaXR5Iik7CisJCV9jYWlyb193aW4z
Ml9wcmludF9nZGlfZXJyb3IgKCJfY2Fpcm9fd2luMzJfZ2V0X3N5c3RlbV90ZXh0X3F1YWxpdHki
KTsKIAkJcmV0dXJuIERFRkFVTFRfUVVBTElUWTsKIAkgICAgfQogCkBAIC0zMzgsNyArMzM4LDcg
QEAgX3dpbjMyX3NjYWxlZF9mb250X2NyZWF0ZSAoTE9HRk9OVFcgICAgICAgICAgICAgICAgICAg
KmxvZ2ZvbnQsCiAgICAgICogICAgICBoZXJlIGlzIHRoZSBoaW50X21ldHJpY3Mgb3B0aW9ucy4K
ICAgICAgKi8KICAgICBpZiAob3B0aW9ucy0+YW50aWFsaWFzID09IENBSVJPX0FOVElBTElBU19E
RUZBVUxUKQotCWYtPnF1YWxpdHkgPSBfZ2V0X3N5c3RlbV9xdWFsaXR5ICgpOworCWYtPnF1YWxp
dHkgPSBfY2Fpcm9fd2luMzJfZ2V0X3N5c3RlbV90ZXh0X3F1YWxpdHkgKCk7CiAgICAgZWxzZSB7
CiAJc3dpdGNoIChvcHRpb25zLT5hbnRpYWxpYXMpIHsKIAljYXNlIENBSVJPX0FOVElBTElBU19O
T05FOgpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL2NhaXJvLXdpbjMyLXByaW50aW5nLXN1cmZhY2Uu
YyBiL3NyYy93aW4zMi9jYWlyby13aW4zMi1wcmludGluZy1zdXJmYWNlLmMKaW5kZXggZGE3MzU3
Y2FhLi5lNjQ0MTdiNGQgMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi9jYWlyby13aW4zMi1wcmludGlu
Zy1zdXJmYWNlLmMKKysrIGIvc3JjL3dpbjMyL2NhaXJvLXdpbjMyLXByaW50aW5nLXN1cmZhY2Uu
YwpAQCAtMTgwOCw2ICsxODA4LDkgQEAgX2NhaXJvX3dpbjMyX3ByaW50aW5nX3N1cmZhY2Vfc2hv
d19nbHlwaHMgKHZvaWQgICAgICAgICAgICAgICAgICphYnN0cmFjdF9zdXJmYWMKICAgICBjYWly
b19zb2xpZF9wYXR0ZXJuX3QgY2xlYXI7CiAgICAgY2Fpcm9fY29tcG9zaXRlX3JlY3RhbmdsZXNf
dCBleHRlbnRzOwogICAgIGNhaXJvX2Jvb2xfdCBvdmVybGFwOworI2lmIENBSVJPX0hBU19EV1JJ
VEVfRk9OVAorICAgIGNhaXJvX3NjYWxlZF9mb250X3QgKmxvY2FsX3NjYWxlZF9mb250ID0gTlVM
TDsKKyNlbmRpZgogCiAgICAgc3RhdHVzID0gX2NhaXJvX2NvbXBvc2l0ZV9yZWN0YW5nbGVzX2lu
aXRfZm9yX2dseXBocyAoJmV4dGVudHMsCiAJCQkJCQkJICAmc3VyZmFjZS0+d2luMzIuYmFzZSwK
QEAgLTE4NTEsNiArMTg1NCwxMiBAQCBfY2Fpcm9fd2luMzJfcHJpbnRpbmdfc3VyZmFjZV9zaG93
X2dseXBocyAodm9pZCAgICAgICAgICAgICAgICAgKmFic3RyYWN0X3N1cmZhYwogCX0KICNlbmRp
ZgogCisjaWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisgICAgICAgIGlmIChjYWlyb19zY2FsZWRf
Zm9udF9nZXRfdHlwZSAoc2NhbGVkX2ZvbnQpID09IENBSVJPX0ZPTlRfVFlQRV9EV1JJVEUpIHsK
KwkgICAgcmV0dXJuIF9jYWlyb193aW4zMl9wcmludGluZ19zdXJmYWNlX2FuYWx5emVfb3BlcmF0
aW9uIChzdXJmYWNlLCBvcCwgc291cmNlLCAmZXh0ZW50cy5ib3VuZGVkKTsKKyAgICAgICAgfQor
I2VuZGlmCisKIAkvKiBGb3Igbm9uIHdpbjMyIGZvbnRzIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBl
YWNoIGdseXBoIGhhcyBhCiAJICogcGF0aCBhdmFpbGFibGUuIElmIGEgcGF0aCBpcyBub3QgYXZh
aWxhYmxlLAogCSAqIF9jYWlyb19zY2FsZWRfZ2x5cGhfbG9va3VwKCkgd2lsbCByZXR1cm4KQEAg
LTE4OTAsNiArMTg5OSwyMyBAQCBfY2Fpcm9fd2luMzJfcHJpbnRpbmdfc3VyZmFjZV9zaG93X2ds
eXBocyAodm9pZCAgICAgICAgICAgICAgICAgKmFic3RyYWN0X3N1cmZhYwogCXNvdXJjZSA9IG9w
YXF1ZTsKICAgICB9CiAKKyNpZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyAgICAvKiBGb3IgYSBw
cmludGVyLCB0aGUgZHdyaXRlIHBhdGggaXMgbm90IGRlc2lyYWJsZSBhcyBpdCBnb2VzIHRocm91
Z2ggdGhlCisgICAgICogYml0bWFwLWJsaXR0aW5nIEdESSBpbnRlcm9wIHJvdXRlLiBCZXR0ZXIg
dG8gY3JlYXRlIGEgd2luMzIgKEdESSkgZm9udAorICAgICAqIHNvIHRoYXQgRXh0VGV4dE91dCBj
YW4gYmUgdXNlZCwgZ2l2aW5nIHRoZSBwcmludGVyIGRyaXZlciB0aGUgY2hhbmNlCisgICAgICog
dG8gZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggdGhlIHRleHQuCisgICAgICovCisgICAgaWYgKGNh
aXJvX3NjYWxlZF9mb250X2dldF90eXBlIChzY2FsZWRfZm9udCkgPT0gQ0FJUk9fRk9OVF9UWVBF
X0RXUklURSkgeworICAgICAgICBzdGF0dXMgPSBfY2Fpcm9fZHdyaXRlX3NjYWxlZF9mb250X2Ny
ZWF0ZV93aW4zMl9zY2FsZWRfZm9udCAoc2NhbGVkX2ZvbnQsICZsb2NhbF9zY2FsZWRfZm9udCk7
CisgICAgICAgIGlmIChzdGF0dXMgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAg
ICAgIHNjYWxlZF9mb250ID0gbG9jYWxfc2NhbGVkX2ZvbnQ7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvKiBSZXNldCBzdGF0dXM7IHdlJ2xsIGZhbGwgYmFjayB0byBkcmF3aW5nIGds
eXBocyBhcyBwYXRocyAqLworICAgICAgICAgICAgc3RhdHVzID0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1M7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogI2lmIENBSVJPX0hBU19XSU4zMl9GT05U
CiAgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X2dldF90eXBlIChzY2FsZWRfZm9udCkgPT0gQ0FJ
Uk9fRk9OVF9UWVBFX1dJTjMyICYmCiAJc291cmNlLT50eXBlID09IENBSVJPX1BBVFRFUk5fVFlQ
RV9TT0xJRCkKQEAgLTE5NDgsNiArMTk3NCwxMSBAQCBfY2Fpcm9fd2luMzJfcHJpbnRpbmdfc3Vy
ZmFjZV9zaG93X2dseXBocyAodm9pZCAgICAgICAgICAgICAgICAgKmFic3RyYWN0X3N1cmZhYwog
CiBjbGVhbnVwX2NvbXBvc2l0ZToKICAgICBfY2Fpcm9fY29tcG9zaXRlX3JlY3RhbmdsZXNfZmlu
aSAoJmV4dGVudHMpOworI2lmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorICAgIGlmIChsb2NhbF9z
Y2FsZWRfZm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveSAobG9jYWxfc2Nh
bGVkX2ZvbnQpOworI2VuZGlmCisKICAgICByZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQg
YS9zcmMvd2luMzIvY2Fpcm8td2luMzItcHJpdmF0ZS5oIGIvc3JjL3dpbjMyL2NhaXJvLXdpbjMy
LXByaXZhdGUuaAppbmRleCA4NWY4OGE5ZTguLmJlNDI4Nzg4MCAxMDA2NDQKLS0tIGEvc3JjL3dp
bjMyL2NhaXJvLXdpbjMyLXByaXZhdGUuaAorKysgYi9zcmMvd2luMzIvY2Fpcm8td2luMzItcHJp
dmF0ZS5oCkBAIC00NCw2ICs0NCw4IEBACiAjaW5jbHVkZSAiY2Fpcm8tc3VyZmFjZS1jbGlwcGVy
LXByaXZhdGUuaCIKICNpbmNsdWRlICJjYWlyby1zdXJmYWNlLXByaXZhdGUuaCIKIAorQ0FJUk9f
QkVHSU5fREVDTFMKKwogI2lmbmRlZiBTSEFERUJMRU5EQ0FQUwogI2RlZmluZSBTSEFERUJMRU5E
Q0FQUyAxMjAKICNlbmRpZgpAQCAtMjQ1LDQgKzI0NywyMiBAQCBfY2Fpcm9fd2luMzJfc2NhbGVk
X2ZvbnRfaXNfdHlwZTEgKGNhaXJvX3NjYWxlZF9mb250X3QgKnNjYWxlZF9mb250KTsKIGNhaXJv
X2Jvb2xfdAogX2NhaXJvX3dpbjMyX3NjYWxlZF9mb250X2lzX2JpdG1hcCAoY2Fpcm9fc2NhbGVk
X2ZvbnRfdCAqc2NhbGVkX2ZvbnQpOwogCitCWVRFIF9jYWlyb193aW4zMl9nZXRfc3lzdGVtX3Rl
eHRfcXVhbGl0eSAodm9pZCk7CisKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKworY2Fp
cm9faW50X3N0YXR1c190CitfY2Fpcm9fZHdyaXRlX3Nob3dfZ2x5cGhzX29uX3N1cmZhY2Uodm9p
ZAkJCSpzdXJmYWNlLAorCQkJCSAgICAgY2Fpcm9fb3BlcmF0b3JfdAkJIG9wLAorCQkJCSAgICAg
Y29uc3QgY2Fpcm9fcGF0dGVybl90CSpzb3VyY2UsCisJCQkJICAgICBjYWlyb19nbHlwaF90CQkq
Z2x5cGhzLAorCQkJCSAgICAgaW50CQkJIG51bV9nbHlwaHMsCisJCQkJICAgICBjYWlyb19zY2Fs
ZWRfZm9udF90CSpzY2FsZWRfZm9udCk7CisKK2NhaXJvX2ludF9zdGF0dXNfdAorX2NhaXJvX2R3
cml0ZV9zY2FsZWRfZm9udF9jcmVhdGVfd2luMzJfc2NhbGVkX2ZvbnQoY2Fpcm9fc2NhbGVkX2Zv
bnRfdCAqc2NhbGVkX2ZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWlyb19zY2FsZWRfZm9udF90ICoqbmV3X2ZvbnQpOworCisjZW5kaWYg
LyogQ0FJUk9fSEFTX0RXUklURV9GT05UICovCitDQUlST19FTkRfREVDTFMKICNlbmRpZiAvKiBD
QUlST19XSU4zMl9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9jYWlyby13aW4z
Mi1yZWZwdHIuaCBiL3NyYy93aW4zMi9jYWlyby13aW4zMi1yZWZwdHIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmUxNTYxNjNiOQotLS0gL2Rldi9udWxsCisrKyBiL3Ny
Yy93aW4zMi9jYWlyby13aW4zMi1yZWZwdHIuaApAQCAtMCwwICsxLDE3OCBAQAorLyogLSotIE1v
ZGU6IGM7IHRhYi13aWR0aDogODsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6
IHQ7IC0qLSAqLworLyogQ2Fpcm8gLSBhIHZlY3RvciBncmFwaGljcyBsaWJyYXJ5IHdpdGggZGlz
cGxheSBhbmQgcHJpbnQgb3V0cHV0CisgKgorICogQ29weXJpZ2h0IMKpIDIwMTAgTW96aWxsYSBG
b3VuZGF0aW9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IGVpdGhlciB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAy
LjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqICh0aGUg
IkxHUEwiKSBvciwgYXQgeW91ciBvcHRpb24sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxs
YQorICogUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTVBMIikuIElmIHlvdSBkbyBu
b3QgYWx0ZXIgdGhpcworICogbm90aWNlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyCisgKiB0aGUgTVBMIG9yIHRoZSBMR1BMLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExHUEwgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnkKKyAqIGluIHRoZSBmaWxlIENPUFlJTkctTEdQTC0yLjE7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNUEwgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnkKKyAqIGluIHRoZSBmaWxlIENPUFlJTkctTVBMLTEuMQorICoKKyAqIFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKKyAq
IFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4KKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8K
KyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
IFdJVEhPVVQgV0FSUkFOVFkKKyAqIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExHUEwgb3IgdGhlIE1QTCBmb3IKKyAqIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucy4KKyAqCisgKiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyB0aGUgY2Fpcm8gZ3JhcGhpY3MgbGlicmFyeS4KKyAqCisgKiBUaGUgSW5pdGlhbCBE
ZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE1vemlsbGEgRm91bmRhdGlvbgor
ICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoJQmFzIFNjaG91dGVuIDxic2Nob3V0ZW5AbW96aWxs
YS5jb20+CisgKi8KKyNpZm5kZWYgQ0FJUk9fV0lOMzJfUkVGUFRSX0gKKyNkZWZpbmUgQ0FJUk9f
V0lOMzJfUkVGUFRSX0gKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgVGVtcG9yYXJ5UmVm
OworCisvKioKKyAqIFJlZlB0ciBwb2ludHMgdG8gYSByZWZjb3VudGVkIHRoaW5nIHRoYXQgaGFz
IEFkZFJlZiBhbmQgUmVsZWFzZQorICogbWV0aG9kcyB0byBpbmNyZWFzZS9kZWNyZWFzZSB0aGUg
cmVmY291bnQsIHJlc3BlY3RpdmVseS4gIEFmdGVyIGEKKyAqIFJlZlB0cjxUPiBpcyBhc3NpZ25l
ZCBhIFQqLCB0aGUgVCogY2FuIGJlIHVzZWQgdGhyb3VnaCB0aGUgUmVmUHRyCisgKiBhcyBpZiBp
dCB3ZXJlIGEgVCouCisgKgorICogQSBSZWZQdHIgY2FuIGZvcmdldCBpdHMgdW5kZXJseWluZyBU
Kiwgd2hpY2ggcmVzdWx0cyBpbiB0aGUgVCoKKyAqIGJlaW5nIHdyYXBwZWQgaW4gYSB0ZW1wb3Jh
cnkgb2JqZWN0IHVudGlsIHRoZSBUKiBpcyBlaXRoZXIKKyAqIHJlLWFkb3B0ZWQgZnJvbSBvciBy
ZWxlYXNlZCBieSB0aGUgdGVtcG9yYXJ5LgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgUmVmUHRyCit7CisgICAgLy8gVG8gYWxsb3cgdGhlbSB0byB1c2UgdW5yZWYoKQorICAgIGZy
aWVuZCBjbGFzcyBUZW1wb3JhcnlSZWY8VD47CisKKyAgICBzdHJ1Y3QgZG9udFJlZiB7fTsKKwor
cHVibGljOgorICAgIFJlZlB0cigpIDogcHRyKDApIHsgfQorICAgIFJlZlB0cihjb25zdCBSZWZQ
dHImIG8pIDogcHRyKHJlZihvLnB0cikpIHt9CisgICAgUmVmUHRyKGNvbnN0IFRlbXBvcmFyeVJl
ZjxUPiYgbykgOiBwdHIoby5kcm9wKCkpIHt9CisgICAgUmVmUHRyKFQqIHQpIDogcHRyKHJlZih0
KSkge30KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgUmVmUHRyKGNvbnN0IFJlZlB0
cjxVPiYgbykgOiBwdHIocmVmKG8uZ2V0KCkpKSB7fQorCisgICAgflJlZlB0cigpIHsgdW5yZWYo
cHRyKTsgfQorCisgICAgUmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgUmVmUHRyJiBvKSB7CisgICAg
ICAgIGFzc2lnbihyZWYoby5wdHIpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAg
ICBSZWZQdHImIG9wZXJhdG9yPShjb25zdCBUZW1wb3JhcnlSZWY8VD4mIG8pIHsKKyAgICAgICAg
YXNzaWduKG8uZHJvcCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBSZWZQ
dHImIG9wZXJhdG9yPShUKiB0KSB7CisgICAgICAgIGFzc2lnbihyZWYodCkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBSZWZQ
dHImIG9wZXJhdG9yPShjb25zdCBSZWZQdHI8VT4mIG8pIHsKKyAgICAgICAgYXNzaWduKHJlZihv
LmdldCgpKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUZW1wb3JhcnlS
ZWY8VD4gZm9yZ2V0KCkgeworICAgICAgICBUKiB0bXAgPSBwdHI7CisgICAgICAgIHB0ciA9IDA7
CisgICAgICAgIHJldHVybiBUZW1wb3JhcnlSZWY8VD4odG1wLCBkb250UmVmKCkpOworICAgIH0K
KworICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQorICAgIG9wZXJhdG9yIFQqKCkg
Y29uc3QgeyByZXR1cm4gcHRyOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IHB0cjsgfQorICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpwdHI7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIG9wZXJhdG9yIFRlbXBvcmFyeVJlZjxVPigpIHsgcmV0
dXJuIFRlbXBvcmFyeVJlZjxVPihwdHIpOyB9CisKKyAgICAvKiogCisgICAgICogV0FSTklORyBm
b3IgZWFzZSBvZiB1c2UsIHBhc3NpbmcgYSByZWZlcmVuY2Ugd2lsbCByZWxlYXNlL2NsZWFyIG91
dCBwdHIhCisgICAgICogV2UgbnVsbCBvdXQgdGhlIHB0ciBiZWZvcmUgcmV0dXJuaW5nIGl0cyBh
ZGRyZXNzIHNvIHBlb3BsZSBwYXNzaW5nIGJ5cmVmCisgICAgICogYXMgaW5wdXQgd2lsbCBtb3N0
IGxpa2VseSBnZXQgZnVuY3Rpb25zIHJldHVybmluZyBlcnJvcnMgcmF0aGVyIHRoYW4gYWNjZXNz
aW5nCisgICAgICogZnJlZWQgbWVtb3J5LiBGdXJ0aGVyIG1vcmUgYWNjZXNzaW5nIGl0IGFmdGVy
IHRoaXMgcG9pbnQgaWYgaXQgaGFzbid0CisgICAgICogYmVlbiBzZXQgd2lsbCBwcm9kdWNlIGEg
bnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLgorICAgICAqLworICAgIFQqKiBvcGVyYXRvciYoKQor
ICAgIHsKKyAgICAgICBpZiAocHRyKSB7CisgICAgICAgICAgIHB0ci0+UmVsZWFzZSgpOworICAg
ICAgICAgICBwdHIgPSBOVUxMOworICAgICAgIH0KKyAgICAgICByZXR1cm4gJnB0cjsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oVCogdCkgeworICAgICAgICB1bnJlZihwdHIp
OworICAgICAgICBwdHIgPSB0OworICAgIH0KKworICAgIFQqIHB0cjsKKworICAgIHN0YXRpYyBp
bmxpbmUgVCogcmVmKFQqIHQpIHsKKyAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgIHQtPkFk
ZFJlZigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB1bnJlZihUKiB0KSB7CisgICAgICAgIGlmICh0KSB7CisgICAgICAgICAg
ICB0LT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCisvKioKKyAqIFRlbXBvcmFy
eVJlZjxUPiByZXByZXNlbnRzIGFuIG9iamVjdCB0aGF0IGhvbGRzIGEgdGVtcG9yYXJ5CisgKiBy
ZWZlcmVuY2UgdG8gYSBULiAgVGVtcG9yYXJ5UmVmIG9iamVjdHMgY2FuJ3QgYmUgbWFudWFsbHkg
cmVmJ2Qgb3IKKyAqIHVucmVmJ2QgKGJlaW5nIHRlbXBvcmFyaWVzLCBub3QgbHZhbHVlcyksIHNv
IGNhbiBvbmx5IHJlbGlucXVpc2gKKyAqIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cywgb3Ig
dW5yZWYgb24gZGVzdHJ1Y3Rpb24uCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBU
ZW1wb3JhcnlSZWYKK3sKKyAgICAvLyBUbyBhbGxvdyBpdCB0byBjb25zdHJ1Y3QgVGVtcG9yYXJ5
UmVmIGZyb20gYSBiYXJlIFQqCisgICAgZnJpZW5kIGNsYXNzIFJlZlB0cjxUPjsKKworICAgIHR5
cGVkZWYgdHlwZW5hbWUgUmVmUHRyPFQ+Ojpkb250UmVmIGRvbnRSZWY7CisKK3B1YmxpYzoKKyAg
ICBUZW1wb3JhcnlSZWYoVCogdCkgOiBwdHIoUmVmUHRyPFQ+OjpyZWYodCkpIHt9CisgICAgVGVt
cG9yYXJ5UmVmKGNvbnN0IFRlbXBvcmFyeVJlZiYgbykgOiBwdHIoby5kcm9wKCkpIHt9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIFRlbXBvcmFyeVJlZihjb25zdCBUZW1wb3JhcnlS
ZWY8VT4mIG8pIDogcHRyKG8uZHJvcCgpKSB7fQorCisgICAgflRlbXBvcmFyeVJlZigpIHsgUmVm
UHRyPFQ+Ojp1bnJlZihwdHIpOyB9CisKKyAgICBUKiBkcm9wKCkgY29uc3QgeworICAgICAgICBU
KiB0bXAgPSBwdHI7CisgICAgICAgIHB0ciA9IDA7CisgICAgICAgIHJldHVybiB0bXA7CisgICAg
fQorCitwcml2YXRlOgorICAgIFRlbXBvcmFyeVJlZihUKiB0LCBjb25zdCBkb250UmVmJikgOiBw
dHIodCkge30KKworICAgIG11dGFibGUgVCogcHRyOworCisgICAgVGVtcG9yYXJ5UmVmKCk7Cisg
ICAgVGVtcG9yYXJ5UmVmJiBvcGVyYXRvcj0oY29uc3QgVGVtcG9yYXJ5UmVmJik7Cit9OworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9jYWlyby13aW4zMi1zdXJmYWNlLmMgYi9zcmMv
d2luMzIvY2Fpcm8td2luMzItc3VyZmFjZS5jCmluZGV4IGY3Mjg1YjkyZS4uMWZhMTBmZjBkIDEw
MDY0NAotLS0gYS9zcmMvd2luMzIvY2Fpcm8td2luMzItc3VyZmFjZS5jCisrKyBiL3NyYy93aW4z
Mi9jYWlyby13aW4zMi1zdXJmYWNlLmMKQEAgLTIzNSw2ICsyMzUsMTEgQEAgX2NhaXJvX3dpbjMy
X3N1cmZhY2VfZW1pdF9nbHlwaHMgKGNhaXJvX3dpbjMyX3N1cmZhY2VfdCAqZHN0LAogICAgIGlu
dCBsb2dpY2FsX3gsIGxvZ2ljYWxfeTsKICAgICB1bnNpZ25lZCBpbnQgZ2x5cGhfaW5kZXhfb3B0
aW9uOwogCisjaWZkZWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisgICAgaWYgKHNjYWxlZF9mb250
LT5iYWNrZW5kLT50eXBlID09IENBSVJPX0ZPTlRfVFlQRV9EV1JJVEUpCisgICAgICAgIHJldHVy
biBfY2Fpcm9fZHdyaXRlX3Nob3dfZ2x5cGhzX29uX3N1cmZhY2UoZHN0LCBDQUlST19PUEVSQVRP
Ul9TT1VSQ0UsIHNvdXJjZSwgZ2x5cGhzLCBudW1fZ2x5cGhzLCBzY2FsZWRfZm9udCk7CisjZW5k
aWYKKwogICAgIC8qIFdlIGNhbiBvbmx5IGhhbmRsZSB3aW4zMiBmb250cyAqLwogICAgIGFzc2Vy
dCAoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X3R5cGUgKHNjYWxlZF9mb250KSA9PSBDQUlST19GT05U
X1RZUEVfV0lOMzIpOwogCmRpZmYgLS1naXQgYS90ZXN0L2NhaXJvLXRlc3QtcnVubmVyLmMgYi90
ZXN0L2NhaXJvLXRlc3QtcnVubmVyLmMKaW5kZXggZjllN2Q0NzEyLi45OGRiMTkzNWUgMTAwNjQ0
Ci0tLSBhL3Rlc3QvY2Fpcm8tdGVzdC1ydW5uZXIuYworKysgYi90ZXN0L2NhaXJvLXRlc3QtcnVu
bmVyLmMKQEAgLTYwLDYgKzYwLDggQEAKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNlbmRpZgogCisj
aW5jbHVkZSA8b2JqYmFzZS5oPgorCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fdGVzdF9saXN0IHsK
ICAgICBjb25zdCBjYWlyb190ZXN0X3QgKnRlc3Q7CiAgICAgc3RydWN0IF9jYWlyb190ZXN0X2xp
c3QgKm5leHQ7CkBAIC03MTAsNiArNzEyLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQogICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfRVJST1IsIF9DUlREQkdfTU9ERV9GSUxFKTsK
ICAgICBfQ3J0U2V0UmVwb3J0RmlsZShfQ1JUX0VSUk9SLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsK
ICNlbmRpZgorICAgIENvSW5pdGlhbGl6ZShOVUxMKTsKIAogICAgIF9jYWlyb190ZXN0X3J1bm5l
cl9yZWdpc3Rlcl90ZXN0cyAoKTsKICAgICB0ZXN0cyA9IF9saXN0X3JldmVyc2UgKHRlc3RzKTsK
ZGlmZiAtLWdpdCBhL3Rlc3QvY2Fpcm8tdGVzdC5oIGIvdGVzdC9jYWlyby10ZXN0LmgKaW5kZXgg
N2U5NjA1ZjYxLi5mMjZkNmQyNDMgMTAwNjQ0Ci0tLSBhL3Rlc3QvY2Fpcm8tdGVzdC5oCisrKyBi
L3Rlc3QvY2Fpcm8tdGVzdC5oCkBAIC0xMTEsNyArMTExLDExIEBAIGNhaXJvX3Rlc3RfTmFOICh2
b2lkKQogCiAjZGVmaW5lIENBSVJPX1RFU1RfTE9HX1NVRkZJWCAiLmxvZyIKIAorI2lmIENBSVJP
X0hBU19XSU4zMl9GT05UCisjZGVmaW5lIENBSVJPX1RFU1RfRk9OVF9GQU1JTFkgIkx1Y2lkYSIK
KyNlbHNlCiAjZGVmaW5lIENBSVJPX1RFU1RfRk9OVF9GQU1JTFkgIkRlamFWdSIKKyNlbmRpZgog
CiAvKiBXaGF0IGlzIGEgZmFpbCBhbmQgd2hhdCBpc24ndD8KICAqIFdoZW4gcnVubmluZyB0aGUg
dGVzdCBzdWl0ZSB3ZSB3YW50IHRvIGRldGVjdCB1bmV4cGVjdGVkIG91dHB1dC4gVGhpcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406765</attachid>
            <date>2020-08-17 20:00:06 -0700</date>
            <delta_ts>2020-08-31 14:29:12 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>3411</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKaW5kZXggYTFkYjUyZWUxYzYuLjRhZjA1
Mzk0YzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcApAQCAtMzksNyArMzks
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VO
YW1lKQogeworI2lmZGVmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorICAgIGNhaXJvX2ZvbnRfZmFj
ZV90KiBmb250RmFjZSA9IGNhaXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChm
b250KTsKKyNlbHNlCiAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2lu
MzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9udCk7CisjZW5kaWYKIAogICAgIGNhaXJv
X21hdHJpeF90IHNpemVNYXRyaXgsIGN0bTsKICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0
eSgmY3RtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAppbmRleCA1YmUzNWJmNmI3Mi4u
NGNmNjk0ODllYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKQEAgLTYzLDkgKzYz
LDkgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgIFNhdmVEQyhkYyk7CiAKICAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gbV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9u
dCgpOwotICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNzTXVsdGlwbGllciA9IGNhaXJvX3dpbjMyX3Nj
YWxlZF9mb250X2dldF9tZXRyaWNzX2ZhY3RvcihzY2FsZWRGb250KSAqIG1fcGxhdGZvcm1EYXRh
LnNpemUoKTsKKyAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxpZXIgPSAxLjAgLyAzMjsK
IAotICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X3NlbGVjdF9mb250KHNjYWxlZEZvbnQsIGRj
KTsKKyAgICBhdXRvIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIG1fcGxhdGZvcm1EYXRhLmhm
b250KCkpOwogCiAgICAgLy8gRklYTUU6IE5lZWRzIHRvIHRha2UgT1MvMiBVU0VfVFlQT19NRVRS
SUNTIGZsYWcgaW50byBhY2NvdW50CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5OTE4NgpAQCAtODcsNyArODcsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3Jt
SW5pdCgpCiAgICAgZmxvYXQgeEhlaWdodCA9IC1leHRlbnRzLnlfYmVhcmluZzsKIAogICAgIG1f
Zm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBjYWlyb193aW4zMl9zY2FsZWRf
Zm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CisgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250
KTsKIAogICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwogICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMg
PSAwOwpAQCAtMTAyLDE0ICsxMDIsMTMgQEAgRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAKICAgICBIV25kREMgZGMoMCk7CiAgICAgU2F2
ZURDKGRjKTsKLSAgICBhdXRvIHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250
KCk7Ci0gICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2ZvbnQoc2NhbGVkRm9udCwg
ZGMpOworICAgIGF1dG8gb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEu
aGZvbnQoKSk7CiAKICAgICBHTFlQSE1FVFJJQ1MgZ2RpTWV0cmljczsKICAgICBzdGF0aWMgY29u
c3QgTUFUMiBpZGVudGl0eSA9IHsgeyAwLCAxIH0sIHsgMCwgMCB9LCB7IDAsIDAgfSwgeyAwLCAx
IH0gfTsKICAgICBHZXRHbHlwaE91dGxpbmUoZGMsIGdseXBoLCBHR09fTUVUUklDUyB8IEdHT19H
TFlQSF9JTkRFWCwgJmdkaU1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSk7CiAKLSAgICBjYWlyb193
aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CisgICAgU2VsZWN0T2JqZWN0
KGRjLCBvbGRGb250KTsKICAgICBSZXN0b3JlREMoZGMsIC0xKTsKICAgICByZXR1cm4gRmxvYXRS
ZWN0KGdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLngsIC1nZGlNZXRyaWNzLmdtcHRHbHlwaE9y
aWdpbi55LAogICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tCb3hYICsgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsKQEAgLTEyNiwxNyArMTI1LDE3IEBAIGZs
b2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBI
V25kREMgZGMoMCk7CiAgICAgU2F2ZURDKGRjKTsKIAotICAgIGNhaXJvX3NjYWxlZF9mb250X3Qq
IHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCk7Ci0gICAgY2Fpcm9fd2lu
MzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2ZvbnQoc2NhbGVkRm9udCwgZGMpOworICAgIGF1dG8gb2xk
Rm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7CiAKICAgICBp
bnQgd2lkdGg7CiAgICAgR2V0Q2hhcldpZHRoSShkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7CiAK
LSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CisgICAg
U2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKIAogICAgIFJlc3RvcmVEQyhkYywgLTEpOwogCi0g
ICAgY29uc3QgZG91YmxlIG1ldHJpY3NNdWx0aXBsaWVyID0gY2Fpcm9fd2luMzJfc2NhbGVkX2Zv
bnRfZ2V0X21ldHJpY3NfZmFjdG9yKHNjYWxlZEZvbnQpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
OworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5z
Y2FsZWRGb250KCk7CisgICAgY29uc3QgZG91YmxlIG1ldHJpY3NNdWx0aXBsaWVyID0gMS4wIC8g
MzI7CiAgICAgcmV0dXJuIHdpZHRoICogbWV0cmljc011bHRpcGxpZXI7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407628</attachid>
            <date>2020-08-31 14:29:05 -0700</date>
            <delta_ts>2022-04-07 21:57:44 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>dwrite.diff</filename>
            <type>text/plain</type>
            <size>4384</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKaW5kZXggOGI2ODI1ZjNmMTk0
Li4wYjQxOGYwYTg3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3Bw
CkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1
ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQK
KyNpbmNsdWRlIDxkd3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKQEAgLTY0LDcg
KzY4LDEyIEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mCiAKICAgICBhdXRvIGhmb250ID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQpKTsKIAorI2lmZGVmIENB
SVJPX0hBU19EV1JJVEVfRk9OVAorICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNh
aXJvX2R3cml0ZV9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChoZm9udC5nZXQoKSk7CisgICAg
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9zZXRfcmVuZGVyaW5nX21vZGUoZm9udEZhY2UsIERXUklU
RV9SRU5ERVJJTkdfTU9ERV9HRElfQ0xBU1NJQyk7CisjZWxzZQogICAgIGNhaXJvX2ZvbnRfZmFj
ZV90KiBmb250RmFjZSA9IGNhaXJvX3dpbjMyX2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2hmb250KGhm
b250LmdldCgpKTsKKyNlbmRpZgogCiAgICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1E
YXRhKFdURk1vdmUoaGZvbnQpLCBmb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAppbmRleCBhMWRiNTJlZTFjNmIuLmY2YjYwM2Qy
MDY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKQEAgLTM0LDEyICszNCwy
MCBAQAogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KIAorI2lmZGVmIENBSVJPX0hBU19EV1JJ
VEVfRk9OVAorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQs
IGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSkKIHsKKyNpZmRlZiBDQUlST19I
QVNfRFdSSVRFX0ZPTlQKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjYWlyb19k
d3JpdGVfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9udCk7CisgICAgY2Fpcm9fZHdyaXRl
X2ZvbnRfZmFjZV9zZXRfcmVuZGVyaW5nX21vZGUoZm9udEZhY2UsIERXUklURV9SRU5ERVJJTkdf
TU9ERV9HRElfQ0xBU1NJQyk7CisjZWxzZQogICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSA9IGNhaXJvX3dpbjMyX2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2hmb250KGZvbnQpOworI2VuZGlm
CiAKICAgICBjYWlyb19tYXRyaXhfdCBzaXplTWF0cml4LCBjdG07CiAgICAgY2Fpcm9fbWF0cml4
X2luaXRfaWRlbnRpdHkoJmN0bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKaW5kZXgg
NDQ2ZTBhMTY3ZDcyLi41YmY1MDJmMjI5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5j
cHAKQEAgLTU5LDE4ICs1OSwzMyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBIV25kREMgZGMoMCk7Ci0gICAgU2F2ZURDKGRjKTsKLQog
ICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5zY2Fs
ZWRGb250KCk7CisjaWZkZWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisgICAgY2Fpcm9fZm9udF9l
eHRlbnRzX3QgZm9udEV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhzY2Fs
ZWRGb250LCAmZm9udEV4dGVudHMpOworCisgICAgZmxvYXQgYXNjZW50ID0gZm9udEV4dGVudHMu
YXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQgPSBmb250RXh0ZW50cy5kZXNjZW50OworICAgIGZs
b2F0IGxpbmVHYXAgPSBmb250RXh0ZW50cy5oZWlnaHQgLSBmb250RXh0ZW50cy5hc2NlbnQgLSBm
b250RXh0ZW50cy5kZXNjZW50OworCisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50
KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisgICAgbV9mb250TWV0
cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNp
bmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCkp
OworI2Vsc2UKICAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxpZXIgPSBjYWlyb193aW4z
Ml9zY2FsZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVkRm9udCkgKiBtX3BsYXRmb3Jt
RGF0YS5zaXplKCk7CiAKKyAgICBIV25kREMgZGMoMCk7CisgICAgU2F2ZURDKGRjKTsKICAgICBj
YWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9udChzY2FsZWRGb250LCBkYyk7CiAKICAg
ICAvLyBGSVhNRTogTmVlZHMgdG8gdGFrZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBpbnRv
IGFjY291bnQKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk5MTg2CiAgICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljczsKICAgICBHZXRUZXh0TWV0cmljcyhk
YywgJnRleHRNZXRyaWNzKTsKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQo
c2NhbGVkRm9udCk7CisgICAgUmVzdG9yZURDKGRjLCAtMSk7CisKICAgICBmbG9hdCBhc2NlbnQg
PSB0ZXh0TWV0cmljcy50bUFzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVyOwogICAgIGZsb2F0IGRl
c2NlbnQgPSB0ZXh0TWV0cmljcy50bURlc2NlbnQgKiBtZXRyaWNzTXVsdGlwbGllcjsKICAgICBm
bG9hdCBsaW5lR2FwID0gdGV4dE1ldHJpY3MudG1FeHRlcm5hbExlYWRpbmcgKiBtZXRyaWNzTXVs
dGlwbGllcjsKQEAgLTgxLDE4ICs5NiwxNiBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRm
KGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7CiAgICAgbV9hdmdDaGFyV2lkdGggPSB0ZXh0
TWV0cmljcy50bUF2ZUNoYXJXaWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVyOwogICAgIG1fbWF4Q2hh
cldpZHRoID0gdGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGggKiBtZXRyaWNzTXVsdGlwbGllcjsK
KyNlbmRpZgogCiAgICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50czsKICAgICBjYWlyb19z
Y2FsZWRfZm9udF90ZXh0X2V4dGVudHMoc2NhbGVkRm9udCwgIngiLCAmZXh0ZW50cyk7CiAgICAg
ZmxvYXQgeEhlaWdodCA9IC1leHRlbnRzLnlfYmVhcmluZzsKIAogICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2Zv
bnQoc2NhbGVkRm9udCk7CiAKICAgICBtX3NjcmlwdENhY2hlID0gMDsKICAgICBtX3NjcmlwdEZv
bnRQcm9wZXJ0aWVzID0gMDsKLQotICAgIFJlc3RvcmVEQyhkYywgLTEpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457016</attachid>
            <date>2022-04-07 21:57:44 -0700</date>
            <delta_ts>2022-05-17 00:47:55 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>dwrite.diff</filename>
            <type>text/plain</type>
            <size>6128</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IDIxOTYyNDQwNDAwZi4uMjlk
N2M1NjNhMDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTUzLDYg
KzUzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKICAgICBjb21jdGwzMgogICAg
IGNyeXB0MzIKICAgICBkZWxheWltcAorICAgIGR3cml0ZQogICAgIGlwaGxwYXBpCiAgICAgcnBj
cnQ0CiAgICAgc2hsd2FwaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcApp
bmRleCAzYzFkNGUyZjNjNzUuLjU0MDRjZTI2Y2FhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGFDYWlyby5jcHAKQEAgLTM0LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjYWlyb19mb250X2ZhY2VfdCogY3JlYXRlQ2Fpcm9EV3JpdGVGb250RmFjZShIRk9OVCBm
b250KTsKKwogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIEZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0aW9uRGF0YSYmIGNyZWF0
aW9uRGF0YSkKICAgICA6IG5hbWUobmFtZSkKICAgICAsIGNyZWF0aW9uRGF0YShXVEZNb3ZlKGNy
ZWF0aW9uRGF0YSkpCkBAIC02OCw3ICs3MCwxMSBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJgog
CiAgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZs
b2dGb250KSk7CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyAgICBjYWlyb19mb250
X2ZhY2VfdCogZm9udEZhY2UgPSBjcmVhdGVDYWlyb0RXcml0ZUZvbnRGYWNlKGhmb250LmdldCgp
KTsKKyNlbHNlCiAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJf
Zm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoaGZvbnQuZ2V0KCkpOworI2VuZGlmCiAKICAgICBG
b250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGZvbnRGYWNl
LCBzaXplLCBib2xkLCBpdGFsaWMsICZjcmVhdGlvbkRhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwCmluZGV4IDMxYTFlNWM1MzFmMi4uNWNkMTBlMWNmODAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcApAQCAtMzcsMTEgKzM3LDYzIEBACiAKICNpbmNs
dWRlIDxjYWlyby13aW4zMi5oPgogCisjaWZkZWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisjaW5j
bHVkZSA8ZHdyaXRlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWZkZWYg
Q0FJUk9fSEFTX0RXUklURV9GT05UCitzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIGdldERXcml0
ZUdkaUludGVyb3AoKQoreworICAgIHN0YXRpYyBDT01QdHI8SURXcml0ZUdkaUludGVyb3A+IGdk
aUludGVyb3A7CisgICAgaWYgKGdkaUludGVyb3ApCisgICAgICAgIHJldHVybiBnZGlJbnRlcm9w
LmdldCgpOworICAgIENPTVB0cjxJRFdyaXRlRmFjdG9yeT4gZmFjdG9yeTsKKyAgICBIUkVTVUxU
IGhyID0gRFdyaXRlQ3JlYXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwgX191
dWlkb2YoSURXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PElVbmtub3duKio+KCZmYWN0
b3J5KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgaHIgPSBmYWN0
b3J5LT5HZXRHZGlJbnRlcm9wKCZnZGlJbnRlcm9wKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKKyAgICByZXR1cm4gZ2RpSW50ZXJvcC5nZXQoKTsKK30KKworY2Fpcm9fZm9u
dF9mYWNlX3QqCitjcmVhdGVDYWlyb0RXcml0ZUZvbnRGYWNlKEhGT05UIGZvbnQpCit7CisgICAg
SURXcml0ZUdkaUludGVyb3AqIGdkaUludGVyb3AgPSBnZXREV3JpdGVHZGlJbnRlcm9wKCk7CisK
KyAgICBib29sIHJldHJ5ID0gZmFsc2U7CisgICAgR0RJT2JqZWN0PEhGT05UPiByZXRyeUZvbnQ7
CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gZHdGYWNlOworICAgIEhXbmREQyBoZGMobnVs
bHB0cik7CisgICAgd2hpbGUgKGZvbnQpIHsKKyAgICAgICAgSEdESU9CSiBvbGRGb250ID0gU2Vs
ZWN0T2JqZWN0KGhkYywgZm9udCk7CisgICAgICAgIEhSRVNVTFQgaHIgPSBnZGlJbnRlcm9wLT5D
cmVhdGVGb250RmFjZUZyb21IZGMoaGRjLCAmZHdGYWNlKTsKKyAgICAgICAgU2VsZWN0T2JqZWN0
KGhkYywgb2xkRm9udCk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmIChyZXRyeSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyBDcmVhdGVGb250RmFjZUZyb21IZGMgbWF5IGZhaWwgaWYgdGhlIGZvbnQgc2l6ZSBpcyB0b28g
bGFyZ2UuIFJldHJ5IGl0IGJ5IGNyZWF0aW5nIGEgc21hbGxlciBmb250LgorICAgICAgICBMT0dG
T05UIGxvZ2ZvbnQ7CisgICAgICAgIEdldE9iamVjdChmb250LCBzaXplb2YobG9nZm9udCksICZs
b2dmb250KTsKKyAgICAgICAgbG9nZm9udC5sZkhlaWdodCA9IC0zMjsKKyAgICAgICAgcmV0cnlG
b250ID0gYWRvcHRHRElPYmplY3QoQ3JlYXRlRm9udEluZGlyZWN0KCZsb2dmb250KSk7CisgICAg
ICAgIGZvbnQgPSByZXRyeUZvbnQuZ2V0KCk7CisgICAgICAgIHJldHJ5ID0gdHJ1ZTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlQoZHdGYWNlKTsKKyAgICByZXR1cm4gY2Fpcm9fZHdyaXRlX2Zv
bnRfZmFjZV9jcmVhdGVfZm9yX2R3cml0ZV9mb250ZmFjZShkd0ZhY2UuZ2V0KCkpOworfQorI2Vu
ZGlmCisKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250
LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpCiB7CisjaWZkZWYgQ0FJUk9f
SEFTX0RXUklURV9GT05UCisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY3JlYXRl
Q2Fpcm9EV3JpdGVGb250RmFjZShmb250KTsKKyNlbHNlCiAgICAgY2Fpcm9fZm9udF9mYWNlX3Qq
IGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9udCk7
CisjZW5kaWYKIAogICAgIGNhaXJvX21hdHJpeF90IHNpemVNYXRyaXgsIGN0bTsKICAgICBjYWly
b19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNw
cAppbmRleCA2ZmQzZDNjNTk1MjYuLmFlYjBhZTAyOWE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNh
aXJvV2luLmNwcApAQCAtNTksMTggKzU5LDMzIEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhXbmREQyBkYygwKTsKLSAgICBTYXZlREMo
ZGMpOwotCiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IG1fcGxhdGZvcm1E
YXRhLnNjYWxlZEZvbnQoKTsKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyAgICBjYWly
b19mb250X2V4dGVudHNfdCBmb250RXh0ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9leHRl
bnRzKHNjYWxlZEZvbnQsICZmb250RXh0ZW50cyk7CisKKyAgICBmbG9hdCBhc2NlbnQgPSBmb250
RXh0ZW50cy5hc2NlbnQ7CisgICAgZmxvYXQgZGVzY2VudCA9IGZvbnRFeHRlbnRzLmRlc2NlbnQ7
CisgICAgZmxvYXQgbGluZUdhcCA9IGZvbnRFeHRlbnRzLmhlaWdodCAtIGZvbnRFeHRlbnRzLmFz
Y2VudCAtIGZvbnRFeHRlbnRzLmRlc2NlbnQ7CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2Vu
dChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRM
aW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihs
aW5lR2FwKSk7CisjZWxzZQogICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNzTXVsdGlwbGllciA9IGNh
aXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRyaWNzX2ZhY3RvcihzY2FsZWRGb250KSAqIG1f
cGxhdGZvcm1EYXRhLnNpemUoKTsKIAorICAgIEhXbmREQyBkYygwKTsKKyAgICBTYXZlREMoZGMp
OwogICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X3NlbGVjdF9mb250KHNjYWxlZEZvbnQsIGRj
KTsKIAogICAgIC8vIEZJWE1FOiBOZWVkcyB0byB0YWtlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBm
bGFnIGludG8gYWNjb3VudAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTkxODYKICAgICBURVhUTUVUUklDIHRleHRNZXRyaWNzOwogICAgIEdldFRleHRN
ZXRyaWNzKGRjLCAmdGV4dE1ldHJpY3MpOworICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2Rv
bmVfZm9udChzY2FsZWRGb250KTsKKyAgICBSZXN0b3JlREMoZGMsIC0xKTsKKwogICAgIGZsb2F0
IGFzY2VudCA9IHRleHRNZXRyaWNzLnRtQXNjZW50ICogbWV0cmljc011bHRpcGxpZXI7CiAgICAg
ZmxvYXQgZGVzY2VudCA9IHRleHRNZXRyaWNzLnRtRGVzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVy
OwogICAgIGZsb2F0IGxpbmVHYXAgPSB0ZXh0TWV0cmljcy50bUV4dGVybmFsTGVhZGluZyAqIG1l
dHJpY3NNdWx0aXBsaWVyOwpAQCAtODEsMTggKzk2LDE2IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1J
bml0KCkKICAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSAr
IGxyb3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKICAgICBtX2F2Z0NoYXJXaWR0
aCA9IHRleHRNZXRyaWNzLnRtQXZlQ2hhcldpZHRoICogbWV0cmljc011bHRpcGxpZXI7CiAgICAg
bV9tYXhDaGFyV2lkdGggPSB0ZXh0TWV0cmljcy50bU1heENoYXJXaWR0aCAqIG1ldHJpY3NNdWx0
aXBsaWVyOworI2VuZGlmCiAKICAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwogICAg
IGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhzY2FsZWRGb250LCAieCIsICZleHRlbnRz
KTsKICAgICBmbG9hdCB4SGVpZ2h0ID0gLWV4dGVudHMueV9iZWFyaW5nOwogCiAgICAgbV9mb250
TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250
X2RvbmVfZm9udChzY2FsZWRGb250KTsKIAogICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwogICAgIG1f
c2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwotCi0gICAgUmVzdG9yZURDKGRjLCAtMSk7CiB9CiAK
IHZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459487</attachid>
            <date>2022-05-17 00:47:55 -0700</date>
            <delta_ts>2023-01-18 17:32:22 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>dwrite.4.diff</filename>
            <type>text/plain</type>
            <size>7291</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IDIxOTYyNDQwNDAwZi4uMjlk
N2M1NjNhMDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTUzLDYg
KzUzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKICAgICBjb21jdGwzMgogICAg
IGNyeXB0MzIKICAgICBkZWxheWltcAorICAgIGR3cml0ZQogICAgIGlwaGxwYXBpCiAgICAgcnBj
cnQ0CiAgICAgc2hsd2FwaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDI2MmYw
ZDYwMmI4MC4uYjhiOWQxMDg3NTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBA
IC00MTQsMTEgKzQxNCwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5
cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4g
Y2Fpcm9HbHlwaHM7CisgICAgY2Fpcm9HbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1H
bHlwaHMpOwogICAgIHsKICAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBj
YWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07CisjaWZkZWYg
Q0FJUk9fSEFTX0RXUklURV9GT05UCisgICAgICAgICAgICAvLyBHbHlwaEJ1ZmZlcjo6bWFrZUds
eXBoSW52aXNpYmxlIGV4cGVjdHMgMHhGRkZGIGdseXBoIGlzIGludmlzaWJsZS4gSG93ZXZlciwg
RGlyZWN0V3JpdGUgc2hvd3MgYSBibGFuayBzcXVhcmUgZm9yIGl0LgorICAgICAgICAgICAgaWYg
KGdseXBoc1tpXSAhPSAweEZGRkYpCisjZW5kaWYKKyAgICAgICAgICAgICAgICBjYWlyb0dseXBo
cy51bmNoZWNrZWRBcHBlbmQoeyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfSk7CiAgICAg
ICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAgICAgICAgICAgICB5T2Zm
c2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCmluZGV4IGFmMmU0OTdmYzUzNS4uMDdjNjJiYzM1M2VmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcApAQCAtMzQsNiArMzQsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NhaXJvX2ZvbnRfZmFjZV90KiBjcmVhdGVDYWly
b0RXcml0ZUZvbnRGYWNlKEhGT05UIGZvbnQpOworCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpG
b250Q3VzdG9tUGxhdGZvcm1EYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgRm9udFBsYXRmb3JtRGF0
YTo6Q3JlYXRpb25EYXRhJiYgY3JlYXRpb25EYXRhKQogICAgIDogbmFtZShuYW1lKQogICAgICwg
Y3JlYXRpb25EYXRhKFdURk1vdmUoY3JlYXRpb25EYXRhKSkKQEAgLTY4LDcgKzcwLDExIEBAIEZv
bnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mCiAKICAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQpKTsKIAorI2lmZGVmIENBSVJPX0hBU19EV1JJ
VEVfRk9OVAorICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNyZWF0ZUNhaXJvRFdy
aXRlRm9udEZhY2UoaGZvbnQuZ2V0KCkpOworI2Vsc2UKICAgICBjYWlyb19mb250X2ZhY2VfdCog
Zm9udEZhY2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChoZm9udC5n
ZXQoKSk7CisjZW5kaWYKIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShX
VEZNb3ZlKGhmb250KSwgZm9udEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYywgJmNyZWF0aW9uRGF0
YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKaW5kZXggMzFhMWU1YzUzMWYy
Li41Y2QxMGUxY2Y4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCkBAIC0z
NywxMSArMzcsNjMgQEAKIAogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CiAKKyNpZmRlZiBDQUlS
T19IQVNfRFdSSVRFX0ZPTlQKKyNpbmNsdWRlIDxkd3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKK3N0YXRpYyBJRFdy
aXRlR2RpSW50ZXJvcCogZ2V0RFdyaXRlR2RpSW50ZXJvcCgpCit7CisgICAgc3RhdGljIENPTVB0
cjxJRFdyaXRlR2RpSW50ZXJvcD4gZ2RpSW50ZXJvcDsKKyAgICBpZiAoZ2RpSW50ZXJvcCkKKyAg
ICAgICAgcmV0dXJuIGdkaUludGVyb3AuZ2V0KCk7CisgICAgQ09NUHRyPElEV3JpdGVGYWN0b3J5
PiBmYWN0b3J5OworICAgIEhSRVNVTFQgaHIgPSBEV3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9G
QUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihJRFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0
X2Nhc3Q8SVVua25vd24qKj4oJmZhY3RvcnkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICBociA9IGZhY3RvcnktPkdldEdkaUludGVyb3AoJmdkaUludGVyb3ApOwor
ICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIHJldHVybiBnZGlJbnRlcm9w
LmdldCgpOworfQorCitjYWlyb19mb250X2ZhY2VfdCoKK2NyZWF0ZUNhaXJvRFdyaXRlRm9udEZh
Y2UoSEZPTlQgZm9udCkKK3sKKyAgICBJRFdyaXRlR2RpSW50ZXJvcCogZ2RpSW50ZXJvcCA9IGdl
dERXcml0ZUdkaUludGVyb3AoKTsKKworICAgIGJvb2wgcmV0cnkgPSBmYWxzZTsKKyAgICBHRElP
YmplY3Q8SEZPTlQ+IHJldHJ5Rm9udDsKKyAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBkd0Zh
Y2U7CisgICAgSFduZERDIGhkYyhudWxscHRyKTsKKyAgICB3aGlsZSAoZm9udCkgeworICAgICAg
ICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBmb250KTsKKyAgICAgICAgSFJF
U1VMVCBociA9IGdkaUludGVyb3AtPkNyZWF0ZUZvbnRGYWNlRnJvbUhkYyhoZGMsICZkd0ZhY2Up
OworICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAgICAgaWYgKFNVQ0NF
RURFRChocikpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHJldHJ5KQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIC8vIENyZWF0ZUZvbnRGYWNlRnJvbUhkYyBtYXkgZmFpbCBp
ZiB0aGUgZm9udCBzaXplIGlzIHRvbyBsYXJnZS4gUmV0cnkgaXQgYnkgY3JlYXRpbmcgYSBzbWFs
bGVyIGZvbnQuCisgICAgICAgIExPR0ZPTlQgbG9nZm9udDsKKyAgICAgICAgR2V0T2JqZWN0KGZv
bnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOworICAgICAgICBsb2dmb250LmxmSGVpZ2h0
ID0gLTMyOworICAgICAgICByZXRyeUZvbnQgPSBhZG9wdEdESU9iamVjdChDcmVhdGVGb250SW5k
aXJlY3QoJmxvZ2ZvbnQpKTsKKyAgICAgICAgZm9udCA9IHJldHJ5Rm9udC5nZXQoKTsKKyAgICAg
ICAgcmV0cnkgPSB0cnVlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChkd0ZhY2UpOworICAg
IHJldHVybiBjYWlyb19kd3JpdGVfZm9udF9mYWNlX2NyZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNl
KGR3RmFjZS5nZXQoKSk7Cit9CisjZW5kaWYKKwogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNl
TmFtZSkKIHsKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyAgICBjYWlyb19mb250X2Zh
Y2VfdCogZm9udEZhY2UgPSBjcmVhdGVDYWlyb0RXcml0ZUZvbnRGYWNlKGZvbnQpOworI2Vsc2UK
ICAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2Vf
Y3JlYXRlX2Zvcl9oZm9udChmb250KTsKKyNlbmRpZgogCiAgICAgY2Fpcm9fbWF0cml4X3Qgc2l6
ZU1hdHJpeCwgY3RtOwogICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Np
bXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCmluZGV4IDZmZDNkM2M1OTUyNi4uYWViMGFlMDI5YTlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCkBAIC01OSwxOCArNTksMzMgQEAgdm9p
ZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSFdu
ZERDIGRjKDApOwotICAgIFNhdmVEQyhkYyk7Ci0KICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBz
Y2FsZWRGb250ID0gbV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpOworI2lmZGVmIENBSVJPX0hB
U19EV1JJVEVfRk9OVAorICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRFeHRlbnRzOworICAg
IGNhaXJvX3NjYWxlZF9mb250X2V4dGVudHMoc2NhbGVkRm9udCwgJmZvbnRFeHRlbnRzKTsKKwor
ICAgIGZsb2F0IGFzY2VudCA9IGZvbnRFeHRlbnRzLmFzY2VudDsKKyAgICBmbG9hdCBkZXNjZW50
ID0gZm9udEV4dGVudHMuZGVzY2VudDsKKyAgICBmbG9hdCBsaW5lR2FwID0gZm9udEV4dGVudHMu
aGVpZ2h0IC0gZm9udEV4dGVudHMuYXNjZW50IC0gZm9udEV4dGVudHMuZGVzY2VudDsKKworICAg
IG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXRE
ZXNjZW50KGRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3Vu
ZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKKyNlbHNlCiAgICAgY29uc3QgZG91Ymxl
IG1ldHJpY3NNdWx0aXBsaWVyID0gY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfZ2V0X21ldHJpY3Nf
ZmFjdG9yKHNjYWxlZEZvbnQpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogCisgICAgSFduZERD
IGRjKDApOworICAgIFNhdmVEQyhkYyk7CiAgICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2Vs
ZWN0X2ZvbnQoc2NhbGVkRm9udCwgZGMpOwogCiAgICAgLy8gRklYTUU6IE5lZWRzIHRvIHRha2Ug
T1MvMiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgaW50byBhY2NvdW50CiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4NgogICAgIFRFWFRNRVRSSUMgdGV4
dE1ldHJpY3M7CiAgICAgR2V0VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljcyk7CisgICAgY2Fp
cm9fd2luMzJfc2NhbGVkX2ZvbnRfZG9uZV9mb250KHNjYWxlZEZvbnQpOworICAgIFJlc3RvcmVE
QyhkYywgLTEpOworCiAgICAgZmxvYXQgYXNjZW50ID0gdGV4dE1ldHJpY3MudG1Bc2NlbnQgKiBt
ZXRyaWNzTXVsdGlwbGllcjsKICAgICBmbG9hdCBkZXNjZW50ID0gdGV4dE1ldHJpY3MudG1EZXNj
ZW50ICogbWV0cmljc011bHRpcGxpZXI7CiAgICAgZmxvYXQgbGluZUdhcCA9IHRleHRNZXRyaWNz
LnRtRXh0ZXJuYWxMZWFkaW5nICogbWV0cmljc011bHRpcGxpZXI7CkBAIC04MSwxOCArOTYsMTYg
QEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNw
YWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdh
cCkpOwogICAgIG1fYXZnQ2hhcldpZHRoID0gdGV4dE1ldHJpY3MudG1BdmVDaGFyV2lkdGggKiBt
ZXRyaWNzTXVsdGlwbGllcjsKICAgICBtX21heENoYXJXaWR0aCA9IHRleHRNZXRyaWNzLnRtTWF4
Q2hhcldpZHRoICogbWV0cmljc011bHRpcGxpZXI7CisjZW5kaWYKIAogICAgIGNhaXJvX3RleHRf
ZXh0ZW50c190IGV4dGVudHM7CiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKHNj
YWxlZEZvbnQsICJ4IiwgJmV4dGVudHMpOwogICAgIGZsb2F0IHhIZWlnaHQgPSAtZXh0ZW50cy55
X2JlYXJpbmc7CiAKICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci0gICAg
Y2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfZG9uZV9mb250KHNjYWxlZEZvbnQpOwogCiAgICAgbV9z
Y3JpcHRDYWNoZSA9IDA7CiAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0KLSAgICBS
ZXN0b3JlREMoZGMsIC0xKTsKIH0KIAogdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>459562</attachid>
            <date>2022-05-18 18:42:56 -0700</date>
            <delta_ts>2022-05-18 18:42:56 -0700</delta_ts>
            <desc>small-font-test.html</desc>
            <filename>small-font-test.html</filename>
            <type>text/html</type>
            <size>1656</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgogICAgPGhlYWQ+Cgk8bWV0YSBjaGFyc2V0PSJVVEYtOCI+
Cgk8c3R5bGU+CgkgICNtYWluIHsKCSAgICAgIG1hcmdpbjogMWVtIDA7CgkgIH0KCTwvc3R5bGU+
CiAgICAgICAgPHNjcmlwdD4KCSB2YXIgZm9ybQogICAgICAgICBmdW5jdGlvbiB1cGRhdGUoKSB7
CgkgICAgIHZhciB0ZXh0ID0gZm9ybS50ZXh0LnZhbHVlOwoJICAgICB2YXIgZm9udCA9IGZvcm0u
Zm9udC52YWx1ZTsKCSAgICAgdmFyIHNtb290aGluZyA9IGZvcm0uc21vb3RoaW5nLnZhbHVlOwoJ
ICAgICB2YXIgbWFpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluJyk7CgkgICAgIG1h
aW4uaW5uZXJIVE1MID0gJyc7CgkgICAgIGZvciAodmFyIGk9ODsgaTwxNzsgaSsrKSB7CgkJIHZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkgZGl2LnN0eWxlLmZvbnRT
aXplID0gaSArICdweCc7CgkJIGRpdi5zdHlsZS5mb250RmFtaWx5ID0gZm9udDsKCQkgZGl2LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpdi5zdHlsZS5mb250U2l6ZSArICcg
JyArIHRleHQpKTsKCQkgaWYgKCdmb250U21vb3RoaW5nJyBpbiBkaXYuc3R5bGUpCgkJICAgICBk
aXYuc3R5bGUuZm9udFNtb290aGluZyA9IHNtb290aGluZzsKCQkgaWYgKCd3ZWJraXRGb250U21v
b3RoaW5nJ2luIGRpdi5zdHlsZSkKCQkgICAgIGRpdi5zdHlsZS53ZWJraXRGb250U21vb3RoaW5n
ID0gc21vb3RoaW5nOwoJCSBtYWluLmFwcGVuZENoaWxkKGRpdik7CgkgICAgIH0KCgkgfQoJIHdp
bmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKCSAgICAgZm9ybSA9IGRvY3VtZW50LmZvcm1zLm1h
aW5Gb3JtOwoJICAgICB2YXIgaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ImlucHV0Iik7CgkgICAgIGZvciAoaT0wOyBpPGlucHV0cy5sZW5ndGg7IGkrKykKCQkgaW5wdXRz
W2ldLm9uY2hhbmdlID0gdXBkYXRlOwoJICAgICB1cGRhdGUoKTsKCSB9CgoJPC9zY3JpcHQ+CiAg
ICA8L2hlYWQ+CiAgICA8Ym9keT4KCTxmb3JtIG5hbWU9Im1haW5Gb3JtIj4KCSAgICB0ZXh0OiA8
aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGV4dCIgdmFsdWU9IuODi+OCs+aXpSI+PGJyPgoJICAg
IGZvbnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb250IiB2YWx1ZT0ic2Fucy1zZXJpZiI+
PGJyPgoJICAgIAoJICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6CgkgICAgPGxhYmVsPjxpbnB1
dCB0eXBlPSJyYWRpbyIgbmFtZT0ic21vb3RoaW5nIiB2YWx1ZT0iYXV0byI+YXV0bzwvbGFiZWw+
CgkgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic21vb3RoaW5nIiB2YWx1ZT0i
bm9uZSI+bm9uZTwvbGFiZWw+CgkgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0i
c21vb3RoaW5nIiB2YWx1ZT0ic3VicGl4ZWwtYW50aWFsaWFzZWQiPnN1YnBpeGVsLWFudGlhbGlh
c2VkPC9sYWJlbD4KCSAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJzbW9vdGhp
bmciIHZhbHVlPSJhbnRpYWxpYXNlZCIgY2hlY2tlZD5hbnRpYWxpYXNlZDwvbGFiZWw+CgkgICAg
PGJyPgoJPC9mb3JtPgoJPGRpdiBpZD0ibWFpbiI+CgoJPC9kaXY+CiAgICA8L2JvZHk+CjwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464549</attachid>
            <date>2023-01-18 17:32:22 -0800</date>
            <delta_ts>2023-02-09 22:50:19 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>cairo-dwrite.patch</filename>
            <type>text/plain</type>
            <size>7506</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IDYzMTg3NDJiMzE0Zi4uYmZl
ZmNjNWU1MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTQ2LDYg
KzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKIGxpc3QoQVBQRU5EIFdlYkNv
cmVfTElCUkFSSUVTCiAgICAgY3J5cHQzMgorICAgIGR3cml0ZQogICAgIGlwaGxwYXBpCiAgICAg
dXNwMTAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBlZmY4OWYyMDEwNDEu
LjRlMTFhNWMwYTU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzg3LDEx
ICszODcsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNh
aXJvR2x5cGhzKG51bUdseXBocyk7CisgICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5
cGhzOworICAgIGNhaXJvR2x5cGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtR2x5cGhzKTsK
ICAgICB7CiAgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgY2Fpcm9HbHlw
aHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworI2lmZGVmIENBSVJPX0hB
U19EV1JJVEVfRk9OVAorICAgICAgICAgICAgLy8gR2x5cGhCdWZmZXI6Om1ha2VHbHlwaEludmlz
aWJsZSBleHBlY3RzIDB4RkZGRiBnbHlwaCBpcyBpbnZpc2libGUuIEhvd2V2ZXIsIERpcmVjdFdy
aXRlIHNob3dzIGEgYmxhbmsgc3F1YXJlIGZvciBpdC4KKyAgICAgICAgICAgIGlmIChnbHlwaHNb
aV0gIT0gMHhGRkZGKQorI2VuZGlmCisgICAgICAgICAgICAgICAgY2Fpcm9HbHlwaHMudW5jaGVj
a2VkQXBwZW5kKHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH0pOwogICAgICAgICAgICAg
eE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICAgICAgeU9mZnNldCArPSBh
ZHZhbmNlc1tpXS5oZWlnaHQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YUNhaXJvLmNwcAppbmRleCBhZjJlNDk3ZmM1MzUuLjA3YzYyYmMzNTNlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGFDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKQEAgLTM0LDYgKzM0LDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjYWlyb19mb250X2ZhY2VfdCogY3JlYXRlQ2Fpcm9EV3JpdGVG
b250RmFjZShIRk9OVCBmb250KTsKKwogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIEZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0
aW9uRGF0YSYmIGNyZWF0aW9uRGF0YSkKICAgICA6IG5hbWUobmFtZSkKICAgICAsIGNyZWF0aW9u
RGF0YShXVEZNb3ZlKGNyZWF0aW9uRGF0YSkpCkBAIC02OCw3ICs3MCwxMSBAQCBGb250UGxhdGZv
cm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJgogCiAgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRl
Rm9udEluZGlyZWN0KCZsb2dGb250KSk7CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQK
KyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjcmVhdGVDYWlyb0RXcml0ZUZvbnRG
YWNlKGhmb250LmdldCgpKTsKKyNlbHNlCiAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNl
ID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoaGZvbnQuZ2V0KCkpOwor
I2VuZGlmCiAKICAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZSho
Zm9udCksIGZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMsICZjcmVhdGlvbkRhdGEpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRm
b3JtRGF0YUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCmluZGV4IDMxYTFlNWM1MzFmMi4uNWNkMTBl
MWNmODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcApAQCAtMzcsMTEgKzM3
LDYzIEBACiAKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgogCisjaWZkZWYgQ0FJUk9fSEFTX0RX
UklURV9GT05UCisjaW5jbHVkZSA8ZHdyaXRlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjaWZkZWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCitzdGF0aWMgSURXcml0ZUdkaUlu
dGVyb3AqIGdldERXcml0ZUdkaUludGVyb3AoKQoreworICAgIHN0YXRpYyBDT01QdHI8SURXcml0
ZUdkaUludGVyb3A+IGdkaUludGVyb3A7CisgICAgaWYgKGdkaUludGVyb3ApCisgICAgICAgIHJl
dHVybiBnZGlJbnRlcm9wLmdldCgpOworICAgIENPTVB0cjxJRFdyaXRlRmFjdG9yeT4gZmFjdG9y
eTsKKyAgICBIUkVTVUxUIGhyID0gRFdyaXRlQ3JlYXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9U
WVBFX1NIQVJFRCwgX191dWlkb2YoSURXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PElV
bmtub3duKio+KCZmYWN0b3J5KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CisgICAgaHIgPSBmYWN0b3J5LT5HZXRHZGlJbnRlcm9wKCZnZGlJbnRlcm9wKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICByZXR1cm4gZ2RpSW50ZXJvcC5nZXQoKTsK
K30KKworY2Fpcm9fZm9udF9mYWNlX3QqCitjcmVhdGVDYWlyb0RXcml0ZUZvbnRGYWNlKEhGT05U
IGZvbnQpCit7CisgICAgSURXcml0ZUdkaUludGVyb3AqIGdkaUludGVyb3AgPSBnZXREV3JpdGVH
ZGlJbnRlcm9wKCk7CisKKyAgICBib29sIHJldHJ5ID0gZmFsc2U7CisgICAgR0RJT2JqZWN0PEhG
T05UPiByZXRyeUZvbnQ7CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gZHdGYWNlOworICAg
IEhXbmREQyBoZGMobnVsbHB0cik7CisgICAgd2hpbGUgKGZvbnQpIHsKKyAgICAgICAgSEdESU9C
SiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgZm9udCk7CisgICAgICAgIEhSRVNVTFQgaHIg
PSBnZGlJbnRlcm9wLT5DcmVhdGVGb250RmFjZUZyb21IZGMoaGRjLCAmZHdGYWNlKTsKKyAgICAg
ICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChyZXRyeSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAvLyBDcmVhdGVGb250RmFjZUZyb21IZGMgbWF5IGZhaWwgaWYgdGhlIGZv
bnQgc2l6ZSBpcyB0b28gbGFyZ2UuIFJldHJ5IGl0IGJ5IGNyZWF0aW5nIGEgc21hbGxlciBmb250
LgorICAgICAgICBMT0dGT05UIGxvZ2ZvbnQ7CisgICAgICAgIEdldE9iamVjdChmb250LCBzaXpl
b2YobG9nZm9udCksICZsb2dmb250KTsKKyAgICAgICAgbG9nZm9udC5sZkhlaWdodCA9IC0zMjsK
KyAgICAgICAgcmV0cnlGb250ID0gYWRvcHRHRElPYmplY3QoQ3JlYXRlRm9udEluZGlyZWN0KCZs
b2dmb250KSk7CisgICAgICAgIGZvbnQgPSByZXRyeUZvbnQuZ2V0KCk7CisgICAgICAgIHJldHJ5
ID0gdHJ1ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoZHdGYWNlKTsKKyAgICByZXR1cm4g
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2R3cml0ZV9mb250ZmFjZShkd0ZhY2Uu
Z2V0KCkpOworfQorI2VuZGlmCisKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRh
SW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpCiB7
CisjaWZkZWYgQ0FJUk9fSEFTX0RXUklURV9GT05UCisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZv
bnRGYWNlID0gY3JlYXRlQ2Fpcm9EV3JpdGVGb250RmFjZShmb250KTsKKyNlbHNlCiAgICAgY2Fp
cm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9m
b3JfaGZvbnQoZm9udCk7CisjZW5kaWYKIAogICAgIGNhaXJvX21hdHJpeF90IHNpemVNYXRyaXgs
IGN0bTsKICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJv
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YUNhaXJvV2luLmNwcAppbmRleCAwYTNiM2FmOWZlYWYuLjFjYmI2NWU5NDhkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRh
Q2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9T
aW1wbGVGb250RGF0YUNhaXJvV2luLmNwcApAQCAtNTksMTggKzU5LDM2IEBAIHZvaWQgRm9udDo6
cGxhdGZvcm1Jbml0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhXbmREQyBkYygw
KTsKLSAgICBTYXZlREMoZGMpOwotCiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9u
dCA9IG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKTsKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRF
X0ZPTlQKKyAgICAvLyBGSVhNRTogVXNlIElEV3JpdGVGb250RmFjZTo6R2V0TWV0cmljcy4KKyAg
ICAvLyA8aHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvYXBp
L2R3cml0ZS9uZi1kd3JpdGUtaWR3cml0ZWZvbnRmYWNlLWdldG1ldHJpY3M+CisgICAgY2Fpcm9f
Zm9udF9leHRlbnRzX3QgZm9udEV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50
cyhzY2FsZWRGb250LCAmZm9udEV4dGVudHMpOworCisgICAgZmxvYXQgYXNjZW50ID0gZm9udEV4
dGVudHMuYXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQgPSBmb250RXh0ZW50cy5kZXNjZW50Owor
ICAgIGZsb2F0IGxpbmVHYXAgPSBmb250RXh0ZW50cy5oZWlnaHQgLSBmb250RXh0ZW50cy5hc2Nl
bnQgLSBmb250RXh0ZW50cy5kZXNjZW50OworCisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQo
YXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisgICAgbV9m
b250TWV0cmljcy5zZXRDYXBIZWlnaHQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRm
KGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7CisjZWxzZQog
ICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNzTXVsdGlwbGllciA9IGNhaXJvX3dpbjMyX3NjYWxlZF9m
b250X2dldF9tZXRyaWNzX2ZhY3RvcihzY2FsZWRGb250KSAqIG1fcGxhdGZvcm1EYXRhLnNpemUo
KTsKIAorICAgIEhXbmREQyBkYygwKTsKKyAgICBTYXZlREMoZGMpOwogICAgIGNhaXJvX3dpbjMy
X3NjYWxlZF9mb250X3NlbGVjdF9mb250KHNjYWxlZEZvbnQsIGRjKTsKIAogICAgIC8vIEZJWE1F
OiBOZWVkcyB0byB0YWtlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGludG8gYWNjb3VudAog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkxODYKICAg
ICBURVhUTUVUUklDIHRleHRNZXRyaWNzOwogICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdGV4dE1l
dHJpY3MpOworICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2RvbmVfZm9udChzY2FsZWRGb250
KTsKKyAgICBSZXN0b3JlREMoZGMsIC0xKTsKKwogICAgIGZsb2F0IGFzY2VudCA9IHRleHRNZXRy
aWNzLnRtQXNjZW50ICogbWV0cmljc011bHRpcGxpZXI7CiAgICAgZmxvYXQgZGVzY2VudCA9IHRl
eHRNZXRyaWNzLnRtRGVzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVyOwogICAgIGZsb2F0IGNhcEhl
aWdodCA9ICh0ZXh0TWV0cmljcy50bUFzY2VudCAtIHRleHRNZXRyaWNzLnRtSW50ZXJuYWxMZWFk
aW5nKSAqIG1ldHJpY3NNdWx0aXBsaWVyOwpAQCAtODMsMTggKzEwMSwxNiBAQCB2b2lkIEZvbnQ6
OnBsYXRmb3JtSW5pdCgpCiAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRm
KGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7CiAgICAgbV9h
dmdDaGFyV2lkdGggPSB0ZXh0TWV0cmljcy50bUF2ZUNoYXJXaWR0aCAqIG1ldHJpY3NNdWx0aXBs
aWVyOwogICAgIG1fbWF4Q2hhcldpZHRoID0gdGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGggKiBt
ZXRyaWNzTXVsdGlwbGllcjsKKyNlbmRpZgogCiAgICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0
ZW50czsKICAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMoc2NhbGVkRm9udCwgIngi
LCAmZXh0ZW50cyk7CiAgICAgZmxvYXQgeEhlaWdodCA9IC1leHRlbnRzLnlfYmVhcmluZzsKIAog
ICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBjYWlyb193aW4zMl9z
Y2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CiAKICAgICBtX3NjcmlwdENhY2hlID0g
MDsKICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLQotICAgIFJlc3RvcmVEQyhkYywg
LTEpOwogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464937</attachid>
            <date>2023-02-09 22:50:19 -0800</date>
            <delta_ts>2023-02-24 12:20:19 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>6582</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZTlmMTY5MWNkNzc4Li4yOWIxMTRjNTJiZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0yMTYsNiArMjE2LDcgQEAgaWYgKEVOQUJM
RV9WSURFTyBBTkQgVVNFX01FRElBX0ZPVU5EQVRJT04pCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFy
aWVzKE1lZGlhRm91bmRhdGlvbiBJTlRFUkZBQ0UKICAgICAgICAgZDNkOQogICAgICAgICBkZWxh
eWltcAorICAgICAgICBkd3JpdGUKICAgICAgICAgZHh2YTIKICAgICAgICAgZXZyCiAgICAgICAg
IG1mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggNzNkODA4MmQzZGRlLi43NmVh
MzFlMmFmZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTM4NywxMSArMzg3
LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0ds
eXBocyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBoczsK
KyAgICBjYWlyb0dseXBocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUdseXBocyk7CiAgICAg
ewogICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ld
ID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyNpZmRlZiBDQUlST19IQVNfRFdS
SVRFX0ZPTlQKKyAgICAgICAgICAgIC8vIEdseXBoQnVmZmVyOjptYWtlR2x5cGhJbnZpc2libGUg
ZXhwZWN0cyAweEZGRkYgZ2x5cGggaXMgaW52aXNpYmxlLiBIb3dldmVyLCBEaXJlY3RXcml0ZSBz
aG93cyBhIGJsYW5rIHNxdWFyZSBmb3IgaXQuCisgICAgICAgICAgICBpZiAoZ2x5cGhzW2ldICE9
IDB4RkZGRikKKyNlbmRpZgorICAgICAgICAgICAgICAgIGNhaXJvR2x5cGhzLnVuY2hlY2tlZEFw
cGVuZCh7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9KTsKICAgICAgICAgICAgIHhPZmZz
ZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0uaGVpZ2h0KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5j
cHAKaW5kZXggMzFhMWU1YzUzMWYyLi5jZDJhZTNiOWEwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwCkBAIC0zNywxMSArMzcsNjUgQEAKIAogI2luY2x1ZGUgPGNhaXJvLXdp
bjMyLmg+CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyNpbmNsdWRlIDxjYWlyby1k
d3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZmRlZiBDQUlST19I
QVNfRFdSSVRFX0ZPTlQKK3N0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogZ2V0RFdyaXRlR2RpSW50
ZXJvcCgpCit7CisgICAgc3RhdGljIENPTVB0cjxJRFdyaXRlR2RpSW50ZXJvcD4gZ2RpSW50ZXJv
cDsKKyAgICBpZiAoZ2RpSW50ZXJvcCkKKyAgICAgICAgcmV0dXJuIGdkaUludGVyb3AuZ2V0KCk7
CisgICAgQ09NUHRyPElEV3JpdGVGYWN0b3J5PiBmYWN0b3J5OworICAgIEhSRVNVTFQgaHIgPSBE
V3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihJ
RFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmZhY3RvcnkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBociA9IGZhY3RvcnktPkdl
dEdkaUludGVyb3AoJmdkaUludGVyb3ApOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgIHJldHVybiBnZGlJbnRlcm9wLmdldCgpOworfQorCitjYWlyb19mb250X2ZhY2Vf
dCoKK2NyZWF0ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQgZm9udCkKK3sKKyAgICBJRFdyaXRl
R2RpSW50ZXJvcCogZ2RpSW50ZXJvcCA9IGdldERXcml0ZUdkaUludGVyb3AoKTsKKworICAgIGJv
b2wgcmV0cnkgPSBmYWxzZTsKKyAgICBHRElPYmplY3Q8SEZPTlQ+IHJldHJ5Rm9udDsKKyAgICBD
T01QdHI8SURXcml0ZUZvbnRGYWNlPiBkd0ZhY2U7CisgICAgSFduZERDIGhkYyhudWxscHRyKTsK
KyAgICB3aGlsZSAoZm9udCkgeworICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmpl
Y3QoaGRjLCBmb250KTsKKyAgICAgICAgSFJFU1VMVCBociA9IGdkaUludGVyb3AtPkNyZWF0ZUZv
bnRGYWNlRnJvbUhkYyhoZGMsICZkd0ZhY2UpOworICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBv
bGRGb250KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKHJldHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIENyZWF0
ZUZvbnRGYWNlRnJvbUhkYyBtYXkgZmFpbCBpZiB0aGUgZm9udCBzaXplIGlzIHRvbyBsYXJnZS4g
UmV0cnkgaXQgYnkgY3JlYXRpbmcgYSBzbWFsbGVyIGZvbnQuCisgICAgICAgIExPR0ZPTlQgbG9n
Zm9udDsKKyAgICAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQp
OworICAgICAgICBsb2dmb250LmxmSGVpZ2h0ID0gLTMyOworICAgICAgICByZXRyeUZvbnQgPSBh
ZG9wdEdESU9iamVjdChDcmVhdGVGb250SW5kaXJlY3QoJmxvZ2ZvbnQpKTsKKyAgICAgICAgZm9u
dCA9IHJldHJ5Rm9udC5nZXQoKTsKKyAgICAgICAgcmV0cnkgPSB0cnVlOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVChkd0ZhY2UpOworICAgIGF1dG8gZm9udEZhY2UgPSBjYWlyb19kd3JpdGVf
Zm9udF9mYWNlX2NyZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNlKGR3RmFjZS5nZXQoKSk7CisgICAg
Y2Fpcm9fZHdyaXRlX2ZvbnRfZmFjZV9zZXRfbWVhc3VyaW5nX21vZGUoZm9udEZhY2UsIERXUklU
RV9NRUFTVVJJTkdfTU9ERV9HRElfTkFUVVJBTCk7CisgICAgcmV0dXJuIGZvbnRGYWNlOworfQor
I2VuZGlmCisKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBm
b250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpCiB7CisjaWZkZWYgQ0FJ
Uk9fSEFTX0RXUklURV9GT05UCisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY3Jl
YXRlQ2Fpcm9EV3JpdGVGb250RmFjZShmb250KTsKKyNlbHNlCiAgICAgY2Fpcm9fZm9udF9mYWNl
X3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9u
dCk7CisjZW5kaWYKIAogICAgIGNhaXJvX21hdHJpeF90IHNpemVNYXRyaXgsIGN0bTsKICAgICBj
YWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2lu
LmNwcAppbmRleCAwYTNiM2FmOWZlYWYuLjFjYmI2NWU5NDhkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YUNhaXJvV2luLmNwcApAQCAtNTksMTggKzU5LDM2IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhXbmREQyBkYygwKTsKLSAgICBTYXZl
REMoZGMpOwotCiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IG1fcGxhdGZv
cm1EYXRhLnNjYWxlZEZvbnQoKTsKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyAgICAv
LyBGSVhNRTogVXNlIElEV3JpdGVGb250RmFjZTo6R2V0TWV0cmljcy4KKyAgICAvLyA8aHR0cHM6
Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvYXBpL2R3cml0ZS9uZi1k
d3JpdGUtaWR3cml0ZWZvbnRmYWNlLWdldG1ldHJpY3M+CisgICAgY2Fpcm9fZm9udF9leHRlbnRz
X3QgZm9udEV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhzY2FsZWRGb250
LCAmZm9udEV4dGVudHMpOworCisgICAgZmxvYXQgYXNjZW50ID0gZm9udEV4dGVudHMuYXNjZW50
OworICAgIGZsb2F0IGRlc2NlbnQgPSBmb250RXh0ZW50cy5kZXNjZW50OworICAgIGZsb2F0IGxp
bmVHYXAgPSBmb250RXh0ZW50cy5oZWlnaHQgLSBmb250RXh0ZW50cy5hc2NlbnQgLSBmb250RXh0
ZW50cy5kZXNjZW50OworCisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRDYXBIZWlnaHQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdh
cCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBs
cm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7CisjZWxzZQogICAgIGNvbnN0IGRv
dWJsZSBtZXRyaWNzTXVsdGlwbGllciA9IGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRy
aWNzX2ZhY3RvcihzY2FsZWRGb250KSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKIAorICAgIEhX
bmREQyBkYygwKTsKKyAgICBTYXZlREMoZGMpOwogICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250
X3NlbGVjdF9mb250KHNjYWxlZEZvbnQsIGRjKTsKIAogICAgIC8vIEZJWE1FOiBOZWVkcyB0byB0
YWtlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGludG8gYWNjb3VudAogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkxODYKICAgICBURVhUTUVUUklD
IHRleHRNZXRyaWNzOwogICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdGV4dE1ldHJpY3MpOworICAg
IGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2RvbmVfZm9udChzY2FsZWRGb250KTsKKyAgICBSZXN0
b3JlREMoZGMsIC0xKTsKKwogICAgIGZsb2F0IGFzY2VudCA9IHRleHRNZXRyaWNzLnRtQXNjZW50
ICogbWV0cmljc011bHRpcGxpZXI7CiAgICAgZmxvYXQgZGVzY2VudCA9IHRleHRNZXRyaWNzLnRt
RGVzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVyOwogICAgIGZsb2F0IGNhcEhlaWdodCA9ICh0ZXh0
TWV0cmljcy50bUFzY2VudCAtIHRleHRNZXRyaWNzLnRtSW50ZXJuYWxMZWFkaW5nKSAqIG1ldHJp
Y3NNdWx0aXBsaWVyOwpAQCAtODMsMTggKzEwMSwxNiBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5p
dCgpCiAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBs
cm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7CiAgICAgbV9hdmdDaGFyV2lkdGgg
PSB0ZXh0TWV0cmljcy50bUF2ZUNoYXJXaWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVyOwogICAgIG1f
bWF4Q2hhcldpZHRoID0gdGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGggKiBtZXRyaWNzTXVsdGlw
bGllcjsKKyNlbmRpZgogCiAgICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50czsKICAgICBj
YWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMoc2NhbGVkRm9udCwgIngiLCAmZXh0ZW50cyk7
CiAgICAgZmxvYXQgeEhlaWdodCA9IC1leHRlbnRzLnlfYmVhcmluZzsKIAogICAgIG1fZm9udE1l
dHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9k
b25lX2ZvbnQoc2NhbGVkRm9udCk7CiAKICAgICBtX3NjcmlwdENhY2hlID0gMDsKICAgICBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLQotICAgIFJlc3RvcmVEQyhkYywgLTEpOwogfQogCiB2
b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>465156</attachid>
            <date>2023-02-24 12:20:19 -0800</date>
            <delta_ts>2023-03-27 00:06:42 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>6458</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZTlmMTY5MWNkNzc4Li4yOWIxMTRjNTJiZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0yMTYsNiArMjE2LDcgQEAgaWYgKEVOQUJM
RV9WSURFTyBBTkQgVVNFX01FRElBX0ZPVU5EQVRJT04pCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFy
aWVzKE1lZGlhRm91bmRhdGlvbiBJTlRFUkZBQ0UKICAgICAgICAgZDNkOQogICAgICAgICBkZWxh
eWltcAorICAgICAgICBkd3JpdGUKICAgICAgICAgZHh2YTIKICAgICAgICAgZXZyCiAgICAgICAg
IG1mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYTVmMjMyZmNmMjIxLi42ZmQ2
ZjEwMGFjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTM4NywxMSArMzg3
LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0ds
eXBocyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBoczsK
KyAgICBjYWlyb0dseXBocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUdseXBocyk7CiAgICAg
ewogICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ld
ID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyNpZmRlZiBDQUlST19IQVNfRFdS
SVRFX0ZPTlQKKyAgICAgICAgICAgIC8vIEdseXBoQnVmZmVyOjptYWtlR2x5cGhJbnZpc2libGUg
ZXhwZWN0cyAweEZGRkYgZ2x5cGggaXMgaW52aXNpYmxlLiBIb3dldmVyLCBEaXJlY3RXcml0ZSBz
aG93cyBhIGJsYW5rIHNxdWFyZSBmb3IgaXQuCisgICAgICAgICAgICBpZiAoZ2x5cGhzW2ldICE9
IDB4RkZGRikKKyNlbmRpZgorICAgICAgICAgICAgICAgIGNhaXJvR2x5cGhzLnVuY2hlY2tlZEFw
cGVuZCh7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9KTsKICAgICAgICAgICAgIHhPZmZz
ZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0uaGVpZ2h0KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5j
cHAKaW5kZXggMzFhMWU1YzUzMWYyLi5iNjFiZjczYzdlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwCkBAIC0zNywxMSArMzcsNjMgQEAKIAogI2luY2x1ZGUgPGNhaXJvLXdp
bjMyLmg+CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyNpbmNsdWRlIDxjYWlyby1k
d3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZmRlZiBDQUlST19I
QVNfRFdSSVRFX0ZPTlQKK3N0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogZ2V0RFdyaXRlR2RpSW50
ZXJvcCgpCit7CisgICAgc3RhdGljIENPTVB0cjxJRFdyaXRlR2RpSW50ZXJvcD4gZ2RpSW50ZXJv
cDsKKyAgICBpZiAoZ2RpSW50ZXJvcCkKKyAgICAgICAgcmV0dXJuIGdkaUludGVyb3AuZ2V0KCk7
CisgICAgQ09NUHRyPElEV3JpdGVGYWN0b3J5PiBmYWN0b3J5OworICAgIEhSRVNVTFQgaHIgPSBE
V3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihJ
RFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmZhY3RvcnkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBociA9IGZhY3RvcnktPkdl
dEdkaUludGVyb3AoJmdkaUludGVyb3ApOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgIHJldHVybiBnZGlJbnRlcm9wLmdldCgpOworfQorCitjYWlyb19mb250X2ZhY2Vf
dCoKK2NyZWF0ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQgZm9udCkKK3sKKyAgICBJRFdyaXRl
R2RpSW50ZXJvcCogZ2RpSW50ZXJvcCA9IGdldERXcml0ZUdkaUludGVyb3AoKTsKKworICAgIGJv
b2wgcmV0cnkgPSBmYWxzZTsKKyAgICBHRElPYmplY3Q8SEZPTlQ+IHJldHJ5Rm9udDsKKyAgICBD
T01QdHI8SURXcml0ZUZvbnRGYWNlPiBkd0ZhY2U7CisgICAgSFduZERDIGhkYyhudWxscHRyKTsK
KyAgICB3aGlsZSAoZm9udCkgeworICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmpl
Y3QoaGRjLCBmb250KTsKKyAgICAgICAgSFJFU1VMVCBociA9IGdkaUludGVyb3AtPkNyZWF0ZUZv
bnRGYWNlRnJvbUhkYyhoZGMsICZkd0ZhY2UpOworICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBv
bGRGb250KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKHJldHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIENyZWF0
ZUZvbnRGYWNlRnJvbUhkYyBtYXkgZmFpbCBpZiB0aGUgZm9udCBzaXplIGlzIHRvbyBsYXJnZS4g
UmV0cnkgaXQgYnkgY3JlYXRpbmcgYSBzbWFsbGVyIGZvbnQuCisgICAgICAgIExPR0ZPTlQgbG9n
Zm9udDsKKyAgICAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQp
OworICAgICAgICBsb2dmb250LmxmSGVpZ2h0ID0gLTMyOworICAgICAgICByZXRyeUZvbnQgPSBh
ZG9wdEdESU9iamVjdChDcmVhdGVGb250SW5kaXJlY3QoJmxvZ2ZvbnQpKTsKKyAgICAgICAgZm9u
dCA9IHJldHJ5Rm9udC5nZXQoKTsKKyAgICAgICAgcmV0cnkgPSB0cnVlOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVChkd0ZhY2UpOworICAgIHJldHVybiBjYWlyb19kd3JpdGVfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNlKGR3RmFjZS5nZXQoKSk7Cit9CisjZW5kaWYKKwog
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0
IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSkKIHsKKyNpZmRlZiBDQUlST19IQVNfRFdS
SVRFX0ZPTlQKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjcmVhdGVDYWlyb0RX
cml0ZUZvbnRGYWNlKGZvbnQpOworI2Vsc2UKICAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZh
Y2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChmb250KTsKKyNlbmRp
ZgogCiAgICAgY2Fpcm9fbWF0cml4X3Qgc2l6ZU1hdHJpeCwgY3RtOwogICAgIGNhaXJvX21hdHJp
eF9pbml0X2lkZW50aXR5KCZjdG0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCmluZGV4
IDBhM2IzYWY5ZmVhZi4uMWNiYjY1ZTk0OGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4u
Y3BwCkBAIC01OSwxOCArNTksMzYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSFduZERDIGRjKDApOwotICAgIFNhdmVEQyhkYyk7Ci0K
ICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gbV9wbGF0Zm9ybURhdGEuc2Nh
bGVkRm9udCgpOworI2lmZGVmIENBSVJPX0hBU19EV1JJVEVfRk9OVAorICAgIC8vIEZJWE1FOiBV
c2UgSURXcml0ZUZvbnRGYWNlOjpHZXRNZXRyaWNzLgorICAgIC8vIDxodHRwczovL2xlYXJuLm1p
Y3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvZHdyaXRlL25mLWR3cml0ZS1pZHdy
aXRlZm9udGZhY2UtZ2V0bWV0cmljcz4KKyAgICBjYWlyb19mb250X2V4dGVudHNfdCBmb250RXh0
ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9leHRlbnRzKHNjYWxlZEZvbnQsICZmb250RXh0
ZW50cyk7CisKKyAgICBmbG9hdCBhc2NlbnQgPSBmb250RXh0ZW50cy5hc2NlbnQ7CisgICAgZmxv
YXQgZGVzY2VudCA9IGZvbnRFeHRlbnRzLmRlc2NlbnQ7CisgICAgZmxvYXQgbGluZUdhcCA9IGZv
bnRFeHRlbnRzLmhlaWdodCAtIGZvbnRFeHRlbnRzLmFzY2VudCAtIGZvbnRFeHRlbnRzLmRlc2Nl
bnQ7CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1l
dHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdo
dChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVz
Y2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKKyNlbHNlCiAgICAgY29uc3QgZG91YmxlIG1ldHJp
Y3NNdWx0aXBsaWVyID0gY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfZ2V0X21ldHJpY3NfZmFjdG9y
KHNjYWxlZEZvbnQpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogCisgICAgSFduZERDIGRjKDAp
OworICAgIFNhdmVEQyhkYyk7CiAgICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2Zv
bnQoc2NhbGVkRm9udCwgZGMpOwogCiAgICAgLy8gRklYTUU6IE5lZWRzIHRvIHRha2UgT1MvMiBV
U0VfVFlQT19NRVRSSUNTIGZsYWcgaW50byBhY2NvdW50CiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4NgogICAgIFRFWFRNRVRSSUMgdGV4dE1ldHJp
Y3M7CiAgICAgR2V0VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljcyk7CisgICAgY2Fpcm9fd2lu
MzJfc2NhbGVkX2ZvbnRfZG9uZV9mb250KHNjYWxlZEZvbnQpOworICAgIFJlc3RvcmVEQyhkYywg
LTEpOworCiAgICAgZmxvYXQgYXNjZW50ID0gdGV4dE1ldHJpY3MudG1Bc2NlbnQgKiBtZXRyaWNz
TXVsdGlwbGllcjsKICAgICBmbG9hdCBkZXNjZW50ID0gdGV4dE1ldHJpY3MudG1EZXNjZW50ICog
bWV0cmljc011bHRpcGxpZXI7CiAgICAgZmxvYXQgY2FwSGVpZ2h0ID0gKHRleHRNZXRyaWNzLnRt
QXNjZW50IC0gdGV4dE1ldHJpY3MudG1JbnRlcm5hbExlYWRpbmcpICogbWV0cmljc011bHRpcGxp
ZXI7CkBAIC04MywxOCArMTAxLDE2IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKICAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVz
Y2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKICAgICBtX2F2Z0NoYXJXaWR0aCA9IHRleHRNZXRy
aWNzLnRtQXZlQ2hhcldpZHRoICogbWV0cmljc011bHRpcGxpZXI7CiAgICAgbV9tYXhDaGFyV2lk
dGggPSB0ZXh0TWV0cmljcy50bU1heENoYXJXaWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVyOworI2Vu
ZGlmCiAKICAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwogICAgIGNhaXJvX3NjYWxl
ZF9mb250X3RleHRfZXh0ZW50cyhzY2FsZWRGb250LCAieCIsICZleHRlbnRzKTsKICAgICBmbG9h
dCB4SGVpZ2h0ID0gLWV4dGVudHMueV9iZWFyaW5nOwogCiAgICAgbV9mb250TWV0cmljcy5zZXRY
SGVpZ2h0KHhIZWlnaHQpOwotICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2RvbmVfZm9udChz
Y2FsZWRGb250KTsKIAogICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwogICAgIG1fc2NyaXB0Rm9udFBy
b3BlcnRpZXMgPSAwOwotCi0gICAgUmVzdG9yZURDKGRjLCAtMSk7CiB9CiAKIHZvaWQgRm9udDo6
ZGV0ZXJtaW5lUGl0Y2goKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>465605</attachid>
            <date>2023-03-27 00:06:30 -0700</date>
            <delta_ts>2023-03-30 13:51:10 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>6143</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGNkNzdkMTgzMmM3Li4yZWEzZjgxYmRiNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xOTYsNiArMTk2LDcgQEAgaWYgKEVOQUJM
RV9WSURFTyBBTkQgVVNFX01FRElBX0ZPVU5EQVRJT04pCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFy
aWVzKE1lZGlhRm91bmRhdGlvbiBJTlRFUkZBQ0UKICAgICAgICAgZDNkOQogICAgICAgICBkZWxh
eWltcAorICAgICAgICBkd3JpdGUKICAgICAgICAgZHh2YTIKICAgICAgICAgZXZyCiAgICAgICAg
IG1mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYTVmMjMyZmNmMjIxLi42ZmQ2
ZjEwMGFjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTM4NywxMSArMzg3
LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0ds
eXBocyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBoczsK
KyAgICBjYWlyb0dseXBocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUdseXBocyk7CiAgICAg
ewogICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ld
ID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyNpZmRlZiBDQUlST19IQVNfRFdS
SVRFX0ZPTlQKKyAgICAgICAgICAgIC8vIEdseXBoQnVmZmVyOjptYWtlR2x5cGhJbnZpc2libGUg
ZXhwZWN0cyAweEZGRkYgZ2x5cGggaXMgaW52aXNpYmxlLiBIb3dldmVyLCBEaXJlY3RXcml0ZSBz
aG93cyBhIGJsYW5rIHNxdWFyZSBmb3IgaXQuCisgICAgICAgICAgICBpZiAoZ2x5cGhzW2ldICE9
IDB4RkZGRikKKyNlbmRpZgorICAgICAgICAgICAgICAgIGNhaXJvR2x5cGhzLnVuY2hlY2tlZEFw
cGVuZCh7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9KTsKICAgICAgICAgICAgIHhPZmZz
ZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0uaGVpZ2h0KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5j
cHAKaW5kZXggNmQyNmEwMzM0NzFjLi5lMTNmNjI2ZjYwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwCkBAIC0zNywxMSArMzcsNjMgQEAKIAogI2luY2x1ZGUgPGNhaXJvLXdp
bjMyLmg+CiAKKyNpZmRlZiBDQUlST19IQVNfRFdSSVRFX0ZPTlQKKyNpbmNsdWRlIDxjYWlyby1k
d3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZmRlZiBDQUlST19I
QVNfRFdSSVRFX0ZPTlQKK3N0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogZ2V0RFdyaXRlR2RpSW50
ZXJvcCgpCit7CisgICAgc3RhdGljIENPTVB0cjxJRFdyaXRlR2RpSW50ZXJvcD4gZ2RpSW50ZXJv
cDsKKyAgICBpZiAoZ2RpSW50ZXJvcCkKKyAgICAgICAgcmV0dXJuIGdkaUludGVyb3AuZ2V0KCk7
CisgICAgQ09NUHRyPElEV3JpdGVGYWN0b3J5PiBmYWN0b3J5OworICAgIEhSRVNVTFQgaHIgPSBE
V3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihJ
RFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmZhY3RvcnkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBociA9IGZhY3RvcnktPkdl
dEdkaUludGVyb3AoJmdkaUludGVyb3ApOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgIHJldHVybiBnZGlJbnRlcm9wLmdldCgpOworfQorCitjYWlyb19mb250X2ZhY2Vf
dCoKK2NyZWF0ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQgZm9udCkKK3sKKyAgICBJRFdyaXRl
R2RpSW50ZXJvcCogZ2RpSW50ZXJvcCA9IGdldERXcml0ZUdkaUludGVyb3AoKTsKKworICAgIGJv
b2wgcmV0cnkgPSBmYWxzZTsKKyAgICBHRElPYmplY3Q8SEZPTlQ+IHJldHJ5Rm9udDsKKyAgICBD
T01QdHI8SURXcml0ZUZvbnRGYWNlPiBkd0ZhY2U7CisgICAgSFduZERDIGhkYyhudWxscHRyKTsK
KyAgICB3aGlsZSAoZm9udCkgeworICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmpl
Y3QoaGRjLCBmb250KTsKKyAgICAgICAgSFJFU1VMVCBociA9IGdkaUludGVyb3AtPkNyZWF0ZUZv
bnRGYWNlRnJvbUhkYyhoZGMsICZkd0ZhY2UpOworICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBv
bGRGb250KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKHJldHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIENyZWF0
ZUZvbnRGYWNlRnJvbUhkYyBtYXkgZmFpbCBpZiB0aGUgZm9udCBzaXplIGlzIHRvbyBsYXJnZS4g
UmV0cnkgaXQgYnkgY3JlYXRpbmcgYSBzbWFsbGVyIGZvbnQuCisgICAgICAgIExPR0ZPTlQgbG9n
Zm9udDsKKyAgICAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQp
OworICAgICAgICBsb2dmb250LmxmSGVpZ2h0ID0gLTMyOworICAgICAgICByZXRyeUZvbnQgPSBh
ZG9wdEdESU9iamVjdChDcmVhdGVGb250SW5kaXJlY3QoJmxvZ2ZvbnQpKTsKKyAgICAgICAgZm9u
dCA9IHJldHJ5Rm9udC5nZXQoKTsKKyAgICAgICAgcmV0cnkgPSB0cnVlOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVChkd0ZhY2UpOworICAgIHJldHVybiBjYWlyb19kd3JpdGVfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNlKGR3RmFjZS5nZXQoKSk7Cit9CisjZW5kaWYKKwog
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0
IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSkKIHsKKyNpZmRlZiBDQUlST19IQVNfRFdS
SVRFX0ZPTlQKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjcmVhdGVDYWlyb0RX
cml0ZUZvbnRGYWNlKGZvbnQpOworI2Vsc2UKICAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZh
Y2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChmb250KTsKKyNlbmRp
ZgogCiAgICAgY2Fpcm9fbWF0cml4X3Qgc2l6ZU1hdHJpeCwgY3RtOwogICAgIGNhaXJvX21hdHJp
eF9pbml0X2lkZW50aXR5KCZjdG0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCmluZGV4
IGIyZjAyMmFmOTkxMC4uNmVlNzI4MDhmZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4u
Y3BwCkBAIC01NSwxNyArNTUsMjMgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgIEhX
bmREQyBkYygwKTsKICAgICBTYXZlREMoZGMpOwogCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCog
c2NhbGVkRm9udCA9IG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKTsKLSAgICBjb25zdCBkb3Vi
bGUgbWV0cmljc011bHRpcGxpZXIgPSBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9nZXRfbWV0cmlj
c19mYWN0b3Ioc2NhbGVkRm9udCkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0KLSAgICBjYWly
b193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9udChzY2FsZWRGb250LCBkYyk7CisgICAgSEdE
SU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsK
IAogICAgIE9VVExJTkVURVhUTUVUUklDIG1ldHJpY3M7CiAgICAgR2V0T3V0bGluZVRleHRNZXRy
aWNzKGRjLCBzaXplb2YobWV0cmljcyksICZtZXRyaWNzKTsKIAotICAgIGNhaXJvX3dpbjMyX3Nj
YWxlZF9mb250X2RvbmVfZm9udChzY2FsZWRGb250KTsKKyAgICBmbG9hdCB4SGVpZ2h0ID0gbWV0
cmljcy5vdG1UZXh0TWV0cmljcy50bUFzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4
SGVpZ2h0IGlmIG5vIHggZ2x5cGggaXMgcHJlc2VudC4KKyAgICBHTFlQSE1FVFJJQ1MgZ207Cisg
ICAgc3RhdGljIGNvbnN0IE1BVDIgaWRlbnRpdHkgPSB7IHsgMCwgMSB9LCB7IDAsIDAgfSwgeyAw
LCAwIH0sIHsgMCwgMSB9IH07CisgICAgRFdPUkQgbGVuID0gR2V0R2x5cGhPdXRsaW5lKGRjLCAn
eCcsIEdHT19NRVRSSUNTLCAmZ20sIDAsIDAsICZpZGVudGl0eSk7CisgICAgaWYgKGxlbiAhPSBH
RElfRVJST1IgJiYgZ20uZ21wdEdseXBoT3JpZ2luLnkgPiAwKQorICAgICAgICB4SGVpZ2h0ID0g
Z20uZ21wdEdseXBoT3JpZ2luLnk7CisKKyAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwog
ICAgIFJlc3RvcmVEQyhkYywgLTEpOwogCisgICAgZmxvYXQgbWV0cmljc011bHRpcGxpZXIgPSAx
LmYgLyBjV2luZG93c0ZvbnRTY2FsZUZhY3RvcjsKKwogICAgIC8vIEZJWE1FOiBOZWVkcyB0byB0
YWtlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGludG8gYWNjb3VudAogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkxODYKICAgICBmbG9hdCBhc2Nl
bnQgPSBtZXRyaWNzLm90bVRleHRNZXRyaWNzLnRtQXNjZW50ICogbWV0cmljc011bHRpcGxpZXI7
CkBAIC03OSwxNCArODUsOSBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgbV9mb250
TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNw
YWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdh
cCkpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbShtZXRyaWNzLm90bUVNU3F1YXJl
KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCAqIG1ldHJpY3NNdWx0aXBs
aWVyKTsKICAgICBtX2F2Z0NoYXJXaWR0aCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3MudG1BdmVD
aGFyV2lkdGggKiBtZXRyaWNzTXVsdGlwbGllcjsKICAgICBtX21heENoYXJXaWR0aCA9IG1ldHJp
Y3Mub3RtVGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGggKiBtZXRyaWNzTXVsdGlwbGllcjsKLQot
ICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
dGV4dF9leHRlbnRzKHNjYWxlZEZvbnQsICJ4IiwgJmV4dGVudHMpOwotICAgIGZsb2F0IHhIZWln
aHQgPSAtZXh0ZW50cy55X2JlYXJpbmc7Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQo
eEhlaWdodCk7CiB9CiAKIHZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>465690</attachid>
            <date>2023-03-30 13:51:10 -0700</date>
            <delta_ts>2023-04-23 18:48:19 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>0001-WinCairo-Use-Cairo-DirectWrite-font-backend.patch</filename>
            <type>text/plain</type>
            <size>17089</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">RnJvbSA2MzkxYmE0YWM0MzYxYTMyMDQ5NGNlYTMwOGI3NDhlYmExNTMyNTUyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBIaXJvbm9yaSA8SGlyb25vcmkuRnVqaWlAc29ueS5j
b20+CkRhdGU6IFR1ZSwgMjggTWFyIDIwMjMgMTY6NDU6MjkgKzA5MDAKU3ViamVjdDogW1BBVENI
XSBbV2luQ2Fpcm9dIFVzZSBDYWlybyBEaXJlY3RXcml0ZSBmb250IGJhY2tlbmQKIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyNTkKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKRXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgZml4ZXMgdGhlIGJ1ZyAoT09QUyEp
LgoKKiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZToKKiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6CiogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgooV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMpOgoqIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwOgooV2Vi
Q29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hh
cmFjdGVycyk6CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHA6CihXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgoq
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhV2luLmNwcDoKKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9y
bURhdGEpOgoqIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhQ2Fpcm9XaW4uY3BwOgooV2ViQ29yZTo6Z2V0RFdyaXRlR2RpSW50ZXJvcCk6CihXZWJD
b3JlOjpjcmVhdGVDYWlyb0RXcml0ZUZvbnRGYWNlKToKKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQpOgooV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5
TmFtZSBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFXaW4uY3BwOgooV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YSk6CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ2Fpcm9XaW4uY3BwOgooV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1Jbml0KToKKiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgoo
V2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250IGNvbnN0KToKLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSAgICAgICAgICAgICAgfCAgMSArCiAuLi4vcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oICAgICAgfCAxMiArKy0tCiAuLi4vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwICAgfCAxMSArKystCiAuLi4vd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgICAgfCAxNCArLS0tLQogLi4uL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwICAgIHwgIDQgKy0KIC4uLi93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YVdpbi5jcHAgICAgICAgICB8ICA2ICstCiAuLi4vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAgfCA1OCArKysrKysrKysrKysrKyst
LS0tCiAuLi4vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwICAgICAgfCAxNCAr
LS0tLQogLi4uL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCAgIHwgMzEg
KysrKystLS0tLQogLi4uL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAgICAgICAg
IHwgIDIgKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDg2IGluc2VydGlvbnMoKyksIDY3IGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGNkNzdkMTgzMmM3Li4yZWEzZjgx
YmRiNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xOTYsNiArMTk2LDcgQEAgaWYg
KEVOQUJMRV9WSURFTyBBTkQgVVNFX01FRElBX0ZPVU5EQVRJT04pCiAgICAgdGFyZ2V0X2xpbmtf
bGlicmFyaWVzKE1lZGlhRm91bmRhdGlvbiBJTlRFUkZBQ0UKICAgICAgICAgZDNkOQogICAgICAg
ICBkZWxheWltcAorICAgICAgICBkd3JpdGUKICAgICAgICAgZHh2YTIKICAgICAgICAgZXZyCiAg
ICAgICAgIG1mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKaW5kZXggNWM5NmIzMDUyMjljLi5iODU4MDcwMDBmN2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
QEAgLTE0Miw3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgQ1RGb250UmVmIGN0Rm9udCgpIGNvbnN0
OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKENPQ09BKQorI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIGJvb2wgaXNTeXN0ZW1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9p
c1N5c3RlbUZvbnQ7IH0KICNlbmRpZgogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChIRk9O
VCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFjZU5hbWUpOworICAgIHZvaWQgcGxhdGZvcm1E
YXRhSW5pdChIRk9OVCwgZmxvYXQgc2l6ZSk7CiAjZW5kaWYKIAogI2lmIFVTRShGUkVFVFlQRSkK
QEAgLTI2OCw3ICsyNjgsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVl
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDb2xvckJpdG1hcEZvbnQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSB7IGZhbHNlIH07CisjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgYm9vbCBtX2lzU3lzdGVtRm9udCB7IGZhbHNlIH07CisjZW5kaWYKICAgICBi
b29sIG1faGFzVmFyaWF0aW9ucyB7IGZhbHNlIH07CiAgICAgLy8gVGhlIHZhbHVlcyBhYm92ZSBh
cmUgY29tbW9uIHRvIGFsbCBwb3J0cwogCkBAIC0zMzAsMTAgKzMzMiw0IEBAIHByaXZhdGU6CiAK
ICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotLy8gVGhpcyBpcyBhIHNjYWxpbmcgZmFjdG9y
IGZvciBXaW5kb3dzIEdESSBmb250cy4gV2UgZG8gdGhpcyBmb3IKLS8vIHN1YnBpeGVsIHByZWNp
c2lvbiB3aGVuIHJlbmRlcmluZyB1c2luZyBVbmlzY3JpYmUuCi1jb25zdGV4cHIgaW50IGNXaW5k
b3dzRm9udFNjYWxlRmFjdG9yID0gMzI7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGE1ZjIzMmZjZjIyMS4uOWNlZjhi
MmY0MDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zODcsMTEgKzM4Nywx
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlw
aHMobnVtR2x5cGhzKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHM7Cisg
ICAgY2Fpcm9HbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1HbHlwaHMpOwogICAgIHsK
ICAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9
IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07CisgICAgICAgICAgICBib29sIGFwcGVu
ZCA9IHRydWU7CisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICAgICAgLy8gR2x5cGhCdWZmZXI6
Om1ha2VHbHlwaEludmlzaWJsZSBleHBlY3RzIDB4RkZGRiBnbHlwaCBpcyBpbnZpc2libGUuIEhv
d2V2ZXIsIERpcmVjdFdyaXRlIHNob3dzIGEgYmxhbmsgc3F1YXJlIGZvciBpdC4KKyAgICAgICAg
ICAgIGFwcGVuZCA9IGdseXBoc1tpXSAhPSAweEZGRkY7CisjZW5kaWYKKyAgICAgICAgICAgIGlm
IChhcHBlbmQpCisgICAgICAgICAgICAgICAgY2Fpcm9HbHlwaHMudW5jaGVja2VkQXBwZW5kKHsg
Z2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH0pOwogICAgICAgICAgICAgeE9mZnNldCArPSBh
ZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5o
ZWlnaHQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2Ny
aWJlLmNwcAppbmRleCAyYTVjNGVkYzkzZjEuLjA2NjRkMzcwZDIxOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVu
aXNjcmliZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Nv
bXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKQEAgLTI1MCwxNyArMjUwLDkgQEAgdm9p
ZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgb3JpZ2lucy5yZXNlcnZlQ2FwYWNpdHkoZ2x5
cGhzLnNpemUoKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGdseXBocy5z
aXplKCk7IGsrKykgewotICAgICAgICAgICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGNX
aW5kb3dzRm9udFNjYWxlRmFjdG9yOwotICAgICAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFu
Y2VzW2tdIC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZz
ZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldFkgPSBv
ZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKLQotICAgICAgICAgICAgLy8gTWF0Y2ggQXBw
S2l0J3MgcnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBub24taW50ZWdlciByZW5kZXJpbmcgbW9k
ZXMuCi0gICAgICAgICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgp
KSB7Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsKLSAgICAgICAg
ICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwotICAgICAgICAgICAgICAgIG9mZnNl
dFkgPSByb3VuZGYob2Zmc2V0WSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmbG9hdCBh
ZHZhbmNlID0gYWR2YW5jZXNba107CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0
c1trXS5kdTsKKyAgICAgICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2OwogCiAg
ICAgICAgICAgICBiYXNlQWR2YW5jZXMudW5jaGVja2VkQXBwZW5kKHsgYWR2YW5jZSwgMCB9KTsK
ICAgICAgICAgICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKHsgb2Zmc2V0WCwgb2Zmc2V0WSB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YWNoZVdpbi5jcHAKaW5kZXggNzFhODU3N2Q2MzkwLi42OGZlZGZlNTc4ZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
CkBAIC02MjQsOSArNjI0LDcgQEAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZv
bnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWwKIHN0ZDo6dW5pcXVl
X3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseSwgY29uc3QgRm9udENyZWF0aW9uQ29udGV4dCYpCiB7CiAgICAgTE9ORyB3ZWlnaHQg
PSBhZGp1c3RlZEdESUZvbnRXZWlnaHQodG9HRElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSksIGZhbWlseSk7Ci0gICAgYXV0byBoZm9udCA9IGNyZWF0ZUdESUZvbnQoZmFtaWx5
LCB3ZWlnaHQsIGlzSXRhbGljKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSksCi0gICAgICAgIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICogY1dpbmRvd3NGb250U2NhbGVGYWN0
b3IpOwotCisgICAgYXV0byBoZm9udCA9IGNyZWF0ZUdESUZvbnQoZmFtaWx5LCB3ZWlnaHQsIGlz
SXRhbGljKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFBpeGVsU2l6ZSgpKTsKICAgICBpZiAoIWhmb250KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGFXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFXaW4uY3BwCmluZGV4IGVmZDczZTg3OGVhNy4u
NmJiODVhMzc3NmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFXaW4uY3BwCkBAIC0z
NCw2ICszNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2Fpcm9fZm9udF9mYWNlX3Qq
IGNyZWF0ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQpOworCiBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgRm9udFBsYXRm
b3JtRGF0YTo6Q3JlYXRpb25EYXRhJiYgY3JlYXRpb25EYXRhKQogICAgIDogbmFtZShuYW1lKQog
ICAgICwgY3JlYXRpb25EYXRhKFdURk1vdmUoY3JlYXRpb25EYXRhKSkKQEAgLTUwLDcgKzUyLDcg
QEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYKICAgICBtZW1zZXQoJmxvZ0ZvbnQsIDAsIHNpemVv
ZihMT0dGT05UKSk7CiAgICAgd2NzbmNweShsb2dGb250LmxmRmFjZU5hbWUsIG5hbWUud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksIExGX0ZBQ0VTSVpFIC0gMSk7CiAKLSAgICBsb2dGb250LmxmSGVp
Z2h0ID0gLXNpemUgKiBjV2luZG93c0ZvbnRTY2FsZUZhY3RvcjsKKyAgICBsb2dGb250LmxmSGVp
Z2h0ID0gLXNpemU7CiAgICAgbG9nRm9udC5sZldpZHRoID0gMDsKICAgICBsb2dGb250LmxmRXNj
YXBlbWVudCA9IDA7CiAgICAgbG9nRm9udC5sZk9yaWVudGF0aW9uID0gMDsKQEAgLTY1LDcgKzY3
LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYKIAogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwogCi0gICAgY2Fpcm9fZm9u
dF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZv
bnQoaGZvbnQuZ2V0KCkpOworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNyZWF0
ZUNhaXJvRFdyaXRlRm9udEZhY2UoaGZvbnQuZ2V0KCkpOwogCiAgICAgRm9udFBsYXRmb3JtRGF0
YSBmb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZvbnQpLCBmb250RmFjZSwgc2l6ZSwgYm9sZCwg
aXRhbGljLCAmY3JlYXRpb25EYXRhKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNw
cAppbmRleCA2ZDI2YTAzMzQ3MWMuLjljYmJhMTMzOTVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDYWlyb1dpbi5jcHAKQEAgLTI5LDE5ICsyOSw2MCBAQAogCiAjaW5jbHVkZSAiSFduZERDLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8tZHdyaXRlLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9y
bURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFt
ZSkKK3N0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogZ2V0RFdyaXRlR2RpSW50ZXJvcCgpCiB7Ci0g
ICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2Ny
ZWF0ZV9mb3JfaGZvbnQoZm9udCk7CisgICAgc3RhdGljIENPTVB0cjxJRFdyaXRlR2RpSW50ZXJv
cD4gZ2RpSW50ZXJvcDsKKyAgICBpZiAoZ2RpSW50ZXJvcCkKKyAgICAgICAgcmV0dXJuIGdkaUlu
dGVyb3AuZ2V0KCk7CisgICAgQ09NUHRyPElEV3JpdGVGYWN0b3J5PiBmYWN0b3J5OworICAgIEhS
RVNVTFQgaHIgPSBEV3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVE
LCBfX3V1aWRvZihJRFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4o
JmZhY3RvcnkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBociA9
IGZhY3RvcnktPkdldEdkaUludGVyb3AoJmdkaUludGVyb3ApOworICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOworICAgIHJldHVybiBnZGlJbnRlcm9wLmdldCgpOworfQorCitjYWly
b19mb250X2ZhY2VfdCoKK2NyZWF0ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQgZm9udCkKK3sK
KyAgICBJRFdyaXRlR2RpSW50ZXJvcCogZ2RpSW50ZXJvcCA9IGdldERXcml0ZUdkaUludGVyb3Ao
KTsKKworICAgIGJvb2wgcmV0cnkgPSBmYWxzZTsKKyAgICBHRElPYmplY3Q8SEZPTlQ+IHJldHJ5
Rm9udDsKKyAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBkd0ZhY2U7CisgICAgSFduZERDIGhk
YyhudWxscHRyKTsKKyAgICB3aGlsZSAoZm9udCkgeworICAgICAgICBIR0RJT0JKIG9sZEZvbnQg
PSBTZWxlY3RPYmplY3QoaGRjLCBmb250KTsKKyAgICAgICAgSFJFU1VMVCBociA9IGdkaUludGVy
b3AtPkNyZWF0ZUZvbnRGYWNlRnJvbUhkYyhoZGMsICZkd0ZhY2UpOworICAgICAgICBTZWxlY3RP
YmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgaWYgKHJldHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIC8vIENyZWF0ZUZvbnRGYWNlRnJvbUhkYyBtYXkgZmFpbCBpZiB0aGUgZm9udCBzaXplIGlz
IHRvbyBsYXJnZS4gUmV0cnkgaXQgYnkgY3JlYXRpbmcgYSBzbWFsbGVyIGZvbnQuCisgICAgICAg
IExPR0ZPTlQgbG9nZm9udDsKKyAgICAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250
KSwgJmxvZ2ZvbnQpOworICAgICAgICBsb2dmb250LmxmSGVpZ2h0ID0gLTMyOworICAgICAgICBy
ZXRyeUZvbnQgPSBhZG9wdEdESU9iamVjdChDcmVhdGVGb250SW5kaXJlY3QoJmxvZ2ZvbnQpKTsK
KyAgICAgICAgZm9udCA9IHJldHJ5Rm9udC5nZXQoKTsKKyAgICAgICAgcmV0cnkgPSB0cnVlOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChkd0ZhY2UpOworICAgIHJldHVybiBjYWlyb19kd3Jp
dGVfZm9udF9mYWNlX2NyZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNlKGR3RmFjZS5nZXQoKSk7Cit9
CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBm
bG9hdCBzaXplKQoreworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNyZWF0ZUNh
aXJvRFdyaXRlRm9udEZhY2UoZm9udCk7CiAKICAgICBjYWlyb19tYXRyaXhfdCBzaXplTWF0cml4
LCBjdG07CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CkBAIC01NSw5ICs5
Niw2IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250
LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUioKIAogICAgIG1fc2NhbGVkRm9udCA9IGFkb3B0
UmVmKGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJnNpemVNYXRyaXgsICZjdG0s
IGZvbnRPcHRpb25zKSk7CiAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwot
Ci0gICAgaWYgKG1fc2l6ZSkKLSAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VO
YW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGNvbnN0IENyZWF0aW9uRGF0
YSogY3JlYXRpb25EYXRhKQpAQCAtMTEyLDEyICsxNTAsMTAgQEAgU3RyaW5nIEZvbnRQbGF0Zm9y
bURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1p
bHlOYW1lKCkgY29uc3QKIHsKICAgICBIV25kREMgaGRjKDApOwotICAgIFNhdmVEQyhoZGMpOwot
ICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X3NlbGVjdF9mb250KHNjYWxlZEZvbnQoKSwgaGRj
KTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX2ZvbnQuZ2V0KCkp
OwogICAgIHdjaGFyX3QgZmFjZU5hbWVbTEZfRkFDRVNJWkVdOwogICAgIEdldFRleHRGYWNlKGhk
YywgTEZfRkFDRVNJWkUsIGZhY2VOYW1lKTsKLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9k
b25lX2ZvbnQoc2NhbGVkRm9udCgpKTsKLSAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgU2Vs
ZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CiAgICAgcmV0dXJuIGZhY2VOYW1lOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YVdpbi5jcHAKaW5kZXggYWQ1NGVhNzI0MjY5Li5lZjIzYjE0NzkxOGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YVdpbi5jcHAKQEAgLTMzLDI1ICszMywxMyBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotdXNp
bmcgc3RkOjptaW47Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBvYmxpcXVlLCBjb25zdCBDcmVhdGlvbkRhdGEqIGNyZWF0aW9uRGF0YSkKICAg
ICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgYm9sZCwgb2JsaXF1ZSwgRm9udE9yaWVudGF0aW9u
OjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsIFRleHRSZW5kZXJp
bmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZywgY3JlYXRpb25EYXRhKQogewogICAgIG1fZm9udCA9
IFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGZvbnQpKTsKLQotICAgIEhX
bmREQyBoZGMoMCk7Ci0gICAgU2F2ZURDKGhkYyk7Ci0gICAgCi0gICAgOjpTZWxlY3RPYmplY3Qo
aGRjLCBtX2ZvbnQtPmdldCgpKTsKLQotICAgIHdjaGFyX3QgZmFjZU5hbWVbTEZfRkFDRVNJWkVd
OwotICAgIEdldFRleHRGYWNlKGhkYywgTEZfRkFDRVNJWkUsIGZhY2VOYW1lKTsKLSAgICBwbGF0
Zm9ybURhdGFJbml0KG1fZm9udC0+Z2V0KCksIHNpemUsIGhkYywgZmFjZU5hbWUpOwotCi0gICAg
UmVzdG9yZURDKGhkYywgLTEpOworICAgIHBsYXRmb3JtRGF0YUluaXQobV9mb250LT5nZXQoKSwg
c2l6ZSk7CiB9CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtT3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNh
aXJvV2luLmNwcAppbmRleCBiMmYwMjJhZjk5MTAuLmZmZDAyMmMwYmVlMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9X
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YUNhaXJvV2luLmNwcApAQCAtNTUsMjMgKzU1LDI3IEBAIHZvaWQgRm9udDo6cGxhdGZv
cm1Jbml0KCkKICAgICBIV25kREMgZGMoMCk7CiAgICAgU2F2ZURDKGRjKTsKIAotICAgIGNhaXJv
X3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCk7
Ci0gICAgY29uc3QgZG91YmxlIG1ldHJpY3NNdWx0aXBsaWVyID0gY2Fpcm9fd2luMzJfc2NhbGVk
X2ZvbnRfZ2V0X21ldHJpY3NfZmFjdG9yKHNjYWxlZEZvbnQpICogbV9wbGF0Zm9ybURhdGEuc2l6
ZSgpOwotCi0gICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2ZvbnQoc2NhbGVkRm9u
dCwgZGMpOworICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9wbGF0Zm9y
bURhdGEuaGZvbnQoKSk7CiAKICAgICBPVVRMSU5FVEVYVE1FVFJJQyBtZXRyaWNzOwogICAgIEdl
dE91dGxpbmVUZXh0TWV0cmljcyhkYywgc2l6ZW9mKG1ldHJpY3MpLCAmbWV0cmljcyk7CiAKLSAg
ICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CisgICAgZmxv
YXQgeEhlaWdodCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3MudG1Bc2NlbnQgKiAwLjU2ZjsgLy8g
QmVzdCBndWVzcyBmb3IgeEhlaWdodCBpZiBubyB4IGdseXBoIGlzIHByZXNlbnQuCisgICAgR0xZ
UEhNRVRSSUNTIGdtOworICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyB7IDAsIDEg
fSwgeyAwLCAwIH0sIHsgMCwgMCB9LCB7IDAsIDEgfSB9OworICAgIERXT1JEIGxlbiA9IEdldEds
eXBoT3V0bGluZShkYywgJ3gnLCBHR09fTUVUUklDUywgJmdtLCAwLCAwLCAmaWRlbnRpdHkpOwor
ICAgIGlmIChsZW4gIT0gR0RJX0VSUk9SICYmIGdtLmdtcHRHbHlwaE9yaWdpbi55ID4gMCkKKyAg
ICAgICAgeEhlaWdodCA9IGdtLmdtcHRHbHlwaE9yaWdpbi55OworCisgICAgU2VsZWN0T2JqZWN0
KGRjLCBvbGRGb250KTsKICAgICBSZXN0b3JlREMoZGMsIC0xKTsKIAogICAgIC8vIEZJWE1FOiBO
ZWVkcyB0byB0YWtlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGludG8gYWNjb3VudAogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkxODYKLSAgICBm
bG9hdCBhc2NlbnQgPSBtZXRyaWNzLm90bVRleHRNZXRyaWNzLnRtQXNjZW50ICogbWV0cmljc011
bHRpcGxpZXI7Ci0gICAgZmxvYXQgZGVzY2VudCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3MudG1E
ZXNjZW50ICogbWV0cmljc011bHRpcGxpZXI7Ci0gICAgZmxvYXQgY2FwSGVpZ2h0ID0gKG1ldHJp
Y3Mub3RtVGV4dE1ldHJpY3MudG1Bc2NlbnQgLSBtZXRyaWNzLm90bVRleHRNZXRyaWNzLnRtSW50
ZXJuYWxMZWFkaW5nKSAqIG1ldHJpY3NNdWx0aXBsaWVyOwotICAgIGZsb2F0IGxpbmVHYXAgPSBt
ZXRyaWNzLm90bVRleHRNZXRyaWNzLnRtRXh0ZXJuYWxMZWFkaW5nICogbWV0cmljc011bHRpcGxp
ZXI7CisgICAgZmxvYXQgYXNjZW50ID0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bUFzY2VudDsK
KyAgICBmbG9hdCBkZXNjZW50ID0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bURlc2NlbnQ7Cisg
ICAgZmxvYXQgY2FwSGVpZ2h0ID0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bUFzY2VudCAtIG1l
dHJpY3Mub3RtVGV4dE1ldHJpY3MudG1JbnRlcm5hbExlYWRpbmc7CisgICAgZmxvYXQgbGluZUdh
cCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3MudG1FeHRlcm5hbExlYWRpbmc7CiAKICAgICBtX2Zv
bnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2Vu
dChkZXNjZW50KTsKQEAgLTc5LDE0ICs4Myw5IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkK
ICAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CiAgICAgbV9mb250TWV0cmlj
cy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJv
dW5kZihsaW5lR2FwKSk7CiAgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKG1ldHJpY3Mu
b3RtRU1TcXVhcmUpOwotICAgIG1fYXZnQ2hhcldpZHRoID0gbWV0cmljcy5vdG1UZXh0TWV0cmlj
cy50bUF2ZUNoYXJXaWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVyOwotICAgIG1fbWF4Q2hhcldpZHRo
ID0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bU1heENoYXJXaWR0aCAqIG1ldHJpY3NNdWx0aXBs
aWVyOwotCi0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50czsKLSAgICBjYWlyb19zY2Fs
ZWRfZm9udF90ZXh0X2V4dGVudHMoc2NhbGVkRm9udCwgIngiLCAmZXh0ZW50cyk7Ci0gICAgZmxv
YXQgeEhlaWdodCA9IC1leHRlbnRzLnlfYmVhcmluZzsKLQogICAgIG1fZm9udE1ldHJpY3Muc2V0
WEhlaWdodCh4SGVpZ2h0KTsKKyAgICBtX2F2Z0NoYXJXaWR0aCA9IG1ldHJpY3Mub3RtVGV4dE1l
dHJpY3MudG1BdmVDaGFyV2lkdGg7CisgICAgbV9tYXhDaGFyV2lkdGggPSBtZXRyaWNzLm90bVRl
eHRNZXRyaWNzLnRtTWF4Q2hhcldpZHRoOwogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNo
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1w
bGVGb250RGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFXaW4uY3BwCmluZGV4IDZmMjg4OGRhOThlYS4uZjI5ZDQ2MDY0MTgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9T
aW1wbGVGb250RGF0YVdpbi5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6
OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGkKIAogICAgIExPR0ZPTlQgd2luZm9udDsKICAgICBHZXRPYmplY3QobV9wbGF0Zm9ybURh
dGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZPTlQpLCAmd2luZm9udCk7Ci0gICAgd2luZm9udC5sZkhl
aWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUgKiBjV2luZG93c0ZvbnRTY2FsZUZhY3Rvcik7Cisg
ICAgd2luZm9udC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUpOwogICAgIGF1dG8gaGZv
bnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmd2luZm9udCkpOwogICAg
IHJldHVybiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgc2Nh
bGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5z
eW50aGV0aWNPYmxpcXVlKCkpLCBvcmlnaW4oKSk7CiB9Ci0tIAoyLjM0LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>466056</attachid>
            <date>2023-04-23 18:48:19 -0700</date>
            <delta_ts>2023-04-23 18:48:19 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>15028</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGNkNzdkMTgzMmM3Li4yZWEzZjgxYmRiNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xOTYsNiArMTk2LDcgQEAgaWYgKEVOQUJM
RV9WSURFTyBBTkQgVVNFX01FRElBX0ZPVU5EQVRJT04pCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFy
aWVzKE1lZGlhRm91bmRhdGlvbiBJTlRFUkZBQ0UKICAgICAgICAgZDNkOQogICAgICAgICBkZWxh
eWltcAorICAgICAgICBkd3JpdGUKICAgICAgICAgZHh2YTIKICAgICAgICAgZXZyCiAgICAgICAg
IG1mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmgKaW5kZXggYjVjZTY3NDRiZDVjLi5jZWE0NWQ1ZDNkMTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTE4
MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgQ1RGb250UmVmIGN0Rm9udCgpIGNvbnN0OwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIGJvb2wgaXNTeXN0ZW1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1N5c3Rl
bUZvbnQ7IH0KICNlbmRpZgogCkBAIC0yNzMsNyArMjczLDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChIRk9OVCwgZmxv
YXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFjZU5hbWUpOworICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5p
dChIRk9OVCwgZmxvYXQgc2l6ZSk7CiAjZW5kaWYKIAogI2lmIFVTRShGUkVFVFlQRSkKQEAgLTMx
MCw3ICszMTAsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlIHsgZmFs
c2UgfTsKICAgICBib29sIG1faXNDb2xvckJpdG1hcEZvbnQgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSB7IGZhbHNlIH07CisjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgYm9vbCBtX2lzU3lzdGVtRm9udCB7IGZhbHNlIH07CisjZW5kaWYKICAgICBib29sIG1f
aGFzVmFyaWF0aW9ucyB7IGZhbHNlIH07CiAgICAgLy8gVGhlIHZhbHVlcyBhYm92ZSBhcmUgY29t
bW9uIHRvIGFsbCBwb3J0cwogCkBAIC0zNTgsMTAgKzM2MCw0IEBAIHByaXZhdGU6CiAKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oV0lOKQotLy8gVGhpcyBpcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBX
aW5kb3dzIEdESSBmb250cy4gV2UgZG8gdGhpcyBmb3IKLS8vIHN1YnBpeGVsIHByZWNpc2lvbiB3
aGVuIHJlbmRlcmluZyB1c2luZyBVbmlzY3JpYmUuCi1jb25zdGV4cHIgaW50IGNXaW5kb3dzRm9u
dFNjYWxlRmFjdG9yID0gMzI7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGE1ZjIzMmZjZjIyMS4uOWNlZjhiMmY0MDU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zODcsMTEgKzM4NywxOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8geE9mZnNl
dCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVt
R2x5cGhzKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHM7CisgICAgY2Fp
cm9HbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1HbHlwaHMpOwogICAgIHsKICAgICAg
ICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5
cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07CisgICAgICAgICAgICBib29sIGFwcGVuZCA9IHRy
dWU7CisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICAgICAgLy8gR2x5cGhCdWZmZXI6Om1ha2VH
bHlwaEludmlzaWJsZSBleHBlY3RzIDB4RkZGRiBnbHlwaCBpcyBpbnZpc2libGUuIEhvd2V2ZXIs
IERpcmVjdFdyaXRlIHNob3dzIGEgYmxhbmsgc3F1YXJlIGZvciBpdC4KKyAgICAgICAgICAgIGFw
cGVuZCA9IGdseXBoc1tpXSAhPSAweEZGRkY7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChhcHBl
bmQpCisgICAgICAgICAgICAgICAgY2Fpcm9HbHlwaHMudW5jaGVja2VkQXBwZW5kKHsgZ2x5cGhz
W2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH0pOwogICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNl
c1tpXS53aWR0aCgpOwogICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQo
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNw
cAppbmRleCAyYTVjNGVkYzkzZjEuLjA2NjRkMzcwZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmli
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhU
ZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKQEAgLTI1MCwxNyArMjUwLDkgQEAgdm9pZCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBjcCwKICAgICAgICAgb3JpZ2lucy5yZXNlcnZlQ2FwYWNpdHkoZ2x5cGhzLnNp
emUoKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGdseXBocy5zaXplKCk7
IGsrKykgewotICAgICAgICAgICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGNXaW5kb3dz
Rm9udFNjYWxlRmFjdG9yOwotICAgICAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFuY2VzW2td
IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2td
LmR1IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRz
W2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKLQotICAgICAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3Mg
cnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBub24taW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCi0g
ICAgICAgICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsKLSAgICAgICAgICAgICAg
ICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwotICAgICAgICAgICAgICAgIG9mZnNldFkgPSBy
b3VuZGYob2Zmc2V0WSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmbG9hdCBhZHZhbmNl
ID0gYWR2YW5jZXNba107CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5k
dTsKKyAgICAgICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2OwogCiAgICAgICAg
ICAgICBiYXNlQWR2YW5jZXMudW5jaGVja2VkQXBwZW5kKHsgYWR2YW5jZSwgMCB9KTsKICAgICAg
ICAgICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKHsgb2Zmc2V0WCwgb2Zmc2V0WSB9KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAKaW5kZXggNzFhODU3N2Q2MzkwLi42OGZlZGZlNTc4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC02
MjQsOSArNjI0LDcgQEAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNo
ZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWwKIHN0ZDo6dW5pcXVlX3B0cjxG
b250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eSwgY29uc3QgRm9udENyZWF0aW9uQ29udGV4dCYpCiB7CiAgICAgTE9ORyB3ZWlnaHQgPSBhZGp1
c3RlZEdESUZvbnRXZWlnaHQodG9HRElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQo
KSksIGZhbWlseSk7Ci0gICAgYXV0byBoZm9udCA9IGNyZWF0ZUdESUZvbnQoZmFtaWx5LCB3ZWln
aHQsIGlzSXRhbGljKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSksCi0gICAgICAgIGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICogY1dpbmRvd3NGb250U2NhbGVGYWN0b3IpOwot
CisgICAgYXV0byBoZm9udCA9IGNyZWF0ZUdESUZvbnQoZmFtaWx5LCB3ZWlnaHQsIGlzSXRhbGlj
KGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVs
U2l6ZSgpKTsKICAgICBpZiAoIWhmb250KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGFXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFXaW4uY3BwCmluZGV4IDdlYmI4YmFkOGVmMy4uMDdjOGEw
ZDE1MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFXaW4uY3BwCkBAIC0zNCw2ICsz
NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2Fpcm9fZm9udF9mYWNlX3QqIGNyZWF0
ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQpOworCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpG
b250Q3VzdG9tUGxhdGZvcm1EYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgRm9udFBsYXRmb3JtRGF0
YTo6Q3JlYXRpb25EYXRhJiYgY3JlYXRpb25EYXRhKQogICAgIDogbmFtZShuYW1lKQogICAgICwg
Y3JlYXRpb25EYXRhKFdURk1vdmUoY3JlYXRpb25EYXRhKSkKQEAgLTUxLDcgKzUzLDcgQEAgRm9u
dFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYKICAgICBtZW1zZXQoJmxvZ0ZvbnQsIDAsIHNpemVvZihMT0dG
T05UKSk7CiAgICAgd2NzbmNweShsb2dGb250LmxmRmFjZU5hbWUsIG5hbWUud2lkZUNoYXJhY3Rl
cnMoKS5kYXRhKCksIExGX0ZBQ0VTSVpFIC0gMSk7CiAKLSAgICBsb2dGb250LmxmSGVpZ2h0ID0g
LXNpemUgKiBjV2luZG93c0ZvbnRTY2FsZUZhY3RvcjsKKyAgICBsb2dGb250LmxmSGVpZ2h0ID0g
LXNpemU7CiAgICAgbG9nRm9udC5sZldpZHRoID0gMDsKICAgICBsb2dGb250LmxmRXNjYXBlbWVu
dCA9IDA7CiAgICAgbG9nRm9udC5sZk9yaWVudGF0aW9uID0gMDsKQEAgLTY2LDcgKzY4LDcgQEAg
Rm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYKIAogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVj
dCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwogCi0gICAgY2Fpcm9fZm9udF9mYWNl
X3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoaGZv
bnQuZ2V0KCkpOworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNyZWF0ZUNhaXJv
RFdyaXRlRm9udEZhY2UoaGZvbnQuZ2V0KCkpOwogCiAgICAgRm9udFBsYXRmb3JtRGF0YSBmb250
UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZvbnQpLCBmb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGlj
LCB0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAppbmRleCA5NjYxMzIw
MjRiODMuLjQyYTU4OWMxMDI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAK
QEAgLTI5LDE5ICsyOSw2MCBAQAogCiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8tZHdyaXRlLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAotI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05U
IGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSkKK3N0YXRpYyBJRFdy
aXRlR2RpSW50ZXJvcCogZ2V0RFdyaXRlR2RpSW50ZXJvcCgpCiB7Ci0gICAgY2Fpcm9fZm9udF9m
YWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQo
Zm9udCk7CisgICAgc3RhdGljIENPTVB0cjxJRFdyaXRlR2RpSW50ZXJvcD4gZ2RpSW50ZXJvcDsK
KyAgICBpZiAoZ2RpSW50ZXJvcCkKKyAgICAgICAgcmV0dXJuIGdkaUludGVyb3AuZ2V0KCk7Cisg
ICAgQ09NUHRyPElEV3JpdGVGYWN0b3J5PiBmYWN0b3J5OworICAgIEhSRVNVTFQgaHIgPSBEV3Jp
dGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihJRFdy
aXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmZhY3RvcnkpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBociA9IGZhY3RvcnktPkdldEdk
aUludGVyb3AoJmdkaUludGVyb3ApOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OworICAgIHJldHVybiBnZGlJbnRlcm9wLmdldCgpOworfQorCitjYWlyb19mb250X2ZhY2VfdCoK
K2NyZWF0ZUNhaXJvRFdyaXRlRm9udEZhY2UoSEZPTlQgZm9udCkKK3sKKyAgICBJRFdyaXRlR2Rp
SW50ZXJvcCogZ2RpSW50ZXJvcCA9IGdldERXcml0ZUdkaUludGVyb3AoKTsKKworICAgIGJvb2wg
cmV0cnkgPSBmYWxzZTsKKyAgICBHRElPYmplY3Q8SEZPTlQ+IHJldHJ5Rm9udDsKKyAgICBDT01Q
dHI8SURXcml0ZUZvbnRGYWNlPiBkd0ZhY2U7CisgICAgSFduZERDIGhkYyhudWxscHRyKTsKKyAg
ICB3aGlsZSAoZm9udCkgeworICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3Qo
aGRjLCBmb250KTsKKyAgICAgICAgSFJFU1VMVCBociA9IGdkaUludGVyb3AtPkNyZWF0ZUZvbnRG
YWNlRnJvbUhkYyhoZGMsICZkd0ZhY2UpOworICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRG
b250KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKHJldHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIENyZWF0ZUZv
bnRGYWNlRnJvbUhkYyBtYXkgZmFpbCBpZiB0aGUgZm9udCBzaXplIGlzIHRvbyBsYXJnZS4gUmV0
cnkgaXQgYnkgY3JlYXRpbmcgYSBzbWFsbGVyIGZvbnQuCisgICAgICAgIExPR0ZPTlQgbG9nZm9u
dDsKKyAgICAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOwor
ICAgICAgICBsb2dmb250LmxmSGVpZ2h0ID0gLTMyOworICAgICAgICByZXRyeUZvbnQgPSBhZG9w
dEdESU9iamVjdChDcmVhdGVGb250SW5kaXJlY3QoJmxvZ2ZvbnQpKTsKKyAgICAgICAgZm9udCA9
IHJldHJ5Rm9udC5nZXQoKTsKKyAgICAgICAgcmV0cnkgPSB0cnVlOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVChkd0ZhY2UpOworICAgIHJldHVybiBjYWlyb19kd3JpdGVfZm9udF9mYWNlX2Ny
ZWF0ZV9mb3JfZHdyaXRlX2ZvbnRmYWNlKGR3RmFjZS5nZXQoKSk7Cit9CisKK3ZvaWQgRm9udFBs
YXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplKQorewor
ICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNyZWF0ZUNhaXJvRFdyaXRlRm9udEZh
Y2UoZm9udCk7CiAKICAgICBjYWlyb19tYXRyaXhfdCBzaXplTWF0cml4LCBjdG07CiAgICAgY2Fp
cm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CkBAIC01NSw5ICs5Niw2IEBAIHZvaWQgRm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBI
REMgaGRjLCBXQ0hBUioKIAogICAgIG1fc2NhbGVkRm9udCA9IGFkb3B0UmVmKGNhaXJvX3NjYWxl
ZF9mb250X2NyZWF0ZShmb250RmFjZSwgJnNpemVNYXRyaXgsICZjdG0sIGZvbnRPcHRpb25zKSk7
CiAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwotCi0gICAgaWYgKG1fc2l6
ZSkKLSAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBH
cmFuZGUiKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmpl
Y3Q8SEZPTlQ+IGZvbnQsIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIG9ibGlxdWUsIGNvbnN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGN1
c3RvbVBsYXRmb3JtRGF0YSkKQEAgLTExMiwxMiArMTUwLDEwIEBAIFN0cmluZyBGb250UGxhdGZv
cm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0CiBTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZmFt
aWx5TmFtZSgpIGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKLSAgICBTYXZlREMoaGRjKTsK
LSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9udChzY2FsZWRGb250KCksIGhk
Yyk7CisgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9mb250LmdldCgp
KTsKICAgICB3Y2hhcl90IGZhY2VOYW1lW0xGX0ZBQ0VTSVpFXTsKICAgICBHZXRUZXh0RmFjZSho
ZGMsIExGX0ZBQ0VTSVpFLCBmYWNlTmFtZSk7Ci0gICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRf
ZG9uZV9mb250KHNjYWxlZEZvbnQoKSk7Ci0gICAgUmVzdG9yZURDKGhkYywgLTEpOworICAgIFNl
bGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwogICAgIHJldHVybiBmYWNlTmFtZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFXaW4uY3BwCmluZGV4IGIzZTQ4Njk0NWJkOS4uNjgwNDM3YzExMjk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFXaW4uY3BwCkBAIC0zNCwyNSArMzQsMTMgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXVz
aW5nIHN0ZDo6bWluOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiBmb250LCBmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSwgY29uc3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3VzdG9t
UGxhdGZvcm1EYXRhKQogICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBvYmxpcXVl
LCBGb250T3JpZW50YXRpb246Okhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJX
aWR0aCwgVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nLCBjdXN0b21QbGF0Zm9y
bURhdGEpCiB7CiAgICAgbV9mb250ID0gU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdU
Rk1vdmUoZm9udCkpOwotCi0gICAgSFduZERDIGhkYygwKTsKLSAgICBTYXZlREMoaGRjKTsKLSAg
ICAKLSAgICA6OlNlbGVjdE9iamVjdChoZGMsIG1fZm9udC0+Z2V0KCkpOwotCi0gICAgd2NoYXJf
dCBmYWNlTmFtZVtMRl9GQUNFU0laRV07Ci0gICAgR2V0VGV4dEZhY2UoaGRjLCBMRl9GQUNFU0la
RSwgZmFjZU5hbWUpOwotICAgIHBsYXRmb3JtRGF0YUluaXQobV9mb250LT5nZXQoKSwgc2l6ZSwg
aGRjLCBmYWNlTmFtZSk7Ci0KLSAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgcGxhdGZvcm1E
YXRhSW5pdChtX2ZvbnQtPmdldCgpLCBzaXplKTsKIH0KIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1PcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Np
bXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCmluZGV4IGIyZjAyMmFmOTkxMC4uZmZk
MDIyYzBiZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCkBAIC01NSwyMyArNTUs
MjcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgIEhXbmREQyBkYygwKTsKICAgICBT
YXZlREMoZGMpOwogCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IG1fcGxh
dGZvcm1EYXRhLnNjYWxlZEZvbnQoKTsKLSAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxp
ZXIgPSBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVkRm9u
dCkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0KLSAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9u
dF9zZWxlY3RfZm9udChzY2FsZWRGb250LCBkYyk7CisgICAgSEdESU9CSiBvbGRGb250ID0gU2Vs
ZWN0T2JqZWN0KGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKIAogICAgIE9VVExJTkVURVhU
TUVUUklDIG1ldHJpY3M7CiAgICAgR2V0T3V0bGluZVRleHRNZXRyaWNzKGRjLCBzaXplb2YobWV0
cmljcyksICZtZXRyaWNzKTsKIAotICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2RvbmVfZm9u
dChzY2FsZWRGb250KTsKKyAgICBmbG9hdCB4SGVpZ2h0ID0gbWV0cmljcy5vdG1UZXh0TWV0cmlj
cy50bUFzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGlmIG5vIHggZ2x5
cGggaXMgcHJlc2VudC4KKyAgICBHTFlQSE1FVFJJQ1MgZ207CisgICAgc3RhdGljIGNvbnN0IE1B
VDIgaWRlbnRpdHkgPSB7IHsgMCwgMSB9LCB7IDAsIDAgfSwgeyAwLCAwIH0sIHsgMCwgMSB9IH07
CisgICAgRFdPUkQgbGVuID0gR2V0R2x5cGhPdXRsaW5lKGRjLCAneCcsIEdHT19NRVRSSUNTLCAm
Z20sIDAsIDAsICZpZGVudGl0eSk7CisgICAgaWYgKGxlbiAhPSBHRElfRVJST1IgJiYgZ20uZ21w
dEdseXBoT3JpZ2luLnkgPiAwKQorICAgICAgICB4SGVpZ2h0ID0gZ20uZ21wdEdseXBoT3JpZ2lu
Lnk7CisKKyAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwogICAgIFJlc3RvcmVEQyhkYywg
LTEpOwogCiAgICAgLy8gRklYTUU6IE5lZWRzIHRvIHRha2UgT1MvMiBVU0VfVFlQT19NRVRSSUNT
IGZsYWcgaW50byBhY2NvdW50CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5OTE4NgotICAgIGZsb2F0IGFzY2VudCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJp
Y3MudG1Bc2NlbnQgKiBtZXRyaWNzTXVsdGlwbGllcjsKLSAgICBmbG9hdCBkZXNjZW50ID0gbWV0
cmljcy5vdG1UZXh0TWV0cmljcy50bURlc2NlbnQgKiBtZXRyaWNzTXVsdGlwbGllcjsKLSAgICBm
bG9hdCBjYXBIZWlnaHQgPSAobWV0cmljcy5vdG1UZXh0TWV0cmljcy50bUFzY2VudCAtIG1ldHJp
Y3Mub3RtVGV4dE1ldHJpY3MudG1JbnRlcm5hbExlYWRpbmcpICogbWV0cmljc011bHRpcGxpZXI7
Ci0gICAgZmxvYXQgbGluZUdhcCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3MudG1FeHRlcm5hbExl
YWRpbmcgKiBtZXRyaWNzTXVsdGlwbGllcjsKKyAgICBmbG9hdCBhc2NlbnQgPSBtZXRyaWNzLm90
bVRleHRNZXRyaWNzLnRtQXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQgPSBtZXRyaWNzLm90bVRl
eHRNZXRyaWNzLnRtRGVzY2VudDsKKyAgICBmbG9hdCBjYXBIZWlnaHQgPSBtZXRyaWNzLm90bVRl
eHRNZXRyaWNzLnRtQXNjZW50IC0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bUludGVybmFsTGVh
ZGluZzsKKyAgICBmbG9hdCBsaW5lR2FwID0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bUV4dGVy
bmFsTGVhZGluZzsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CiAgICAg
bV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwpAQCAtNzksMTQgKzgzLDkgQEAgdm9p
ZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5l
R2FwKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSAr
IGxyb3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKICAgICBtX2ZvbnRNZXRyaWNz
LnNldFVuaXRzUGVyRW0obWV0cmljcy5vdG1FTVNxdWFyZSk7Ci0gICAgbV9hdmdDaGFyV2lkdGgg
PSBtZXRyaWNzLm90bVRleHRNZXRyaWNzLnRtQXZlQ2hhcldpZHRoICogbWV0cmljc011bHRpcGxp
ZXI7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSBtZXRyaWNzLm90bVRleHRNZXRyaWNzLnRtTWF4Q2hh
cldpZHRoICogbWV0cmljc011bHRpcGxpZXI7Ci0KLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBl
eHRlbnRzOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhzY2FsZWRGb250LCAi
eCIsICZleHRlbnRzKTsKLSAgICBmbG9hdCB4SGVpZ2h0ID0gLWV4dGVudHMueV9iZWFyaW5nOwot
CiAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fYXZnQ2hhcldp
ZHRoID0gbWV0cmljcy5vdG1UZXh0TWV0cmljcy50bUF2ZUNoYXJXaWR0aDsKKyAgICBtX21heENo
YXJXaWR0aCA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3MudG1NYXhDaGFyV2lkdGg7CiB9CiAKIHZv
aWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKaW5kZXggZjg5MmI3
NzZhZGE2Li44YzcyMWYwOGExZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcApAQCAtNTksNyArNTks
NyBAQCBSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aQogCiAgICAgTE9HRk9OVCB3aW5mb250OwogICAg
IEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5m
b250KTsKLSAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSAqIGNXaW5k
b3dzRm9udFNjYWxlRmFjdG9yKTsKKyAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2Nh
bGVkU2l6ZSk7CiAgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udElu
ZGlyZWN0KCZ3aW5mb250KSk7CiAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1E
YXRhKFdURk1vdmUoaGZvbnQpLCBzY2FsZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNC
b2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSwgbV9wbGF0Zm9ybURhdGEu
Y3VzdG9tUGxhdGZvcm1EYXRhKCkpLCBvcmlnaW4oKSk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>